asc-mcp
Ship and manage App Store releases from your coding agent: inspect apps, edit metadata, upload builds/screenshots, drive TestFlight, create IAPs/subscriptions, submit/release, and get review/sales intelligence.
List apps, app details, review status, builds, and TestFlight groups.
Check setup/connection with a live App Store Connect test and start a free 7-day Pro trial.
Get task-specific playbooks for setup, first app, updates, screenshots, IAP, subscriptions, reviews, TestFlight, binary, and limitations.
Read customer reviews, sales/downloads reports, daily briefings, preflight audits, and metadata diffs.
Generate release notes from git history, analyze keyword competition, and snapshot competitors.
Triage reviews into themes and draft public review responses using MCP Sampling.
Edit version metadata (description, keywords, URLs, what’s new, etc.) and create new versions.
Upload screenshots, attach builds, wait for build processing, and manage phased releases.
Build/archive with Xcode, upload a signed .ipa, and set up App Store signing profiles.
Submit for review, release approved versions, assign builds to TestFlight groups, and invite testers.
Set app price, availability, categories, copyright, export compliance, age rating, and review contact.
Create in-app purchases and subscriptions, set their review screenshots, and get manual-step guidance for App Privacy labels and EU trader status.
Integration with Apple's App Store Connect API, providing tools for managing apps, reviews, sales reports, preflight checks, release notes generation, and more for iOS and macOS apps.
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., "@asc-mcpRun a preflight check on my app"
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.
asc-mcp
Ship an App Store release from your coding agent. An MCP server for App Store Connect: 41 tools that edit version metadata, upload screenshots, attach builds, drive TestFlight, create in-app purchases, submit and release, plus an intelligence layer that audits a version before you submit and summarizes your reviews. 6 slash-command workflows and a bundled Claude Skill. Not another API wrapper.
asc-mcp.pages.dev · npm · Pricing: 7-day free trial, then $9/month, VAT included (sales tax added in the US, Canada and India)
Claude Desktop, one click: download the latest asc-mcp.mcpb and open it. Claude asks for your Issuer ID and lets you pick your .p8 with a file picker. No JSON, no restart hunt.
Everything else (Claude Code, Cursor, Windsurf, Cline), one command:
npx @pofky/asc-mcp init --write # finds your .p8, asks for your Issuer ID, writes your MCP configThen ask your agent: "start my asc-mcp trial, my email is you@example.com". All 41 tools unlock for 7 days, no card and nothing to cancel, and the trial activates in the session you are already in, so whatever you were blocked on works on the very next call. After that Pro is $9 a month (VAT included; in the US, Canada and India sales tax is added at checkout). Six tools stay free, and two of those (the setup check and the playbook) need nothing but Node. The Pro tools that only read (reviews, sales, builds, TestFlight groups, preflight, briefing, keywords, competitors, metadata diff, release notes) also work 5 times in total on your machine with no licence, as a preview.
You say | What happens |
"Run a preflight check on my app" | Audits metadata, character limits, screenshots, build status. Catches the issues that cause 40% of rejections. |
"Give me a morning briefing" | Summarizes all your apps: who's in review, who got rejected, new low-rating reviews, action items. |
"Generate release notes from my git history" | Reads commits since last tag, categorizes them, and gives you structured data to write "What's New" text. |
"Is my app in review?" | Exact review state with context ("typical time: 24-48 hours") |
"Show me 1-star reviews" | Customer reviews filtered by rating, territory, sorted by date |
"What were my downloads this week?" | Sales and revenue summary by territory |
No context switching. No portal. Just ask.
What Makes This Different
Maintained successor to JoshuaRileyDev/app-store-connect-mcp-server (archived Feb 2026). Different angle, same API surface plus more.
Other ASC MCP servers wrap the API and give you 80 to 982 raw endpoints. This one gives you 41 opinionated tools, 6 slash-command Prompts, and a Claude Skill that all think. The read tools summarize and audit; the Pro control tools actually drive App Store Connect, from editing metadata to submitting and releasing, with the same API key. Two tools use MCP Sampling: your own client's model does the LLM work, so there is no extra cost from this server.
Why full control is possible without fastlane: fastlane's deliver and pilot are just calls to the same App Store Connect REST API this server authenticates against with your .p8. So nearly everything you would script with fastlane is a tool here, no Ruby toolchain required. The only step that needs your Mac is building and signing the binary, which build_and_archive and upload_binary drive via Xcode.
Related MCP server: App Store Connect MCP Server
Setup (3 minutes)
Step 1. Create an API key in App Store Connect > Integrations > App Store Connect API (Admin or App Manager role), then grab three things from that same page:
Issuer ID (
ASC_ISSUER_ID): the UUID shown at the top of the page, with a copy button next to it.Key ID (
ASC_KEY_ID): the 10-character ID next to your key, also in the filenameAuthKey_XXXXXXXXXX.p8..p8file (ASC_PRIVATE_KEY_PATH): click Download and point this at the saved file. Apple lets you download it only once, so keep it safe.
Step 2. Install:
npm install -g @pofky/asc-mcpNo global install needed if you prefer npx (see the manual config below).
Fastest setup (recommended). Drop your .p8 into Apple's standard path ~/.appstoreconnect/private_keys/ (the file is named AuthKey_XXXXXXXXXX.p8, and the Key ID is in the filename). Then run:
npx @pofky/asc-mcp init --write # auto-detects the key, asks for your Issuer ID, and writes the config for you
# or: npx @pofky/asc-mcp init # same, but prints the block to paste yourselfinit --write finds your Claude Desktop / Claude Code config, backs it up, and merges in the server block, so there's no JSON editing. The server also auto-discovers the .p8 path at runtime, so you only ever need ASC_ISSUER_ID (and ASC_LICENSE_KEY for Pro).
As a Claude Code plugin. One line installs the server and the review-triage skill together, and Claude Code asks for your Issuer ID when it enables the plugin:
/plugin install asc-mcp --marketplace pofky/asc-mcpThe plugin lives in plugin/, and its README says what it runs and sends.
Running it from an agent, or any pipe. There is no terminal to answer questions in, so pass what would have been asked:
npx @pofky/asc-mcp init --write --issuer <your-issuer-uuid> # add --config <path> if you keep several client configsIt prints the paste-ready block either way, and it never invents a value: if the Issuer ID is missing it says so instead of writing a config that fails at Apple's auth. --key-path, --key-id and --license are there for the same reason, and every one of them also reads from the matching ASC_* environment variable.
Stuck? Run npx @pofky/asc-mcp doctor (or ask your agent to call asc_setup_check). It checks your key, Issuer ID, a live connection to App Store Connect, and your license, and prints the exact fix for anything wrong. In your agent, the /asc-start command walks a first-time user through all of this.
Manual setup. Add to your agent's MCP config (Claude Desktop config, or ~/.claude.json for Claude Code). Use npx for zero-install, or asc-mcp if you installed globally:
{
"mcpServers": {
"appstore-connect": {
"command": "npx",
"args": ["-y", "@pofky/asc-mcp"],
"env": {
"ASC_ISSUER_ID": "YOUR_ISSUER_ID"
}
}
}
}With the .p8 in ~/.appstoreconnect/private_keys/, ASC_ISSUER_ID is the only required env var (Key ID and key path are auto-detected). Add ASC_LICENSE_KEY to unlock Pro.
Step 3. Ask your agent: "List my App Store Connect apps"
Step 4, to try the paid half. Ask your agent: "start my asc-mcp trial, my email is you@example.com". It calls asc_start_trial, which unlocks all 41 tools for 7 days with no card and nothing to cancel. The key activates in the running session, so whatever you were blocked on works on the very next call, and it is saved on your machine, in ~/.asc-mcp/license.json and in any MCP client config that already has an asc-mcp entry, so it survives a restart. One trial per Apple developer account.
Works with Claude Code, Cursor, Windsurf, Cline, and any MCP-compatible client.
Tools
Free (no signup, no license key)
Tool | What it does |
| 7 days of everything, no card. Ask your agent to run it with your email. Unlocks all 41 tools in the running session, no restart, nothing to cancel. |
| Run first if anything's off. Checks your key, Issuer ID, a live App Store Connect connection, and license tier, and prints the exact fix for each failure. |
| Start here. The in-agent playbook for every flow (first release, update, IAP, subscriptions, reviews, TestFlight, binary), with each manual App Store Connect website step flagged inline. See also USER_GUIDE.md and LIMITATIONS.md. |
| List all your apps with name, bundle ID, SKU and App ID |
| Version history, build status, release state, dates |
| Current review state with human-readable context |
Pro (free 7-day trial, then $9/month)
$9 per month, VAT included; in the US, Canada and India sales tax is added at checkout, before you pay. Cancel any time.
Tool | What it does | Why it matters |
| Customer reviews filtered by rating, territory, sort order | See what users say without opening the portal |
| Daily/weekly/monthly downloads and revenue by territory | Know your numbers instantly |
| Pre-submission audit: metadata, char limits, screenshots, builds | Catches 40%+ of common rejection causes before you submit |
| Morning summary across all apps: status, reviews, rejections | One call replaces 10 minutes of portal clicking |
| Git commits since last tag, categorized for writing "What's New" | Your AI agent writes release notes from your actual changes |
| Analyze keywords against iTunes search competition, difficulty ratings | See which keywords are worth targeting at a glance |
| Look up any app: ratings, reviews, version, price, release notes | Competitive intelligence without leaving your editor |
| Compare live vs pending version metadata across all locales | Verify exactly what changed before submitting |
| Pulls recent reviews and clusters them into 3 to 5 themes with counts, action buckets, and quotes, using MCP Sampling | Zero extra cost: your client's model does the clustering |
| Drafts a public reply to a single review in the review's locale, via Sampling. Elicits tone if your client supports it. Never auto-posts. | Apple guideline 1.2 respected; you paste into ASC yourself |
Control & Ship (Pro)
These tools write to App Store Connect. Every outward-facing action (submit, release, upload binary) requires an explicit confirm: true, so nothing leaves your machine by accident.
Tool | What it does |
| Create a new editable App Store version for your next release |
| Edit description, keywords, what's-new, promo text, URLs, app name, subtitle. Validates Apple's character limits and refuses over-limit writes |
| Upload screenshots for a device display type (reserve, upload, commit, with checksum) |
| List recent builds and their processing state (VALID = ready) |
| Poll until a build finishes processing, so the chain does not need a manual pause |
| Attach a build to the editable version (defaults to newest processed build) |
| Submit the version to App Review (modern reviewSubmissions flow). |
| Release an approved version to the public App Store. |
| Start, pause, resume, or complete the 7-day phased rollout |
| List your TestFlight beta groups |
| Push a build to a beta group so testers can install it |
| Invite an external tester by email and add them to a group |
| Set primary/secondary category, copyright, content-rights, and export-compliance (encryption) in one call |
| Set the base price by creating the price schedule ( |
| Make the app available in all App Store territories (or a subset), with auto-include for future ones |
| Set the App Review contact and optional demo account on the version |
| Set the v2 age-rating declaration (full content-descriptor set) |
| Guidance + deep link for the App Privacy nutrition labels (not API-addressable) |
| Guidance + deep link for the EU DSA trader status (not API-addressable) |
| Create a non-consumable/consumable IAP with localization, availability, and an auto-equalized price |
| Create a subscription group, sub, localization, availability, price, and free trial |
| Attach the App Review screenshot to a subscription or IAP |
| Download the app's App Store provisioning profiles and write a manual-signing |
| Build, archive, and export a signed |
| Upload the |
The whole flow chains: setup_app_store_signing to build_and_archive to upload_binary to wait_for_build (blocks until VALID) to attach_build to update_version_metadata to upload_screenshots to set_app_metadata/set_app_price/set_app_availability/set_age_rating/set_review_contact to release_preflight to submit_for_review to release_version. The /asc-ship-release slash command drives it for you.
release_preflight is the single source of truth for "is this submittable": it checks every API-addressable field and ends with a tailored "Manual steps to finish" list for the few things Apple only allows in the website (first-IAP bundling, App Privacy nutrition labels, EU trader status).
Get Pro | Retrieve your license key
What stays manual (and why)
A handful of things Apple does not expose to API keys. The MCP never pretends otherwise: it either returns the exact website steps plus a deep link, or detects the case and aborts so nothing is half-done. Full detail in LIMITATIONS.md (and asc_guide topic:limitations):
Create an app record / App Group.
POST /v1/appsis forbidden for API keys; do it once in the website.App Privacy nutrition label. Not in the API.
set_privacy_nutritionreturns the checklist plus a deep link.EU DSA trader status. Not in the API.
set_eu_trader_statusreturns the steps. Legal decision.An app's first IAPs/subscriptions. Must be submitted with the version in the website;
submit_for_reviewaborts rather than orphan the version. Later products submit via the API.Certificate creation / cloud signing. Least-privilege keys can't;
setup_app_store_signinguses manual-signing profiles instead.Compiling the binary. Needs Xcode on your Mac (
build_and_archiveruns it locally).Posting a public review reply.
draft_review_responsewrites it; you paste it in the website.
How Sampling works (zero extra cost)
triage_reviews and draft_review_response use the MCP Sampling primitive. When you call one of these tools, this server sends a sampling/createMessage request back to your own MCP client. Your client runs the LLM locally (Claude Desktop uses your account; Claude Code uses its session). We never call Anthropic from our side.
Outcome: review clustering and reply drafting cost you exactly what you would pay for any other Claude request, not a penny more from this server.
If your MCP client does not support Sampling yet, both tools return a structured degraded: true result with a clear explanation. Upgrade Claude Desktop or Claude Code to a recent version for full functionality.
Slash Commands (Prompts)
Type these in Claude Desktop or Claude Code and the agent runs a pre-built multi-tool workflow:
Slash command | What it does |
| New here? Verifies the connection, lists your apps, explains free vs Pro in plain language, and recommends your next step. No App Store Connect knowledge assumed. |
| Calls |
| Given an |
| Given an |
| Given an |
| Given an |
These are MCP Prompts per the spec. Zero other App Store Connect MCP ships with them.
Claude Skill (one-line install)
After installing the MCP, run:
npx @pofky/asc-mcp install-skillThis copies a small asc-review-triage Skill to ~/.claude/skills/ so Claude automatically picks up review-related questions ("any bad reviews lately?", "what do my users say?", "ratings this week?") and calls the right ASC tools without you having to explain the workflow each time.
Works on macOS, Linux, and Windows. To remove: npx @pofky/asc-mcp uninstall-skill.
Real Output Examples
"Run a preflight check before I submit"
Release Preflight: v2.3
State: PREPARE_FOR_SUBMISSION
Platform: IOS
PASS (with 1 warning)
Warnings (recommended):
- Missing screenshot set for APP_IPHONE_67. May be required.
Passing checks: 4
- [en-US] Description OK (3874/4000 chars).
- [en-US] Keywords OK (96/100 chars).
- 2 screenshot set(s) found across 1 locale(s).
- Build 40 attached and valid.
Total: 4 pass, 1 warn, 0 fail"Morning briefing"
Daily Briefing - 2026-04-13
2 apps in your account
Tempo: Habit Builder
- Latest: v2.3 (IOS) - Waiting for Review
- Action needed: v2.3 is Waiting for Review
- Reviews (last 3d): 5 new, avg 4.2 stars
NightOwl Weather
- Latest: v1.1 (IOS) - Live
- No new reviews in the last 3 days"Generate release notes from git"
Git History for Release Notes
Since: v2.2.0
Commits: 8
Character limit: 4000 chars for "What's New"
New Features (3)
- feat: add habit streak calendar view
- feat: dark mode support
- add widget for home screen
Bug Fixes (2)
- fix: notification timing off by 1 hour
- fix: crash on iPad when rotating
Instructions: Write user-facing "What's New" text.
Lead with the most impactful change. Keep under 4000 chars.Why This One Over the Free Alternatives?
Raw API wrappers (free) | This server | |
Tool count | 80 to 982 | 41 opinionated tools (read + control) |
MCP Prompts (slash commands) | No | Yes, 6 pre-built workflows |
MCP Sampling (zero server-side LLM cost) | No | Yes, review triage + response drafts |
Claude Skill bundled | No | Yes, one-line install |
Pre-submission audit | No | Yes, catches rejections before you submit |
Cross-app briefings | No | Yes, one call, all apps |
Git-aware release notes | No | Yes, reads your project's commit history |
Smart review summaries | No | Yes, theme clustering, action items |
Setup | Build from source (Swift or Node) | One command, |
Free tier | Some | Yes, 6 tools, no signup. Two of them need nothing but Node |
Try the paid half | n/a | 7 days, no card, started from inside your agent |
Raw wrappers give you endpoints. This gives you answers.
Security
Your .p8 private key never leaves your machine:
The
.p8private key is read locally. JWT tokens are generated on your computer, and name your Key ID and Issuer ID to Apple, as Apple's API requires.API calls go directly from your machine to
api.appstoreconnect.apple.com.The license server is sent your license key string when one is set and, if you start a trial, your email address, a one-way hash of your Issuer ID and the name of the tool you started from. No Apple data and no credentials.
~/.asc-mcp/preview.jsonholds one number, how many of the 5 free preview calls have been used on this machine. It is never sent anywhere.Starting a trial, or fetching a paid key with
asc_start_trial, saves the license key in plain text in~/.asc-mcp/license.json(owner-only permissions on macOS and Linux) and adds it asASC_LICENSE_KEYto every asc-mcp entry found in your Claude Desktop, Claude Code (~/.claude.json, including per-project entries),./.mcp.json, Cursor, Windsurf and Cline configs. Nothing else in those files is changed, and each edited file gets a one-time.bakcopy beside it, which holds whatever the file held.~/.asc-mcp/last-verdict.jsonholds the last license check and a hash of the key. Delete the file and theASC_LICENSE_KEYlines to remove the key.Fully open source. Read the code.
Works With
Claude Code (Anthropic)
Any client supporting the Model Context Protocol
Requirements
Node.js 18+
Apple Developer Program membership
App Store Connect API key (Admin or App Manager role)
Legal
What the server sends, and to whom: the short version
This project is not affiliated with, endorsed by, or sponsored by Apple Inc. Apple, App Store, App Store Connect, TestFlight, Xcode, iOS, and macOS are trademarks of Apple Inc.
License
MIT
Available Tools
41 toolsapp_detailsGet app detailsBRead-only
Get detailed info about an app including versions, build status, and release state.
| Name | Required | Description | Default |
|---|---|---|---|
| app_id | Yes | App Store Connect app ID (use list_apps to find it) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
readOnlyHint=true already establishes this as a safe read. The description usefully adds the scope of the return payload (versions, build status, release state), but says nothing about permissions, App Store Connect auth requirements, or rate limits.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One front-loaded sentence that states the resource first and the returned fields second, with no filler. Slightly lean for the amount of behavior it could have covered, but nothing is wasted.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a low-complexity, read-only lookup with full schema coverage and no output schema, listing the returned fields is the right level of detail. Missing only edge-case behavior (e.g. what happens for an unknown or inaccessible app_id).
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Single parameter with 100% schema description coverage, including a format pattern and a pointer to list_apps, so the schema carries the semantics. The description adds no additional meaning about app_id, which is the expected baseline at full coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Specific verb ('Get') plus resource ('app') and an enumeration of what the detail payload covers (versions, build status, release state). It is clear what the tool returns, though it never contrasts itself with siblings like list_apps or release_version.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives no when-to-use or when-not-to-use guidance and does not name an alternative tool. The only steering ('use list_apps to find it') lives in the app_id schema description, not in the tool description itself.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
asc_guideGet the playbook for a release taskARead-only
START HERE. Returns the exact end-to-end playbook for an App Store task, with every manual ASC-website/Xcode step that no API can do flagged inline. Call with topic to orient before any multi-step flow. Free.
| Name | Required | Description | Default |
|---|---|---|---|
| topic | No | Which playbook. Omit for the overview + topic list. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only declare readOnlyHint=true; the description goes further by disclosing what the content contains (which steps are manual and cannot be done via API) and that it is free to call. That is real added context beyond the safety hint, though it says nothing about size or format of the returned playbook.
Agents need to know what a tool does to the 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 'START HERE' so the routing cue comes first. The one-word 'Free.' sentence is a fragment but carries cost information efficiently; nothing is padded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description must convey what comes back, and it does: an end-to-end playbook with manual steps flagged by topic. It is largely complete for a simple, zero-required-parameter orientation tool, missing only detail about length or structure of the returned content.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and the enum plus 'Omit for the overview + topic list' fully document the single optional parameter. The description's 'Call with topic to orient' adds little beyond the schema, so baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Returns the exact end-to-end playbook for an App Store task') and pins down the scope/content ('every manual ASC-website/Xcode step that no API can do flagged inline'). This clearly distinguishes it from the sibling operational tools like create_version or submit_for_review, which perform steps rather than describe them.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
'START HERE' and 'Call with topic to orient before any multi-step flow' give explicit when-to-use guidance, positioning it as a prerequisite/orientation tool. It does not name exclusions or alternatives, but the routing intent is unambiguous.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
asc_setup_checkCheck setup and connectionARead-only
Diagnose your setup: checks the .p8 key, Key ID, Issuer ID, a LIVE authenticated connection to App Store Connect, and your license tier. For anything wrong, returns the exact fix. Run this first if something isn't working. Free.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
readOnlyHint=true already signals a safe non-mutating call. The description adds real behavioral context beyond that: it performs a LIVE authenticated connection test, inspects specific credential artifacts, reports the license tier, and returns 'the exact fix' on failure. It does not describe latency or how the live check behaves on failure, 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 compact sentences, front-loaded with the core action, followed by the failure behavior and the invocation trigger. No waste.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Despite having no output schema, the description characterizes the return adequately ('returns the exact fix'). For a parameterless diagnostic with a readOnlyHint annotation, an agent has everything needed to call it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters, so schema-based parameter semantics are moot and a baseline of 4 applies. There is nothing for the description to disambiguate.
Input schemas describe structure but not intent. Descriptions should explain 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 ('Diagnose') plus resource ('your setup'), and it enumerates exactly what is checked: .p8 key, Key ID, Issuer ID, live authenticated connection, and license tier. This is clearly distinguishable from all siblings, which are action/mutation tools rather than diagnostics.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicit when-to-use guidance: 'Run this first if something isn't working.' Clear context for invocation. It doesn't name an alternative to use instead, but for a setup diagnostic there is no meaningful sibling alternative, so this is close to complete.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
asc_start_trialStart a free 7-day Pro trialADestructive
Start a free 7-day Pro trial, no credit card, unlocking all 41 tools including the full write/control plane. Call this when a Pro tool is refused and the user wants to proceed, and also when they ask for something only a Pro tool can do (editing metadata, screenshots, builds, TestFlight, IAP, submitting, releasing, preflight, briefings, keyword or review intelligence) before you hit the refusal. Either way, ask for their email address first and never invent one. The trial activates in THIS session immediately, so you can retry the tool that was blocked without any restart. Free.
| Name | Required | Description | Default |
|---|---|---|---|
| tool | No | The tool whose gate prompted this, e.g. submit_for_review. | |
| Yes | The user's email address. Required: the trial key is sent there so they still have it later. Ask the user for it; never invent one. Tell them what the request stores: this address, a one-way hash of their Issuer ID, the trial key with its start and end dates, and which tool they started from. Tell them the address gets the key, one reminder shortly before the trial ends and one note after it, and that each has an unsubscribe link or they can reply stop. Tell them it also saves the key on this machine (~/.asc-mcp/license.json) and adds it to any existing asc-mcp entry in their MCP client configs, leaving a .bak copy of each file it edits. All of it is deletable at https://asc-mcp-license.remewdy.workers.dev/delete (policy: https://asc-mcp-license.remewdy.workers.dev/privacy). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Adds real behavioral context beyond the readOnlyHint=false/destructiveHint=true annotations: the trial activates in the current session and the blocked tool can be retried without restart, and it insists the email be requested (never invented). However, the concrete destructive effects (rewriting MCP client configs, writing ~/.asc-mcp/license.json, .bak copies) are only disclosed in the schema's email field, not the description itself.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Purpose is front-loaded in the opening clause and the two usage triggers follow logically. It is dense and runs long, with the email instruction duplicated from the schema, but nearly every sentence carries actionable guidance and nothing is buried.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 2-parameter trial-starter with no output schema, the description covers activation timing, session persistence, retry behavior, and the consent requirement. An agent has everything needed to invoke it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so both the email and tool parameters are already fully documented there. The description only reinforces 'ask for their email first and never invent one,' which largely repeats the schema rather than adding new semantic meaning — a baseline 3.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (start) and resource (free 7-day Pro trial) and immediately quantifies the benefit: 'unlocking all 41 tools including the full write/control plane.' No sibling tool does this, so an agent can distinguish it without opening any schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly names both trigger conditions ('when a Pro tool is refused and the user wants to proceed' and 'when they ask for something only a Pro tool can do... before you hit the refusal') and enumerates the Pro capabilities. This is exactly the when-to-use routing an agent needs.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
assign_build_to_groupSend a build to a TestFlight groupADestructive
Assign a build to a TestFlight beta group so testers can install it (defaults to newest processed build). Needs confirm:true: Apple notifies every tester immediately and the notification cannot be recalled. Pro feature.
| Name | Required | Description | Default |
|---|---|---|---|
| app_id | Yes | App Store Connect app ID | |
| confirm | No | Required. Every tester in the group is notified immediately. | |
| build_id | No | Specific build ID. Omit for newest VALID build. | |
| group_id | Yes | Beta group ID (from list_beta_groups) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only mark this as non-read-only and destructive; the description goes well beyond that by disclosing that Apple notifies every tester immediately, that the notification cannot be recalled, and that confirm:true is mandatory. It also notes the newest-processed-build default and that the tool is a Pro feature, all of which materially affect whether and how an agent should invoke it.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences with no filler, front-loaded with the action and immediately followed by the highest-risk consequence. Every clause earns its place; nothing is repeated from the title 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?
For a 4-parameter mutation tool with no output schema and full schema coverage, the description covers the critical unknowns: irreversibility, the confirm gate, default build selection, and Pro gating. It stops short of explaining what happens to a previously assigned build or error behavior, which would round it out.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and each parameter is already documented, including confirm's requirement and build_id's fallback behavior. The description largely restates that (defaults to newest processed build, needs confirm:true) without adding syntax, format, or edge-case detail beyond the schema, so the baseline of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource (assign a build to a TestFlight beta group) plus the outcome (testers can install it), which is more than a restatement of the name. It does not explicitly differentiate itself from near-siblings in the list such as attach_build or invite_beta_tester, leaving some ambiguity about which tool handles which build-to-group flow.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives a conditional requirement (confirm:true) and states the default build selection, which is real usage guidance. However, it never says when to prefer this over attach_build or how it relates to the surrounding release flow, so the when-to-use-vs-alternative signal is only implied.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
attach_buildAttach a build to a versionBDestructive
Attach a build to the editable version (defaults to the newest processed build). Pro feature.
| Name | Required | Description | Default |
|---|---|---|---|
| app_id | Yes | App Store Connect app ID | |
| build_id | No | Specific build ID (from list_builds). Omit for newest VALID build. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false and destructiveHint=true, so the agent knows this mutates state. The description usefully adds that the target must be the *editable* version and that the tool is Pro-gated, but it does not explain what the destructive aspect means in practice (e.g., whether an already-attached build is replaced) or what permissions are required.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences, purpose front-loaded ahead of the default behavior, with no wasted prose. 'Pro feature' is terse but carries real information; the only cost is that brevity leaves the destructive semantics unexplained.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 2-parameter mutation tool with no output schema and full schema coverage, the description covers enough to invoke it, but omits what happens to a previously attached build and any prerequisite that the version be in an editable state. Adequate, not thorough.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3, but the description's default rule ('newest processed build') conflicts with the schema's own wording ('Omit for newest VALID build'), introducing ambiguity about which build is selected. That inconsistency actively degrades parameter understanding rather than adding to it.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clear verb+resource: attach a build to the editable version, with the target (editable version) and the default source (newest build) stated. It is distinguishable from assign_build_to_group and upload_binary, though it never names or contrasts those siblings explicitly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
States the default behavior when build_id is omitted ('defaults to the newest processed build') and notes 'Pro feature' gating, which implies an availability constraint. However, there is no when-to-use vs. when-not-to-use guidance relative to siblings like assign_build_to_group or submit_for_review.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
build_and_archiveBuild and archive with XcodeADestructive
Build, archive, and export a signed .ipa via xcodebuild (requires Xcode on this Mac). Needs a scheme and an ExportOptions.plist. Pro feature.
| Name | Required | Description | Default |
|---|---|---|---|
| scheme | Yes | Xcode scheme to build | |
| workspace | No | Set true if project_path is a .xcworkspace | |
| output_dir | No | Output directory (default ./build) | |
| project_path | Yes | Path to .xcodeproj or .xcworkspace | |
| configuration | No | Build configuration (default Release) | |
| export_options_plist | Yes | Path to ExportOptions.plist (method app-store-connect) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false and destructiveHint=true, so safety is covered. The description adds useful behavioral context the annotations don't: the local Xcode environment requirement, required inputs, Pro-feature gating, and that the output is a signed .ipa. It stops short of describing what happens to a pre-existing build directory, which the destructive hint hints at.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three tight sentences, front-loaded with the action and artifact, then environment and prerequisites. No filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a mutation/build tool with annotations covering safety and no output schema, the description covers prerequisites, environment, gating, and the produced artifact. Remaining gaps (build duration, overwrite behavior on output_dir) are minor 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 description coverage is 100%, so all six parameters are self-documented; baseline is 3. The description only reiterates that a scheme and ExportOptions.plist are required and doesn't add format, default, or constraint detail beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States specific verbs (build, archive, export) plus the concrete artifact (.ipa) and the underlying tool (xcodebuild). No sibling overlaps with this exact operation, so an agent can distinguish it, though it doesn't explicitly name an alternative to avoid.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives prerequisites (needs a scheme and ExportOptions.plist, requires Xcode on this Mac) which implies when the tool is usable, but never states when to choose it over neighbors like upload_binary, wait_for_build, or list_builds, nor any exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
competitor_snapshotLook up an app on the App StoreARead-only
Look up any app on the App Store: ratings, reviews, version, price, category, release notes. Search by name or App Store ID. Pro feature.
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | App name (e.g. "Medisafe") or numeric App Store ID | |
| country | No | Two-letter country code (default: us) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With readOnlyHint=true already in annotations, the safety profile is covered by structured data. The description adds two pieces of context the annotations do not: the exact data returned (since there is no output schema) and the 'Pro feature' entitlement gate. It omits country defaulting and any rate-limit 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?
Three short, front-loaded sentences with no waste. The core lookup action leads, the accepted identifier forms follow, and the terse 'Pro feature.' earns its fragment status as an entitlement gate.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a two-parameter read-only lookup with no output schema, the description covers what the tool does, what fields come back, and how to address the app. The only real gap is that it neither explains the country parameter's effect nor distinguishes the tool from overlapping siblings.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so both parameters (query, country) are already fully documented in the schema, including the 'us' default. The description's 'Search by name or App Store ID' merely restates the query parameter's semantics and adds nothing on country. Baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource ('Look up any app on the App Store') and enumerates the return payload (ratings, reviews, version, price, category, release notes). It does not, however, differentiate itself from close siblings like app_details or list_apps, leaving an agent to guess which lookup tool to pick.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It tells the agent how to address the app ('Search by name or App Store ID') and flags a gating condition ('Pro feature'), which is useful. But there is no when-to-use/when-not guidance and no pointer to app_details or list_apps, so disambiguation is left implicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_iapCreate an in-app purchaseADestructive
Create (idempotently) a one-time in-app purchase (non-consumable or consumable) with USA price. Pro feature.
| Name | Required | Description | Default |
|---|---|---|---|
| type | Yes | Purchase type | |
| app_id | Yes | App Store Connect app ID | |
| locale | No | Localization locale (default en-US) | |
| price_usd | Yes | USA price in dollars, e.g. 59.99 | |
| product_id | Yes | IAP product ID, e.g. com.app.lifetime | |
| description | Yes | Customer-facing description (max 45 chars) | |
| review_note | No | Notes for App Review: how to reach the paywall, test instructions | |
| display_name | Yes | Customer-facing name (max 30 chars) | |
| reference_name | Yes | Internal reference name | |
| family_sharable | No | Allow Family Sharing of this purchase (default false). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With annotations only declaring readOnlyHint=false and destructiveHint=true, the description adds real behavioral value: 'idempotently' tells the agent retries are safe and a duplicate product_id will not double-create, and 'Pro feature' signals an entitlement precondition. It stops short of explaining what a failed/partial create leaves behind or how the created IAP is identified in the response.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two brief sentences, zero filler, and the most decision-relevant facts (idempotent create, one-time, USA price) are front-loaded. Nothing is repeated that structured fields already state verbatim.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 10-parameter mutation tool with no output schema, the description covers the essentials: idempotency, product scope, and entitlement gating, with all field detail delegated to a fully covered schema. It could go slightly further on post-creation expectations (e.g. that a review screenshot still has to be set via set_iap_review_screenshot before submission), which is the one workflow gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and every field is individually documented (type enum, price_usd, product_id, length caps), so the schema carries the parameter burden. The description's mentions of purchase type and USA price restate the schema rather than adding format constraints or defaults, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Create ... a one-time in-app purchase'), narrows the variants (non-consumable or consumable), and pins the pricing rule ('with USA price'). This plainly distinguishes it from the sibling create_subscription, which covers recurring purchases.
Agents choose between tools based on descriptions. A clear purpose with a specific verb 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: 'one-time' implies this is the non-recurring counterpart to create_subscription, and 'Pro feature' hints at a gating/precondition. There is no explicit when-to-use/when-not or named alternative, so the agent must infer the boundary.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_subscriptionCreate a subscriptionADestructive
Create (idempotently) an auto-renewable subscription inside a group, with USA price and an optional free trial. Sets territory availability automatically. Pro feature.
| Name | Required | Description | Default |
|---|---|---|---|
| app_id | Yes | App Store Connect app ID | |
| locale | No | Localization locale (default en-US) | |
| period | Yes | Billing period | |
| price_usd | Yes | USA price in dollars, e.g. 4.99 | |
| free_trial | No | Free-trial length. Omit for no trial. | |
| product_id | Yes | Subscription product ID, e.g. com.app.plus.monthly | |
| description | Yes | Customer-facing description (max 45 chars) | |
| group_level | No | Rank within the group (1 = top tier; default 1). Higher-value plans get a lower number. | |
| review_note | No | Notes for App Review: how to reach the paywall, test instructions | |
| display_name | Yes | Customer-facing name (max 30 chars) | |
| reference_name | Yes | Internal reference name | |
| family_sharable | No | Allow Family Sharing of this subscription (default false). | |
| group_display_name | Yes | Customer-facing group name | |
| group_reference_name | Yes | Subscription group reference name (created if absent) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false and destructiveHint=true, so the safety profile is covered. The description adds genuinely non-redundant behavior: idempotency, automatic territory-availability side effect, and the Pro-tier requirement. It stops short of describing the response, keeping it at a 4.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three tight sentences with zero waste; the core action and its key modifiers are front-loaded before the side-effect and tier notes.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 14-parameter creation tool with no output schema, the description covers the essential behavioral facts (idempotent, auto territory setup, Pro requirement) alongside annotations that carry the safety profile. Only the absence of any return/confirmation detail keeps it from 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 100%, so all 14 parameters are documented in the schema itself. The description mentions the group, USD price, free trial, and territory behavior, but adds no syntax or format detail beyond what the schema already provides, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description gives a precise verb (Create), resource (auto-renewable subscription), and scope (inside a group, USA price, optional free trial), so an agent immediately knows what the tool does. It does not explicitly differentiate from the nearby create_iap sibling, which is the only gap keeping it from a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to use this tool versus alternatives such as create_iap, nor any when-not/exclusion. The only contextual hint is 'Pro feature,' which signals a tier prerequisite but is not usage direction.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_versionCreate a new app versionADestructive
Create a new editable App Store version to prepare your next release. Needs confirm:true, because Apple only allows deleting an app's very first version, so this cannot be undone. Pro feature.
| Name | Required | Description | Default |
|---|---|---|---|
| app_id | Yes | App Store Connect app ID | |
| confirm | No | Required. Creating a version on a live app record cannot be undone. | |
| platform | No | Platform (default IOS) | |
| copyright | No | Copyright line, e.g. 2026 Your Company | |
| version_string | Yes | Version number, e.g. 2.5.0 |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already flag readOnlyHint=false and destructiveHint=true, so the mutation risk is known. The description earns credit for explaining WHY it is irreversible (Apple only allows deleting an app's first version) and disclosing the Pro-plan gating, which annotations do not cover.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences, front-loaded with what the tool does, then the confirm gate, then plan gating. Every clause carries information an agent needs.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive creation tool with no output schema, the description covers purpose, irreversibility, required confirmation, and plan gating. It could go slightly further on what the call returns or what state the app must be in, but nothing essential is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so all five parameters including confirm, platform, and version_string are already documented. The description only restates the confirm requirement, adding little semantics beyond the schema's own confirm description.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource (create a new App Store version) plus the lifecycle scope ('editable ... to prepare your next release'), which separates it from release_version, submit_for_review, and update_version_metadata without opening their schemas.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives a clear usage context (preparing the next release) and a hard prerequisite (confirm:true required). It does not name alternatives such as update_version_metadata for editing an existing version or release_version for shipping, so it stops short of explicit routing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
daily_briefingGet a briefing across all appsARead-only
Morning briefing across all apps: version status, recent reviews, rejections, action items. One call for full situational awareness. Pro feature.
| Name | Required | Description | Default |
|---|---|---|---|
| days | No | Look back N days for reviews (default 3) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, so safety is covered. The description adds genuinely new context beyond structured fields: the aggregation spans 'all apps' rather than one app, and 'Pro feature' discloses an entitlement requirement that the schema and annotations do not express. It stops short of describing latency, rate limits, or result shape.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three compact fragments with no filler, and the most important information (what the briefing contains) is front-loaded before the positioning and gating notes. Every clause earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description compensates by listing the categories returned (version status, reviews, rejections, action items), which is enough for an agent to judge relevance. It could say more about scope limits (e.g. limits on app count) or ordering, but nothing blocks correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
There is one optional parameter (days) with 100% schema description coverage, including its default of 3. The description adds nothing about the lookback window, so the schema carries the full burden — the baseline 3 for high coverage applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific artifact (a morning briefing) and enumerates its contents — version status, recent reviews, rejections, action items — while scoping it to 'all apps'. 'One call for full situational awareness' makes the aggregation role clear against single-purpose siblings like list_reviews, review_status, or release_version.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
'One call for full situational awareness' gives a clear condition for selecting this tool over the narrow sibling calls, and 'Morning briefing' frames the daily cadence. It does not explicitly state when not to use it or name the specific alternatives, but the aggregation framing is unambiguous.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
draft_review_responseDraft a reply to a reviewARead-only
Draft a public reply to a single App Store review via MCP Sampling, in the review's locale. Uses Elicitation (if your client supports it) to ask for tone. NEVER auto-posts. Always returns a draft that you must post via App Store Connect yourself. Pro feature.
| Name | Required | Description | Default |
|---|---|---|---|
| tone | No | Tone; if omitted and the client supports Elicitation, the user will be asked interactively. | |
| app_id | Yes | App Store Connect app ID | |
| review_id | Yes | Customer review ID (from list_reviews) | |
| context_note | No | Optional context to weave in (e.g. 'fix ships in v2.5'). | |
| include_support_link | No | Mention that users can reach support (no phone/email, per Apple guideline 1.2). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the lone readOnlyHint, it discloses significant behavior: it uses MCP Sampling and Elicitation (client-dependent) to obtain tone, NEVER auto-posts, and always returns a draft the caller must post manually. These are exactly the operational traits an agent needs and that no annotation conveys.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core action in the first clause, then layered with constraints in five tight, waste-free sentences. Every sentence adds a distinct operational fact (locale, elicitation, never-post, manual posting, Pro gating).
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
There is no output schema, but the description compensates by explaining that a draft is returned and must be posted by the caller, closing the return-value gap. Nothing needed to invoke it correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so all five parameters are already documented. The description's mention of Elicitation for tone largely restates what the tone schema description already says, adding little per-parameter meaning beyond the baseline.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Specific verb (draft) plus resource (a public reply to a single App Store review), with the mechanism ('via MCP Sampling, in the review's locale') made explicit. It is clearly distinguishable from siblings like list_reviews and triage_reviews, which the description implicitly complements.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description clarifies the intended context (a single review, Pro feature) and the post-draft workflow ('you must post via App Store Connect yourself'), which routes the agent after drafting. It does not, however, name an explicit alternative or state when NOT to use it versus triage_reviews.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
invite_beta_testerInvite a TestFlight testerADestructive
Invite an external tester by email and add them to a beta group. Needs confirm:true: Apple emails a real person from your account and it cannot be recalled. Pro feature.
| Name | Required | Description | Default |
|---|---|---|---|
| Yes | Tester email address | ||
| confirm | No | Required. Sends a real email to this address, immediately. | |
| group_id | Yes | Beta group ID (from list_beta_groups) | |
| last_name | No | Tester last name | |
| first_name | No | Tester first name |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true and readOnlyHint=false, and the description adds the crucial why: Apple sends a real email from the user's account and the action cannot be recalled. This irreversible side effect plus the confirm:true safety gate is exactly the behavioral context an agent needs beyond the flags.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three tight sentences, front-loaded with the action, then the safety requirement and consequence, then the Pro gating. No filler and 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?
No output schema exists, and the description covers the irreversibility, the mandatory confirm flag, and the Pro requirement for a 5-param mutation. Nothing needed to call it safely and correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so all five parameters are already documented, and the description largely reinforces that (confirm required, email consequence). It adds the rationale for confirm but no new syntax or value semantics beyond the schema, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (Invite) and resource (external tester by email) plus the second effect of adding them to a beta group. It also implicitly distinguishes this from build/version siblings by naming the beta-group target that the schema links to list_beta_groups, so an agent can tell it apart from assign_build_to_group.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives clear context for use (inviting an external tester) and a precondition (confirm:true) plus a gating note (Pro feature). It does not name an alternative tool or state when-not-to-use, but the surrounding conditions are explicit enough to route correctly.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
keyword_insightsAnalyze keyword competitionARead-only
Analyze your app's keywords against search competition. Shows difficulty, competing apps, and budget usage. Uses iTunes Search API. Pro feature.
| Name | Required | Description | Default |
|---|---|---|---|
| app_id | Yes | App Store Connect app ID | |
| extra_keywords | No | Extra comma-separated keywords to analyze beyond current metadata |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond readOnlyHint=true, the description discloses that it calls the iTunes Search API and is a 'Pro feature' (auth/entitlement requirement), and the mention of 'budget usage' hints at an external quota/rate-limit dimension. These add material behavioral context the annotations do not carry, though reversibility/pagination behavior is unstated.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Four short, front-loaded sentences with no padding; the core action and its outputs come first. Efficient, though 'Uses iTunes Search API' and 'Pro feature' are terse fragments rather than fully integrated statements.
Shorter descriptions cost fewer tokens and are easier for agents to parse. 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 no output schema, the description usefully names what is returned (difficulty, competing apps, budget usage) and flags the Pro entitlement. For a two-parameter read-only analysis tool this is largely complete, with only quota/rate-limit specifics left implicit.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so app_id and extra_keywords are already documented in the schema. The description adds no format or constraint detail beyond that, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Analyze your app's keywords against search competition') and enumerates the outputs: difficulty, competing apps, budget usage. It clearly distinguishes keyword analysis from the other list/search siblings, though it doesn't explicitly position itself against a nearby tool like competitor_snapshot.
Agents choose between tools based on descriptions. A clear purpose with a specific verb 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 ('Analyze your app's keywords') and the 'Pro feature' note signals an availability prerequisite, but there is no explicit when-to-use, when-not-to-use, or alternative tool named. The agent is left to infer that this is for keyword research rather than release or metadata workflows.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_appsList appsBRead-only
List all apps in your App Store Connect account with name, bundle ID, SKU and App ID.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Max apps to return (default 50, max 200) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
readOnlyHint=true in annotations already declares this is a safe read. The description adds context by listing the returned fields and confirming account scope, but says nothing about pagination behavior or what the limit parameter governs beyond what the schema states.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with zero filler; the verb, scope, and return fields are all packed efficiently 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?
There is no output schema, so the description usefully enumerates the returned fields (name, bundle ID, SKU, App ID). For a one-parameter read tool with readOnlyHint coverage, this is nearly complete; only pagination/max-result semantics are left implicit.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% - the single 'limit' parameter (default 50, max 200) is fully documented in the schema. The description adds no parameter detail, so the baseline 3 for high coverage applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (List) and resource (apps) with scope ('in your App Store Connect account') and the fields returned (name, bundle ID, SKU, App ID). Sibling tools are mostly write/action operations with no competing 'list apps' variant, so no explicit differentiation is needed, but none is offered.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No when-to-use or when-not guidance is given. The description only restates what the tool does, leaving the agent to infer that this is the entry point for discovering apps before calling siblings like app_details or list_builds.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_beta_groupsList TestFlight groupsBRead-only
List TestFlight beta groups for an app. Pro feature.
| Name | Required | Description | Default |
|---|---|---|---|
| app_id | Yes | App Store Connect app ID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, so the safe read-only nature is covered. The description adds the 'Pro feature' gating caveat, which is genuinely useful context, but omits pagination, result limits, or ordering behavior. With annotations carrying the safety profile, this is an adequate but thin contribution.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences, front-loaded with the action and resource. Every word earns its place with no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple one-parameter read tool with readOnlyHint and full schema coverage, the description is nearly sufficient. It lacks any note on what a group contains or whether results are paginated, but the essentials for correct invocation are present.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and the single app_id parameter is fully documented with type, pattern, and meaning. The description adds nothing parameter-specific, so the baseline of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: 'List TestFlight beta groups for an app.' An agent can distinguish this from siblings like assign_build_to_group or list_builds. However, it does not explicitly differentiate scope against any named sibling.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No when-to-use guidance, no prerequisites, and no alternatives named. The only hint is 'Pro feature,' which signals availability gating but not when an agent should select this tool over the related beta-group and build tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_buildsList buildsARead-only
List recent builds for an app with processing state (VALID = ready to use). Pro feature.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Max builds (default 10, max 50) | |
| app_id | Yes | App Store Connect app ID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, so safety is covered. The description adds two pieces of genuinely useful context beyond that: results carry a processing state with 'VALID = ready to use', and the tool is a 'Pro feature', alerting the agent to a possible access/entitlement restriction.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single compact sentence with the operation front-loaded and no wasted words; the parenthetical state hint and 'Pro feature' note each earn their 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 read-only list tool with no output schema, the description covers purpose, the meaning of the key returned state, and the Pro gating. It omits return ordering and pagination behavior relative to the 'limit' cap, keeping it just short of fully complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and both parameters (app_id, limit) are documented in the schema itself. The description adds no syntax or format detail beyond what the schema provides, so the baseline 3 is correct.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a clear verb+resource ('List recent builds for an app') and adds a scoping qualifier ('recent') plus what the results contain ('processing state'). An agent can tell it apart from mutation siblings like wait_for_build or attach_build, but no sibling is named explicitly, so it lands at 4 rather than 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase 'for an app' implies the listing use case, but there is no explicit when-to-use vs when-not-to-use guidance and no routing to alternatives such as wait_for_build for polling a single build. Usage is only implied.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_reviewsList customer reviewsBRead-only
List customer reviews for an app. Filter by rating. Pro feature.
| Name | Required | Description | Default |
|---|---|---|---|
| sort | No | Sort order (default: newest) | |
| limit | No | Max reviews (default 20, max 100) | |
| app_id | Yes | App Store Connect app ID | |
| rating | No | Filter by star rating (1-5) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
readOnlyHint=true already covers the read-only safety profile, so the bar is lower. The description adds the useful "Pro feature" gating constraint, but says nothing about pagination or return shape for what is clearly a paged list endpoint.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short front-loaded sentences with no waste; the primary purpose leads. The final "Pro feature" telegraph is terse but earns its place as a prerequisite signal.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read-only list tool with no output schema and full schema coverage, this is minimally adequate. It omits expected behavior on default result caps beyond limit and offers no hint of the response contents.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so all four parameters are fully documented in the schema (sort, limit, app_id, rating with enum/min/max). The description's "Filter by rating" only restates the rating param, adding nothing the schema lacks, so baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ("List customer reviews for an app") plus a filtering capability. However, it does not differentiate from siblings like triage_reviews or review_status, leaving the agent to infer which review-related tool applies.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
"Pro feature" notes a prerequisite (needs a Pro subscription), which is useful. But there is no guidance on when to use this versus triage_reviews or draft_review_response, and no exclusions are stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
manage_phased_releaseControl a phased releaseADestructive
Control the 7-day phased rollout: start, pause, resume, or complete (release to 100%). Pro feature.
| Name | Required | Description | Default |
|---|---|---|---|
| action | Yes | Phased release action | |
| app_id | Yes | App Store Connect app ID | |
| confirm | No | Required. These change how a live version reaches the public; complete is irreversible. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false and destructiveHint=true, so the safety profile is covered. The description adds value beyond that: the 7-day window, that 'complete' means release to 100%, and that this is a Pro-gated feature. It stops short of stating auth requirements or what happens to a paused release.
Agents need to know what a tool does to the 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 fragments with zero filler; the core action and the 7-day scope are front-loaded before the qualifying 'Pro feature' note. Nothing could be trimmed without losing information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 3-parameter mutation tool with no output schema, full schema coverage and a destructive annotation, the description supplies the essential framing: duration, action set, and gating. It omits failure modes and state-transition rules, which keeps it slightly short of complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so all three parameters are already documented, including the irreversible nature of 'complete' via the confirm field. The description only lightly clarifies 'complete (release to 100%)', which is already implied by the enum. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific verb (control) and resource (the 7-day phased rollout) and enumerates the four supported actions, which map exactly to the action enum. It is clearly distinct in scope from siblings like release_version or submit_for_review, though it never explicitly contrasts itself with them.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied by the action list and the 'Pro feature' caveat, so an agent can infer this manages an in-flight rollout. However, there is no explicit when-to-use guidance, no statement of prerequisites or ordering (e.g. must start before pausing), and no named alternative.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
metadata_diffCompare live and pending metadataBRead-only
Compare metadata between your live and pending app versions. Shows what changed in descriptions, keywords, and release notes across locales. Pro feature.
| Name | Required | Description | Default |
|---|---|---|---|
| app_id | Yes | App Store Connect app ID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The readOnlyHint annotation already establishes this is a safe read, so the bar is lower. The description does add real context beyond the annotations: the fields compared (descriptions, keywords, release notes), the cross-locale scope, and the 'Pro feature' entitlement note. It does not describe diff granularity, ordering, or size limits, so it stays mid-range.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences, front-loaded with the core action, and every sentence contributes: the comparison, the field scope, and the entitlement. No repetition of the title or schema.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-parameter read tool this is nearly complete, and with no output schema the description sensibly sketches the return content ('what changed in descriptions, keywords, and release notes across locales'). It still omits how results are structured or whether unchanged locales appear, a minor gap for a diff 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?
Only one parameter exists and schema description coverage is 100%, so the schema already fully documents app_id. The description adds no format or constraint details beyond what the schema carries, making the baseline 3 the correct score.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description gives a specific verb+resource ('Compare metadata between your live and pending app versions') and enumerates the compared fields, making the tool clearly distinct from mutators like update_version_metadata or set_app_metadata. It stops short of naming any sibling tool outright, so it lands at 4 rather than 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no explicit when-to-use, when-not-to-use, or alternative-tool guidance. The only usage-adjacent signal is 'Pro feature,' which hints at an entitlement requirement but does not tell the agent when this diff is the right call versus release_preflight or app_details.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
release_notesCollect commits for release notesARead-only
Extract git commits since last tag and return structured data for writing App Store 'What's New' text. Categorizes changes and provides writing guidelines. Pro feature.
| Name | Required | Description | Default |
|---|---|---|---|
| since_tag | No | Git tag to diff from (default: latest tag) | |
| max_commits | No | Max commits to include (default 50, at most 500) | |
| project_path | No | Path to git project (default: current directory) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, so the safety profile is covered. The description adds genuinely useful context beyond that: it returns structured/categorized data, supplies writing guidelines, and is gated as a 'Pro feature' (an entitlement prerequisite). It doesn't describe output shape or pagination, but it goes well past the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two tight sentences with the core action front-loaded and the downstream purpose immediately after; no filler. A touch terse on behavioral detail, but every clause earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a no-output-schema, read-only tool with three fully documented optional parameters, the description conveys enough: what it reads, what it returns (structured/categorized data plus guidelines), and the Pro gating. Only the exact return structure is left unspecified, which is acceptable absent an output schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so since_tag, max_commits and project_path are fully documented in the schema itself. The description only echoes the date-range concept ('since last tag') without adding syntax or format details beyond what the schema already provides, making the baseline 3 appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description gives a specific verb and resource ('Extract git commits since last tag') and states the downstream goal (App Store 'What's New' text), so its function is unambiguous. It does not explicitly differentiate itself from nearby siblings such as release_version or release_preflight, which is the only reason it isn't 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 'since last tag' and 'for writing App Store What's New text', so the agent can infer the scenario. However there is no explicit when-to-use guidance, no exclusions, and no mention of when a different sibling (e.g. release_version) is the better choice.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
release_preflightAudit a version before submissionARead-only
Pre-submission audit: checks metadata, character limits, screenshots, build status. Catches rejection causes before you submit. Pro feature.
| Name | Required | Description | Default |
|---|---|---|---|
| app_id | Yes | App Store Connect app ID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, and the description is consistent (it only says 'checks'), so no contradiction. It adds real context beyond annotations: the exact categories audited and an access constraint ('Pro feature'), which an agent needs to know before invoking.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three tight clauses with no filler: what it does, why it matters, and the access caveat. The purpose is front-loaded in the first four words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only, single-parameter audit tool with no output schema, the description covers what is checked and the Pro gating, which is enough to call it correctly. It could clarify the scope tie to a specific version, since the title mentions 'a version' but the only input is an app ID.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Only one parameter (app_id) and schema coverage is 100%, so the schema fully documents it with format and pattern. The description adds nothing about the identifier, which is the expected baseline when the schema does the heavy lifting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Names a specific action (pre-submission audit) and enumerates what it inspects: metadata, character limits, screenshots, build status. It is clearly distinct from submit_for_review and review_status, though it does not name those siblings explicitly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
States the clear context of use: run it before submitting to catch rejection causes. No exclusions or explicit alternative routing are given, but an agent can infer the pre-submission window without ambiguity.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
release_versionRelease an approved versionADestructive
Release an approved version (state PENDING_DEVELOPER_RELEASE) to the public App Store. Outward-facing: requires confirm:true. Pro feature.
| Name | Required | Description | Default |
|---|---|---|---|
| app_id | Yes | App Store Connect app ID | |
| confirm | No | Must be true to actually release. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare this as a non-read-only, destructive operation. The description adds real context beyond that: the operation is outward-facing (goes to the live public store), it is gated behind confirm:true, it is a Pro-tier feature, and it demands a specific prior state. It does not address reversibility or what happens if the version is not yet approved, so it is not exhaustive.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short, front-loaded clauses with zero filler: what it does, the required state, the outward-facing confirm gate, and the tier. Every fragment earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a two-parameter tool with strong annotations and full schema coverage, the description covers the precondition, the safety gate, and the tier requirement. With no output schema it could say a little more about what the agent should expect back, but nothing needed for correct invocation is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so both app_id and confirm are already documented in the schema. The description only restates the confirm:true requirement, adding emphasis but no new syntax or format detail. Baseline 3 applies when the schema does the heavy lifting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
It states a specific verb (release), the resource (a version), the required source state (PENDING_DEVELOPER_RELEASE) and the destination (public App Store). This is clearly distinguishable from siblings like submit_for_review, release_preflight, and manage_phased_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?
The description gives a clear precondition (version must be in PENDING_DEVELOPER_RELEASE) and two gating conditions (confirm:true, Pro feature). It does not name an alternative sibling such as release_preflight or explain what to do if the version is not yet approved, so it stops short of full when/when-not routing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
review_statusCheck App Review statusBRead-only
Check the current App Store review status - in review, waiting, approved, or rejected.
| Name | Required | Description | Default |
|---|---|---|---|
| app_id | Yes | App Store Connect app ID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The readOnlyHint=true annotation already establishes this is a safe, non-mutating read, so the description is not carrying the full behavioral burden. It adds the set of possible status values, which is genuinely useful, but says nothing about whether the result is live from App Store Connect, cached, or subject to rate limits.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with zero filler; the purpose and the expected result values are both delivered before the reader needs anything else.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a one-parameter, read-only tool this is nearly sufficient: purpose and likely return values are covered. With no output schema, it could have said slightly more about what the response actually contains or how fresh it is, but nothing an agent strictly needs to invoke it is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% — app_id is documented as the 'App Store Connect app ID' with a numeric pattern — so the schema does the heavy lifting for the single parameter. The description adds no meaning beyond that, which is the baseline 3 case.
Input schemas describe structure but not intent. Descriptions should explain 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 ('Check the current App Store review status') and even enumerates the possible result values, so an agent knows exactly what it retrieves. It does not differentiate itself from any sibling (e.g., submit_for_review as the preceding step), which keeps it short of a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no when-to-use or when-not-to-use guidance, no prerequisites, and no mention of related siblings such as submit_for_review or release_preflight. Usage is only inferable from the tool name itself, which is the minimum rather than real guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
sales_reportGet sales and downloads summaryBRead-only
Download sales/downloads summary. Shows units, proceeds, territory. Pro feature.
| Name | Required | Description | Default |
|---|---|---|---|
| frequency | No | Report frequency (default: DAILY) | |
| report_date | No | Date in YYYY-MM-DD (daily) or YYYY-MM (monthly). Default: yesterday. | |
| vendor_number | No | Vendor number (8-9 digits) from App Store Connect > Sales and Trends. Omit to be told where to find it. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, so the safe-read profile is covered. The description adds one genuinely useful behavioral fact beyond the annotations: it is a Pro feature, implying an entitlement check. It does not disclose rate limits, pagination, or what happens when the vendor number is omitted (the schema only hints at this).
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three terse, front-loaded sentences with no filler — the verb and resource lead, and the Pro caveat closes. It is perhaps too terse to earn a 5, 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?
With no output schema, the description does carry the burden of describing returns, and it does so only summarily (units, proceeds, territory). Given three fully documented parameters and a simple read-only tool, this is adequate but leaves return shape and entitlement-failure behavior unspecified.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so frequency, report_date formats, and the vendor_number sourcing note are already documented. The description adds no syntax or default information beyond the schema; 'territory' is mentioned but is report content, not an input parameter, so it does not map to any field.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource ('Download sales/downloads summary') and enumerates the report contents (units, proceeds, territory), which is enough to distinguish it from the release/metadata/review management siblings. It does not, however, name any sibling or explicitly contrast itself with them.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
'Pro feature' is the only usage guidance, and it is a licensing caveat rather than a when-to-use rule. The description never says when an agent should reach for this report versus other analytics/reporting tools, nor what prerequisites (e.g., vendor number, Pro entitlement) must be satisfied first.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set_age_ratingSet the age ratingADestructive
Set the app's age-rating content declarations (Apple computes 4+/9+/12+/17+). Pass a declarations map, e.g. { medicalOrTreatmentInformation: "INFREQUENT_OR_MILD" }. Pro feature.
| Name | Required | Description | Default |
|---|---|---|---|
| app_id | Yes | App Store Connect app ID | |
| declarations | Yes | Map of declaration key to value. Frequency keys take NONE/INFREQUENT_OR_MILD/FREQUENT_OR_INTENSE (also INFREQUENT/FREQUENT for the few keys Apple uses those on); capability keys take true/false. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false and destructiveHint=true, so the write/destructive profile is covered structurally. The description usefully adds that Apple computes the final tier from the declarations (so the caller passes inputs, not a rating), but it does not clarify whether the declarations map replaces or merges with existing declarations.
Agents need to know what a tool does to the 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 with zero filler: purpose, then the call pattern with an example, then the Pro gating. The most important information is front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a two-parameter mutation tool with full schema coverage and annotations carrying the safety profile, the description covers purpose, the nested-map shape, and the gating constraint. No output schema exists, so nothing about return values is owed here.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3; the description earns an extra point by giving a concrete example key ('medicalOrTreatmentInformation') that the schema only describes generically, making the map's shape immediately usable.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships 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 app's age-rating content declarations') and clarifies the outcome (Apple computes 4+/9+/12+/17+), which separates it from adjacent mutation tools like set_app_metadata. It does not explicitly name any sibling, so it stops short of a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is only implied — an agent infers this is the tool for age-rating declarations. The 'Pro feature' note is a useful gating prerequisite, but there is no when-to-use/when-not guidance and no alternative named for related metadata tasks.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set_app_availabilitySet country availabilityADestructive
Set the app's country/region availability. Requires an explicit choice: a territories list, or all_territories:true, or [] to take the app off sale worldwide. Pro feature.
| Name | Required | Description | Default |
|---|---|---|---|
| app_id | Yes | App Store Connect app ID | |
| territories | No | Territory ids to enable, e.g. ["USA","GBR"]; everywhere else is turned off. Pass [] to take the app off sale worldwide. Omit only if you pass all_territories. | |
| all_territories | No | Put the app on sale in every App Store territory. Required when territories is omitted, so an app_id alone can never widen where an app is sold. | |
| available_in_new_territories | No | Auto-include future new territories (default true) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already flag destructiveHint=true, and the description reinforces this by disclosing that [] takes the app off sale worldwide. It also adds an external requirement (Pro feature) not present in structured fields. It does not state reversibility or that unlisted territories are disabled, though the schema covers the latter.
Agents need to know what a tool does to the 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, with the core purpose front-loaded and the constraint immediately after. 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 four-parameter mutation with no output schema, the description covers the destructive case, the required-input contract, and the plan requirement. It omits what the response returns and whether partial failures are possible, which are minor given the rich schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline is 3, but the description adds the mutual-exclusivity rule between territories and all_territories and the off-sale semantics of the empty array. This goes beyond restating parameter descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a precise verb and resource ('Set the app's country/region availability'), which is immediately distinguishable from siblings like set_app_price or set_app_metadata. An agent knows exactly what domain this mutates.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives a clear invocation rule: an explicit choice of territories list, all_territories:true, or [] for worldwide removal. It stops short of naming alternative tools or when-not-to-use conditions, but the required-input contract is unambiguous.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set_app_metadataSet categories, copyright and complianceADestructive
Set submission-required app basics: primary/secondary category (appCategory ids like HEALTH_AND_FITNESS), copyright, content-rights declaration, and export compliance (encryption). Each applied only if provided. Pro feature.
| Name | Required | Description | Default |
|---|---|---|---|
| app_id | Yes | App Store Connect app ID | |
| copyright | No | Copyright line, e.g. 2026 Povilas Konopackas | |
| content_rights | No | Content-rights declaration | |
| primary_category | No | Primary appCategory id, e.g. HEALTH_AND_FITNESS | |
| secondary_category | No | Secondary appCategory id | |
| uses_non_exempt_encryption | No | Export compliance: true if the app uses non-exempt encryption (most apps: false) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false and destructiveHint=true, so the safety profile is covered structurally. The description usefully adds that unprovided fields are left untouched ('Each applied only if provided'), but says nothing about overwriting existing category/copyright values, permission/auth needs, or the 'Pro feature' gating implications beyond a terse label.
Agents need to know what a tool does to the 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 enumerated fields, no filler sentences, and the partial-update caveat and 'Pro feature' note are compact. The sentence is dense to the point of being a field list, which slightly hurts readability but wastes nothing.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 6-parameter, 1-required mutation with full schema coverage and no output schema, the description covers every settable field and the partial-update semantics. Remaining gaps are minor: no confirmation of return behavior or error/precondition handling.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3; the schema already documents each field including the encryption guidance. The description reiterates the same fields (categories, copyright, content rights, encryption) and adds the appCategory-id convention, but contributes little syntax or format detail the schema lacks.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Specific verb (Set) plus the exact resources being set: categories, copyright, content-rights, and export compliance. It names concrete field values (appCategory ids like HEALTH_AND_FITNESS) and clearly distinguishes itself from siblings like set_age_rating, set_privacy_nutrition, and update_version_metadata.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
'Submission-required app basics' implies this is part of the pre-submission flow, and 'Each applied only if provided' clarifies partial-update behavior. However, it never says when to use this versus the many adjacent setters (set_age_rating, set_privacy_nutrition, update_version_metadata) or states any prerequisites such as the app being in an editable state.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set_app_priceSet the app priceADestructive
Set the app's base price by creating its price schedule (USA base, auto-equalized). price_usd: 0 for free. Required before submission. Pro feature.
| Name | Required | Description | Default |
|---|---|---|---|
| app_id | Yes | App Store Connect app ID | |
| price_usd | Yes | 0 for a free app, or a USA price tier in dollars |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false and destructiveHint=true, so the mutation risk is covered. The description adds meaningful behavior beyond that: it creates a price schedule, auto-equalizes to other territories (a side effect not in the schema), and is a paid-tier feature. It does not state reversibility or how existing pricing is replaced.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three tight sentences, front-loaded with the core action and mechanism, then prerequisites. Every clause earns its place and 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?
For a simple two-parameter mutation with no output schema, the description covers action, mechanism, edge case (0 = free), and precondition. Minor gaps remain around what happens to prior pricing or territory overrides, but nothing critical to correct invocation is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so both parameters are already documented. The description's 'price_usd: 0 for free' restates the schema field rather than adding new meaning, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource ('Set the app's base price') and clarifies the mechanism ('by creating its price schedule') as well as the scope ('USA base, auto-equalized'). An agent immediately understands this is a write operation that establishes pricing, distinct from the metadata/version 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?
'Required before submission' gives a concrete precondition for calling it, and 'Pro feature' flags an availability gate. It stops short of naming alternatives or when-not-to-use conditions, but the context is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set_eu_trader_statusGet the EU trader status stepsARead-only
Declare EU Digital Services Act trader status. Not API-addressable; returns the exact steps + deep link. Pro feature.
| Name | Required | Description | Default |
|---|---|---|---|
| app_id | Yes | App Store Connect app ID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With readOnlyHint=true already set, the description adds real value: it discloses that the tool does not actually mutate anything ('Not API-addressable') and that it returns steps plus a deep link, which corrects the misleading 'set_' naming. 'Pro feature' also flags access gating. It stops short of describing the return payload's shape.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two tight sentences that front-load the resource and immediately correct the misleading name. Every clause earns its place with no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-parameter, read-only guidance tool with no output schema, the description covers the essentials: what it relates to, that it is not API-addressable, and what it returns. Minor gap is the absence of any note on how the returned steps should be consumed or presented.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
There is a single parameter (app_id) with 100% schema description coverage, so the schema already carries the semantics. The description adds nothing about the parameter, so the baseline of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific resource (EU DSA trader status) and clarifies the actual behavior: it returns the steps and a deep link rather than performing the change implied by the name 'set_eu_trader_status'. This is clear, though it does not differentiate itself from related guide siblings like asc_guide or asc_setup_check.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase 'Not API-addressable' tells the agent this is a guidance-only tool, which is genuine usage context, but there is no explicit when-to-use guidance and no alternatives named. Usage is implied rather than stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set_iap_review_screenshotUpload an in-app purchase review screenshotADestructive
Upload the App Review screenshot a subscription or in-app purchase needs to leave MISSING_METADATA. Resolves the product by product_id automatically. Pro feature.
| Name | Required | Description | Default |
|---|---|---|---|
| file | Yes | Absolute path to a PNG/JPEG review screenshot | |
| app_id | Yes | App Store Connect app ID | |
| product_id | Yes | Product ID of the subscription or IAP |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false and destructiveHint=true, so the mutation profile is known. The description adds value beyond that by disclosing automatic product resolution via product_id and the 'Pro feature' entitlement gate. It stops short of saying what happens to a pre-existing screenshot, which is the natural question given destructiveHint=true.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences, zero filler, and the most decision-relevant information (what it uploads and why) is front-loaded. Even the terse 'Pro feature.' fragment carries gating information and earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With all three parameters documented and no output schema to explain, the description covers purpose, trigger condition, and entitlement requirement. The remaining gap is destructive behavior detail: with destructiveHint=true and no statement about replacing an existing review screenshot, an agent cannot fully predict the side effect.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so app_id, product_id, and file are already fully documented in the schema, making 3 the baseline. The description only adds that product_id is auto-resolved to the product, a minor semantic clarification rather than new syntax or format guidance.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('Upload'), an exact resource ('the App Review screenshot a subscription or in-app purchase needs'), and the outcome it unblocks ('leave MISSING_METADATA'). The IAP/subscription qualifier implicitly separates it from the sibling upload_screenshots, which handles app-store listing screenshots rather than product review assets.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives a clear triggering condition: use this when a subscription or IAP is stuck at MISSING_METADATA. That is real context an agent can act on, but it never states what to do instead when the blocker is a different status, nor names any alternative tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set_privacy_nutritionGet the App Privacy label stepsARead-only
Configure the App Privacy nutrition label. Apple does not expose this via API; returns the exact steps + deep link. Pass data_not_collected:true for the 'Data Not Collected' path. Pro feature.
| Name | Required | Description | Default |
|---|---|---|---|
| app_id | Yes | App Store Connect app ID | |
| data_not_collected | No | Set true if the app collects no data at all. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, so the safety profile is covered. The description earns extra credit by disclosing behavior beyond that: Apple does not expose this via API, the return is step-by-step instructions plus a deep link, and the tool is gated to Pro users — all non-obvious traits an agent needs.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short, front-loaded sentences with no padding; the API limitation and return behavior come early. Only the mildly misleading opening verb costs it a point.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description correctly fills the gap by describing what comes back (steps + deep link). All required/optional parameters are covered by the schema, and the Pro restriction is noted, so an agent can call it correctly; explicitly resolving the read-only-vs-configure ambiguity would make it airtight.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so both parameters are already documented with patterns and descriptions, giving a baseline of 3. The description's note about data_not_collected:true largely restates the schema's own wording and adds no format or edge-case detail beyond it.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States the resource (App Privacy nutrition label) and the real outcome (returns the exact steps + deep link, since Apple does not expose it via API). The leading verb "Configure" is slightly misleading given the tool is read-only, but the very next clause corrects it, so an agent still lands on the right purpose without opening the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives one concrete branch rule (pass data_not_collected:true for the 'Data Not Collected' path) and flags the Pro gate, which is useful. However it offers no when-to-use vs alternatives or when-not guidance, and no sibling (e.g. asc_guide) is named, so routing is only implied.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set_review_contactSet the App Review contactADestructive
Set the App Review contact and optional demo account on the editable version. Required before submission. Pro feature.
| Name | Required | Description | Default |
|---|---|---|---|
| Yes | Contact email | ||
| notes | No | Notes for App Review (how to test, etc.) | |
| phone | Yes | Contact phone (with country code) | |
| app_id | Yes | App Store Connect app ID | |
| last_name | Yes | Contact last name | |
| first_name | Yes | Contact first name | |
| demo_account_name | No | Demo account username, if the app needs a login | |
| demo_account_password | No | Demo account password | |
| demo_account_required | No | Pass false to declare that no demo account is needed. Omit to leave the existing setting alone; passing demo_account_name sets it to true. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false and destructiveHint=true, so the write/destructive nature is covered. The description adds the 'editable version' constraint, which is useful, but says nothing about what existing settings get overwritten, auth requirements, or failure modes on a non-editable version. With annotations carrying the safety profile, this is adequate but thin.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three tight sentences with zero filler, front-loading what the tool does before the prerequisite and the gating note. 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 9-parameter setter with no output schema, the definition covers purpose, precondition, and gating. It leaves minor gaps about what happens on a non-editable version or what gets overwritten, but the annotations and full schema coverage make it largely 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 100%, so all 9 parameters are already documented, including the subtle demo_account_required behavior. The description only alludes to the 'optional demo account' and adds no syntax or format detail beyond the schema, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb (Set) and resource (App Review contact and optional demo account) plus a scope qualifier ('on the editable version'). It is clear what the tool does, though it does not name any sibling tool to differentiate from, so it falls short of the 5 bar.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
'Required before submission' gives a concrete precondition for when the agent must call it, and 'Pro feature' signals a gating constraint. There is no explicit comparison against alternatives (e.g., submit_for_review or update_version_metadata), but the context is clear enough.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
setup_app_store_signingInstall App Store signing profilesADestructive
Prepare App Store binary signing without the cloud-signing permission many API keys lack: downloads the app's IOS_APP_STORE provisioning profiles (app + extensions), installs them, and writes a manual-signing ExportOptions.plist for build_and_archive. Needs an Apple Distribution certificate already in the keychain. Pro feature.
| Name | Required | Description | Default |
|---|---|---|---|
| app_id | Yes | App Store Connect app ID | |
| output_plist | No | Where to write ExportOptions.plist (default ./ExportOptions.plist) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already flag destructiveHint=true, and the description adds real context: a prerequisite (Apple Distribution certificate in keychain), a Pro gate, and the side effects of installing profiles. It does not warn that writing output_plist will overwrite an existing file at that path, which is the specific destruction an agent should anticipate.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single dense sentence-set, front-loaded with the tool's purpose and constraints in a logical order (why, what, prerequisite, availability). Every clause carries information; the only mild cost is a long first clause before the actions.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a two-parameter mutation tool with no output schema, the description covers the goal, ordering relative to build_and_archive, prerequisites, and the Pro requirement. The gap is the absence of any statement about overwrite behavior or what the tool returns on success.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so both parameters are already documented, including the default for output_plist. The description mentions the plist file and its role but adds no format or syntax detail beyond the schema, so the 3 baseline applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States specific verbs and resources: downloads IOS_APP_STORE provisioning profiles (app + extensions), installs them, and writes a manual-signing ExportOptions.plist. It also situates itself in the workflow by naming build_and_archive, so an agent can distinguish it from generic release/upload siblings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explains the condition that selects this tool – prepare signing without the cloud-signing permission many API keys lack – which implicitly tells the agent when it is unnecessary (when cloud signing is available) and that it precedes build_and_archive. No explicit 'do not use' clause or named alternative tool, so not a full 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
submit_for_reviewSubmit a version for App ReviewADestructive
Submit the editable version to Apple App Review. First submits any READY_TO_SUBMIT in-app purchases/subscriptions, then the version. If the app's FIRST in-app purchase is detected (which Apple requires be bundled with the version in the website), it ABORTS without submitting and returns the manual steps, so nothing is orphaned. Outward-facing action: requires confirm:true. Pro feature.
| Name | Required | Description | Default |
|---|---|---|---|
| app_id | Yes | App Store Connect app ID | |
| confirm | No | Must be true to actually submit to App Review. | |
| platform | No | Platform (default IOS) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes well beyond the destructiveHint=true annotation by disclosing the actual order of operations (IAPs first, then version), an explicit abort condition with its cause (first IAP must be bundled on the website) and the side effect that nothing is orphaned, plus the confirm:true guard against accidental outward-facing submission. This is the kind of consequence detail an agent cannot get from annotations or schema.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Four tight sentences, front-loaded with the primary action, then sequencing, then the failure mode, then the safety gate. Every sentence carries distinct operational information with no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive, no-output-schema mutation tool, the description covers ordering, abort semantics, reversal avoidance, and the confirmation gate — the essentials an agent needs. It stops short of describing what a successful submission returns, though with no output schema that is a minor omission.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so app_id, confirm, and platform are already documented with enums and patterns; the description only reinforces confirm:true. Baseline 3 is appropriate since the description adds no new syntax or format meaning for the parameters themselves.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships 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 the editable version to Apple App Review') and scopes it precisely to the editable version, which separates it from sibling tools like release_version or create_version. The added sequencing detail ('First submits any READY_TO_SUBMIT in-app purchases...') makes the operation unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies when to use it (submitting an editable version for review) and states the confirm:true prerequisite and the Pro-feature gate, but never names an alternative such as release_version or explains when this is the wrong tool. Usage is inferable rather than explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
triage_reviewsTriage reviews into themesARead-only
Pull recent App Store reviews and use MCP Sampling to cluster them into 3 to 5 themes with counts, representative quotes, and action buckets (bug, missing_feature, pricing, ux, content). Sampling uses your own MCP client's model, so there is no extra cost from this server. Pro feature.
| Name | Required | Description | Default |
|---|---|---|---|
| days | No | Look-back window in days (default 30) | |
| limit | No | Max reviews (default 30, hard cap 30) | |
| app_id | Yes | App Store Connect app ID | |
| rating | No | Filter by star rating (1 to 5). Omit for all. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, and the description adds meaningful context beyond that: it runs via MCP Sampling using the client's own model (no extra server cost), and it is gated behind a Pro feature. This is the kind of operational detail annotations cannot convey. It stops short of noting latency or failure modes of the sampling step.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences, front-loaded with the core action and output, followed by cost and feature-gating notes. Little waste; the sampling/cost sentence earns its place because it affects invocation decisions.
Shorter descriptions cost fewer tokens and are easier for agents to parse. 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 no output schema, the description carries the burden of describing returns, which it does well (themes, counts, representative quotes, action buckets). Combined with full schema coverage for inputs and a read-only annotation, an agent has enough to call it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so app_id, days, limit, and rating are already fully documented in the schema. The description implies a look-back window ('recent reviews') but adds no syntax or constraint detail beyond what the schema provides, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description gives a specific verb and resource (pull reviews and cluster them into 3-5 themes) and specifies the exact output shape with counts, quotes, and action buckets. This clearly separates it from sibling list/review tools like list_reviews and review_status, which do not cluster.
Agents choose between tools based on descriptions. A clear purpose with a specific verb 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 usage context is implied (thematic triage of recent reviews) and there's a hint of prerequisites via 'Pro feature' and the MCP Sampling mechanism. However, it never explicitly states when to choose this over list_reviews or review_status, nor any exclusions. Adequate but no explicit routing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_version_metadataEdit version metadataADestructive
Edit App Store metadata on the editable version: description, keywords, what's-new, promotional text, marketing/support/privacy-policy URLs, plus app name and subtitle. Validates Apple character limits before writing. Pro feature.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | App name (max 30 chars) | |
| app_id | Yes | App Store Connect app ID | |
| locale | No | Locale to edit (e.g. en-US). Default: first/primary locale. | |
| keywords | No | Comma-separated keywords (max 100 chars total) | |
| subtitle | No | App subtitle (max 30 chars) | |
| whats_new | No | What's New / release notes (max 4000 chars) | |
| description | No | App description (max 4000 chars) | |
| support_url | No | Support URL | |
| marketing_url | No | Marketing URL | |
| promotional_text | No | Promotional text (max 170 chars) | |
| privacy_policy_url | No | Privacy policy URL (shown on the App Store listing) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false and destructiveHint=true, so the safety profile is covered. The description still adds value beyond that: it discloses that Apple character limits are validated before writing and that it targets only the editable version. It does not state partial-update semantics or what happens on validation failure.
Agents need to know what a tool does to the 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, fully front-loaded: verb+resource first, then the editable field list, then the validation and gating notes. No filler or restated title.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a mutation tool with no output schema, annotations covering the destructive profile and a fully documented parameter schema, the description is nearly complete. The one meaningful gap is that it never says omitted fields are left untouched (partial update) versus cleared.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, with each of the 11 parameters carrying its own description and length limits, so the baseline is 3. The description merely re-lists the same fields and adds no syntax or format detail beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Specific verb ('Edit') plus resource ('App Store metadata on the editable version') and an explicit enumeration of editable fields. Clear enough that an agent knows what it does, but it never distinguishes itself from the closely related sibling set_app_metadata.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Context is only implied: 'on the editable version' signals a precondition (the version must be in an editable state) and 'Pro feature' signals a gating requirement. There is no explicit when-to-use vs when-not, and no routing away from the near-duplicate set_app_metadata sibling.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
upload_binaryUpload a build to App Store ConnectADestructive
Upload a signed .ipa to App Store Connect via altool, using your API key. Outward-facing: requires confirm:true. Pro feature.
| Name | Required | Description | Default |
|---|---|---|---|
| confirm | No | Must be true to actually upload. | |
| ipa_path | Yes | Absolute path to the .ipa to upload | |
| platform | No | Platform: ios, macos, or tvos (default ios) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false and destructiveHint=true, yet the description adds real context the annotations cannot: the API-key auth requirement, the explicit confirm:true gate, the outward-facing nature of the call, and the Pro-feature prerequisite. It stops short of describing irreversibility or what happens on a partial/failed upload.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short, front-loaded fragments with no filler; the action and destination lead, constraints follow. The telegraphic style ("Outward-facing", "Pro feature") is compact but slightly under-explained rather than wasteful.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 3-parameter, no-output-schema mutation tool with safety already covered by annotations, the description supplies the missing auth, confirmation, and entitlement context. It omits failure/retry behavior and any hint about the platform parameter, which keeps it shy of complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so both ipa_path, confirm, and platform are already documented with defaults. The description reinforces the confirm gate and the .ipa type but adds no format, path, or platform-selection detail beyond the schema, so the baseline of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (upload), resource (signed .ipa), and destination (App Store Connect via altool), which is clearly more than a restatement of the name. It does not, however, distinguish itself from nearby siblings like build_and_archive or attach_build, so an agent must infer which stage of the pipeline this occupies.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
"Requires confirm:true" and "Pro feature" give concrete invocation conditions, and "outward-facing" hints at the level of commitment. But it never says when to use this versus siblings (build_and_archive, attach_build, list_builds), leaving the sequencing of an upload pipeline implicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
upload_screenshotsUpload screenshotsADestructive
Upload screenshots to a version localization for a device display type (e.g. APP_IPHONE_67). Handles Apple's reserve/upload/commit flow. Pro feature.
| Name | Required | Description | Default |
|---|---|---|---|
| files | Yes | Absolute paths to PNG/JPEG screenshot files, in order | |
| app_id | Yes | App Store Connect app ID | |
| locale | No | Locale (e.g. en-US). Default: first/primary locale. | |
| display_type | Yes | Device display type, e.g. APP_IPHONE_67, APP_IPHONE_65, APP_IPAD_PRO_129 |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false and destructiveHint=true, so the safety profile is covered. The description adds useful context beyond that: the internal reserve/upload/commit flow and the Pro gating requirement. It still doesn't say whether existing screenshots are replaced or appended, which is the key destructive behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short, front-loaded sentences with zero filler. The purpose is stated first, the notable internal behavior second, and the access constraint last.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive mutation with no output schema and full annotation coverage, the description supplies purpose, the multi-step Apple flow, and the Pro entitlement. It falls just short by not clarifying replace-vs-append semantics on existing screenshots.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so all four parameters (app_id, display_type, files, locale) are already documented in the schema. The description only echoes the display_type and locale concepts without adding format or ordering detail beyond what the schema provides, so baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (upload) and resource (screenshots) scoped to a version localization and device display type, with a concrete example (APP_IPHONE_67). This clearly separates it from the IAP-specific sibling set_iap_review_screenshot, though it doesn't name an alternative explicitly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The scope ('version localization for a device display type') implies the usage context, and 'Pro feature' signals an entitlement gate. However, it gives no explicit when-to-use vs. when-not guidance and names no alternatives for placing screenshot assets.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
wait_for_buildWait for a build to finish processingARead-only
Poll until the newest uploaded build finishes processing (VALID), so the ship flow is one call. Blocks for up to 30 minutes by default; if you should not hold the session that long, call list_builds yourself instead. Pro feature.
| Name | Required | Description | Default |
|---|---|---|---|
| app_id | Yes | App Store Connect app ID | |
| poll_seconds | No | Seconds between polls (default 30, min 10) | |
| max_wait_seconds | No | Max seconds to wait (default 1800, cap 3600) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With readOnlyHint=true already covered by annotations, the description still adds real behavior: it blocks, defaults to a 30-minute wait, polls, and is a Pro feature. It doesn't note what happens on timeout (partial return vs error), which is the one meaningful gap.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three tight sentences with the core behavior and terminal state front-loaded, then the timeout caveat and the Pro-gating note. 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?
No output schema exists, and the description implies the terminal state (VALID) but doesn't state what is returned or how a timeout surfaces. For a simple polling tool with full schema coverage, this is nearly complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and the schema already documents poll_seconds, max_wait_seconds, defaults and caps. The description only restates the 30-minute default, adding no syntax or semantics beyond the schema, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (poll/wait) and resource (the newest uploaded build), plus the terminal condition (VALID) and the goal (ship flow in one call). This clearly differentiates it from the sibling list_builds.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly says when to use it (to make the ship flow one call) and when not to (if you should not hold the session that long, call list_builds yourself instead). The alternative is named with the selecting condition.
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.
3 tool updates
v1.9.14- Changed
asc_start_trial1 field changed- changed
Input schema / properties / email / descriptionPrevious value: -"The user's email address. Required: the trial key is sent there so they still have it later. Ask the user for it; never invent one. Tell them what the request stores: this address and a one-way hash of their Issuer ID, nothing else, and both are deletable at https://asc-mcp-license.remewdy.workers.dev/delete (policy: https://asc-mcp-license.remewdy.workers.dev/privacy)."New value: +"The user's email address. Required: the trial key is sent there so they still have it later. Ask the user for it; never invent one. Tell them what the request stores: this address, a one-way hash of their Issuer ID, the trial key with its start and end dates, and which tool they started from. Tell them the address gets the key, one reminder shortly before the trial ends and one note after it, and that each has an unsubscribe link or they can reply stop. Tell them it also saves the key on this machine (~/.asc-mcp/license.json) and adds it to any existing asc-mcp entry in their MCP client configs, leaving a .bak copy of each file it edits. All of it is deletable at https://asc-mcp-license.remewdy.workers.dev/delete (policy: https://asc-mcp-license.remewdy.workers.dev/privacy)."
- Changed
release_notes1 field changed- changed
Input schema / properties / max_commits / descriptionPrevious value: -"Max commits to include (default 50)"New value: +"Max commits to include (default 50, at most 500)"
- Changed
set_age_rating2 fields changed- removed
Input schema / properties / declarations / additionalProperties / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "boolean" - } -] - added
Input schema / properties / declarations / additionalProperties / typeAdded value: +[ + "string", + "boolean" +]
1 tool update
v1.9.11- Changed
asc_start_trial1 field changed- changed
Input schema / properties / email / descriptionPrevious value: -"The user's email address. Required: the trial key is sent there so they still have it later. Ask the user for it; never invent one."New value: +"The user's email address. Required: the trial key is sent there so they still have it later. Ask the user for it; never invent one. Tell them what the request stores: this address and a one-way hash of their Issuer ID, nothing else, and both are deletable at https://asc-mcp-license.remewdy.workers.dev/delete (policy: https://asc-mcp-license.remewdy.workers.dev/privacy)."
29 tool updates
- Added
asc_guide - Added
asc_setup_check - Added
asc_start_trial - Added
assign_build_to_group - Added
attach_build - Added
build_and_archive - Added
create_iap - Added
create_subscription - Added
create_version - Added
invite_beta_tester - Added
list_beta_groups - Added
list_builds - Added
manage_phased_release - Added
release_version - Changed
sales_report2 fields changed- changed
Input schema / properties / vendor_number / descriptionPrevious value: -"Vendor number from Payments and Financial Reports"New value: +"Vendor number (8-9 digits) from App Store Connect > Sales and Trends. Omit to be told where to find it." - removed
Input schema / requiredRemoved value: -[ - "vendor_number" -]
- Added
set_age_rating - Added
set_app_availability - Added
set_app_metadata - Added
set_app_price - Added
set_eu_trader_status - Added
set_iap_review_screenshot - Added
set_privacy_nutrition - Added
set_review_contact - Added
setup_app_store_signing - Added
submit_for_review - Added
update_version_metadata - Added
upload_binary - Added
upload_screenshots - Added
wait_for_build
13 tool updates
v1.3.0- First observed
app_details - First observed
competitor_snapshot - First observed
daily_briefing - First observed
draft_review_response - First observed
keyword_insights - First observed
list_apps - First observed
list_reviews - First observed
metadata_diff - First observed
release_notes - First observed
release_preflight - First observed
review_status - First observed
sales_report - First observed
triage_reviews
TDQS
Scored across 41 tools
Tools are largely distinct, with detailed descriptions differentiating similar areas (e.g., set_app_metadata vs. update_version_metadata, submit_for_review vs. release_version). A few pairs (review_status/app_details, release_version/manage_phased_release) could be momentarily confused, but descriptions resolve it.
All tool names use snake_case, which is consistent. Most follow a verb_noun pattern, but several are noun-only (app_details, review_status) and three use an asc_ prefix for meta tools, creating minor inconsistency.
41 tools is far above the ideal 3-15 range and exceeds the 25+ threshold for 'too many'. The domain is broad, but the sheer number increases the chance of selection errors and cognitive load.
Covers many ASC workflows, but notable gaps exist: IAP/subscription management supports only creation (no list/update/delete), screenshots only upload, and beta testers only invite. These missing operations create dead ends for common management tasks.
Maintenance
Related MCP Connectors
MCP server for your apps' tools and custom tools, plus hosted AI agents and approval-gated workflows
MCP server that lets your AI assistant build and deploy apps, hosting each one at a live URL.
MCP server connecting AI agents to 100+ apps (Gmail, Slack, Notion, GitHub) via one-click OAuth.
MCP server for AI agents to plan, verify, and deploy Cloudflare-native apps.
Related MCP Servers
- AlicenseNot gradedqualityAmaintenanceMCP server for App Store Connect API with 208 tools across 25 workers. Manage apps, builds, TestFlight, in-app purchases, subscriptions, reviews, provisioning, screenshots, analytics, and more — directly from Claude, Cursor, VS Code, or any MCP client. Multi-account support, worker filtering, JWT auth.82MIT
- AlicenseAqualityBmaintenanceA Model Context Protocol (MCP) server for Apple's App Store Connect API. Manage your iOS, macOS, tvOS, and visionOS apps directly from Claude, Cursor, or any MCP-compatible client.52243 npm22MIT
- AlicenseAqualityDmaintenanceA Model Context Protocol (MCP) server that connects Cursor, Claude Desktop, and other MCP clients to the official App Store Connect API—so you can manage iOS/macOS apps, TestFlight, in-app subscriptions, and store metadata via chat or automated tool calls.6976 npm14MIT
- 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.16 npm1MIT