Skip to main content
Glama
OrellBuehler

testflight-mcp

by OrellBuehler

testflight-mcp

npm CI node license: MIT

MCP server for TestFlight and App Store Connect that exposes the App Store Connect API as tools for AI agents.

Its focus is TestFlight beta feedback retrieval — pulling the screenshot feedback (with the tester's comment), crash feedback and crash logs your testers submit — plus the surrounding context an agent needs to make sense of it: apps, builds, beta testers/groups, analytics & sales reports, provisioning, and App Store metadata. It talks only to the official, documented API using a standard App Store Connect API key (ES256 JWT), and is read-only.

It deliberately does not scrape App Store Connect with your Apple ID / password (no headless browser, no internal iris API) and does not send email to testers. Some third-party TestFlight servers do; this one stays on the supported API.

Install

The package is published as @orellbuehler/testflight-mcp and runs directly with npx — no clone or build needed:

claude mcp add testflight \
  --env ASC_KEY_ID=ABCD123456 \
  --env ASC_ISSUER_ID=12a3b456-7890-1234-5678-9abcdef01234 \
  --env ASC_PRIVATE_KEY_PATH=/path/to/AuthKey_ABCD123456.p8 \
  -- npx -y @orellbuehler/testflight-mcp

For any other MCP client, run the package directly — npx -y @orellbuehler/testflight-mcp with the env vars below set. Requires Node.js 20+.

Related MCP server: xcode-cloud-mcp

Getting an API key

The server authenticates with an App Store Connect API key (a .p8 file plus a key ID and issuer ID), the same credentials fastlane/altool use:

  1. In App Store Connect, go to Users and Access → Integrations → App Store Connect API (Team Keys).

  2. Generate a key. A role of App Manager (or Admin) covers TestFlight feedback; Finance is additionally required for sales/finance reports.

  3. Download the AuthKey_XXXXXXXXXX.p8 (you can only download it once — keep it safe), and note the Key ID and the team Issuer ID shown above the keys table.

Provide the key either as a file path (ASC_PRIVATE_KEY_PATH) or inline (ASC_PRIVATE_KEY, newlines may be escaped as \n). The key is read locally and used only to sign short-lived request tokens.

Configuration

Variable

Required

Description

ASC_KEY_ID

yes

App Store Connect API Key ID.

ASC_ISSUER_ID

yes

App Store Connect API Issuer ID (per team).

ASC_PRIVATE_KEY_PATH

yes*

Path to the downloaded .p8 private key file.

ASC_PRIVATE_KEY

yes*

The .p8 contents inline (alternative to the path; \n escapes are unescaped).

ASC_VENDOR_NUMBER

no

Vendor number; required only for download_sales_report / download_finance_report.

* Provide either ASC_PRIVATE_KEY_PATH or ASC_PRIVATE_KEY.

Usage with Claude Code

Add the server to ~/.claude/settings.json (or a project .mcp.json):

{
  "mcpServers": {
    "testflight": {
      "command": "npx",
      "args": ["-y", "@orellbuehler/testflight-mcp"],
      "env": {
        "ASC_KEY_ID": "ABCD123456",
        "ASC_ISSUER_ID": "12a3b456-7890-1234-5678-9abcdef01234",
        "ASC_PRIVATE_KEY_PATH": "/path/to/AuthKey_ABCD123456.p8"
      }
    }
  }
}

If you built from source instead, use "command": "node" with "args": ["/path/to/testflight-mcp/dist/index.js"]. Restart Claude Code and verify with claude mcp list (should show testflight ✓ connected) or /mcp inside a session.

Example prompts

Once connected, ask the agent things like:

  • "List the latest TestFlight screenshot feedback for my app and summarize the recurring complaints."

  • "Show crash feedback for build 1.4.0 and download the crash log for the most recent one."

  • "Which beta testers reported feedback this week, and what devices/OS versions were they on?"

  • "Why can't my external testers see build 1.4.0 yet?"

  • "How many installs and crashes does the latest build have, and what's the crash rate?"

  • "Where is version 1.4.0 in App Review, and is anything blocking it?"

  • "What's the top hang signature in the latest build?"

  • "The last Xcode Cloud build failed — what were the errors?"

  • "Pull this month's sales summary as CSV."

Tools

Start from list_apps to get an app_id, then drill into feedback. All tools are read-only.

TestFlight feedback

Tool

Description

list_screenshot_feedback

Screenshot feedback for an app: tester comment, screenshot URLs, device/OS, resolved tester and build (build number build.version + TestFlight version build.preReleaseVersion.version). Defaults to the latest version only (app_version: a version like 1.2.0, or all). Filter by build/platform/device/OS/tester.

list_crash_feedback

Crash feedback for an app: comment, device/OS, resolved tester and build (build number + TestFlight version build.preReleaseVersion.version), crash-log reference. Defaults to the latest version only (app_version: a version like 1.2.0, or all).

get_screenshot_feedback

One screenshot submission; optionally returns the first screenshot inline as an image.

get_crash_feedback

One crash submission with full metadata and crash-log reference.

get_crash_log

Download the crash log text for a crash submission.

Apps & builds

Tool

Description

list_apps

Apps in the account (id, name, bundleId, sku). Filter by bundle ID.

get_app

One app by ID.

list_builds

TestFlight builds for an app (version, processing state, expiry) with their TestFlight beta state.

get_build

One build with its pre-release version and beta state.

list_customer_reviews

Public App Store reviews for a released app, with your published response. Distinct from beta feedback.

TestFlight build status & metrics

Tool

Description

get_build_status

Why a build is (not) available to testers: internal/external build state, beta review state, and "What to Test" per locale.

get_build_usage_metrics

Installs, sessions, crashes, invites and feedback counts for a build.

get_beta_tester_metrics

Tester engagement (sessions, crashes, feedback) per tester, for an app or a beta group.

list_beta_app_localizations

Tester-facing TestFlight metadata (beta description, feedback email, privacy URL).

get_beta_app_review_detail

Beta App Review contact, demo-account requirement and review notes.

Beta testers & groups

Tool

Description

list_beta_groups

Beta groups for an app (internal/external, public link, feedback enabled).

list_beta_testers

Beta testers (name, email, invite type, state). Filter by app/group/email.

list_group_testers

Testers in a specific beta group.

Analytics & reports

Tool

Description

create_analytics_report_request

Request an analytics report (the required first step). Returns a request ID.

list_analytics_reports

Reports available for a request, optionally filtered by category.

list_analytics_report_segments

Downloadable segments of a report (presigned URLs).

download_analytics_report_segment

Download + decompress a segment to CSV/TSV text (url must come from list_analytics_report_segments).

download_sales_report

Sales & Trends report as CSV (needs ASC_VENDOR_NUMBER).

download_finance_report

Financial report as CSV (needs ASC_VENDOR_NUMBER and a region code).

Provisioning & devices

Tool

Description

list_devices

Registered devices (name, platform, UDID, status).

list_certificates

Signing certificates (type, name, serial, expiry).

list_profiles

Provisioning profiles with their bundle ID.

list_bundle_ids

Registered bundle IDs (identifier, name, platform).

App metadata & localizations

Tool

Description

list_app_store_versions

App Store versions for an app (version, platform, state).

list_app_store_version_localizations

Per-locale metadata (description, keywords, what's new, URLs).

get_app_store_version_localization

One localization by ID.

App Review pipeline

Tool

Description

list_review_submissions

What is in App Review and its state, with the version under review and the submitted items.

get_app_store_version_status

One call for a version's release status: attached build, submission, phased release, review contact/notes.

Performance & diagnostics

Tool

Description

get_perf_power_metrics

MetricKit metrics for an app's recent versions or one build (launch, hang, memory, disk, battery) plus regression insights.

list_diagnostic_signatures

Grouped disk-write / hang / launch problems for a build, weighted, with Apple's insight.

get_diagnostic_logs

Logs for a signature; call stacks are stripped unless include_call_stacks is set.

Xcode Cloud

Tool

Description

list_ci_products

Xcode Cloud products, optionally filtered by app.

list_ci_build_runs

Build runs for a product or workflow (number, status, commit, branch/PR).

list_ci_build_actions

The actions of a build run (build, test, analyze, archive) with their status.

list_ci_issues

Errors, warnings and test failures for a build action — what to read when CI fails.

list_ci_artifacts

Artifacts of a build action (logs, archives, test results) with download URLs.

Notes & caveats

  • Read-only. The server cannot add/remove testers, edit metadata, or submit apps. The only POST is create_analytics_report_request, which requests an analytics snapshot so the data can be read; it does not change your app.

  • TestFlight feedback requires builds uploaded with feedback enabled and is retained by Apple for a limited window (~90 days). The tester's typed comment is the comment field on a screenshot submission.

  • Crash logs come from Apple's betaCrashLogs resource linked to each crash submission (GET /betaFeedbackCrashSubmissions/{id}/crashLog), whose logText is the full symbolicated .crash report. get_crash_log returns that text; if a submission has no log attached it says so.

  • Reports (download_sales_report / download_finance_report) are gzipped CSV decompressed for you, and need the Finance role on the API key plus ASC_VENDOR_NUMBER.

  • Power & performance data (get_perf_power_metrics, list_diagnostic_signatures, get_diagnostic_logs) is aggregated MetricKit data from devices whose owners opted in to sharing analytics, is iOS-only, and is empty for apps with too little usage to anonymize.

  • Demo account passwords are never requested: get_beta_app_review_detail and get_app_store_version_status deliberately omit the demoAccountPassword field.

  • Your data goes to the agent/LLM. Feedback includes tester names, emails and device details. Use an API key scoped to the access you actually want.

Development

npm install
npm run build         # tsc -> dist/
npm test              # vitest run
npm run typecheck     # tsc --noEmit
npm run lint          # eslint src
npm run format:check  # prettier --check .

Run a single test file:

npx vitest run src/__tests__/feedback.test.ts

CI / Releasing

  • CI (.github/workflows/ci.yml) runs on every push to main and on pull requests: format:check, lint, typecheck (once) and test + build on Node 20 and 22.

  • Publish (.github/workflows/publish.yml) runs when a GitHub Release is published. It builds, tests, and publishes to npm using trusted publishing (OIDC) — no NPM_TOKEN secret required, with provenance generated automatically. It skips publishing if that version is already on npm.

Cut a release:

npm version patch          # bumps package.json + creates a vX.Y.Z tag (use minor/major as needed)
git push --follow-tags
gh release create "v$(node -p "require('./package.json').version")" --generate-notes

License

MIT © Orell Bühler

Available Tools

41 tools
create_analytics_report_requestA

Create an analytics report request for an app — the required first step to read App Store analytics. Returns a reportRequestId to pass to list_analytics_reports. ONE_TIME_SNAPSHOT requests the latest data once; ONGOING accrues daily data. This creates a request resource but does not modify the app.

ParametersJSON Schema
NameRequiredDescriptionDefault
app_idYesApp Store Connect app ID
access_typeNoReport access type (default: ONE_TIME_SNAPSHOT)

TDQS

A4.5/5.0
Behavior4/5

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

No annotations are provided, so the description fully bears the burden. It discloses that the tool creates a request resource without modifying the app and explains the behavior of the two access types. It does not detail authorization requirements or rate limits, but the scope is clear for a non-destructive creation operation.

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

Conciseness5/5

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

The description is only two sentences, front-loading the purpose and return value, then efficiently explaining the access types and noting the non-modifying behavior. Every sentence contributes essential information without redundancy.

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

Completeness5/5

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

For a tool with 2 parameters (1 required) and no output schema, the description is complete: it covers the required parameter app_id, the optional access_type with its two options, the return value (reportRequestId) and a hint to pass it to list_analytics_reports. Nothing important is missing.

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

Parameters4/5

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

The input schema covers 100% of parameters, so baseline is 3. The description adds value by explaining the enum values (ONE_TIME_SNAPSHOT vs. ONGOING) beyond the schema's listing, and clarifies that app_id is the required identifier.

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

Purpose5/5

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

The description clearly states the tool creates an analytics report request for an app, specifies it is the required first step to read App Store analytics, and returns a reportRequestId. It distinguishes the tool from siblings like list_analytics_reports by positioning it as the creation step.

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

Usage Guidelines4/5

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

The description explains the purpose of the tool as the first step to read analytics and differentiates between ONE_TIME_SNAPSHOT and ONGOING types. However, it does not explicitly state when not to use this tool (e.g., if a valid request already exists) or provide direct comparisons to sibling tools.

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

download_analytics_report_segmentA

Download and decompress an analytics report segment from its presigned url. Returns the report data as CSV/TSV text. Call list_analytics_report_segments first — only urls returned by that tool can be downloaded.

ParametersJSON Schema
NameRequiredDescriptionDefault
segment_urlYesThe 'url' field of an analytics report segment

TDQS

A4.7/5.0
Behavior4/5

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

With no annotations, the description carries the behavioral burden. It discloses that the action involves decompression, returns CSV/TSV text, and that the URL must originate from list_analytics_report_segments. It does not mention authentication or error behavior, but the key behavior is transparent enough for a read-only download action.

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

Conciseness5/5

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

Three short sentences cover purpose, output format, and usage prerequisite with no wasted words. The most important constraint is front-loaded effectively.

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

Completeness5/5

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

For a single-parameter, no-output-schema tool, the description provides everything an agent needs: operation, decompression, return type, and exact source of valid input. The prerequisite dependency on list_analytics_report_segments makes the tool self-contained in context.

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

Parameters4/5

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

Schema coverage is 100% since segment_url is documented as 'The url field of an analytics report segment.' The description adds extra meaning by calling it a presigned URL and by restricting valid URLs to those returned by list_analytics_report_segments, which helps the agent understand what value to pass.

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

Purpose5/5

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

The description uses a specific verb and resource: 'Download and decompress an analytics report segment from its presigned URL.' It also clearly states the return format (CSV/TSV text), which distinguishes this download action from the sibling list tools.

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

Usage Guidelines5/5

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

It explicitly tells the agent to call list_analytics_report_segments first and that only URLs returned by that tool can be downloaded. This is a clear prerequisite and exclusion, making the usage condition unambiguous even without naming alternative download tools.

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

download_finance_reportC

Download a Financial report as CSV text (decompressed from gzip). Requires a vendor number and a region code.

ParametersJSON Schema
NameRequiredDescriptionDefault
region_codeYesRegion code, e.g. 'ZZ' for all regions, 'US', 'EU'
report_dateYesFiscal report date in 'YYYY-MM' format
report_typeNoReport type (default: FINANCIAL)
vendor_numberNoOverrides ASC_VENDOR_NUMBER

TDQS

C2.4/5.0
Behavior2/5

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

With no annotations, the description only discloses the output format (CSV, decompressed from gzip). It does not mention side effects, authorization needs, rate limits, or error behavior. This is insufficient for an agent to understand the tool's behavior.

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

Conciseness3/5

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

The description is very concise with one sentence, but it contains an inaccuracy. While short, the misinformation detracts from its value.

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

Completeness3/5

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

The description explains the output format (CSV, decompressed from gzip) but does not detail the CSV structure or fields. Given no output schema, more context on the return value would be helpful. The required parameter inaccuracy also reduces completeness.

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

Parameters2/5

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

Schema description coverage is 100%, so baseline is 3. The description adds a misleading statement about required parameters (vendor_number is not required) and does not add any new meaning beyond the schema for the other parameters. It actually degrades understanding.

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

Purpose3/5

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

The description states it downloads a financial report as CSV text, which is clear. However, it incorrectly states that a vendor number is required, which contradicts the schema where only report_date and region_code are required. This misstatement reduces clarity.

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

Usage Guidelines2/5

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

No guidance is given on when to use this tool versus alternatives like download_sales_report. The description does not provide any context for choosing this tool over siblings.

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

download_sales_reportB

Download a Sales and Trends report as CSV text (decompressed from gzip). Requires a vendor number (from ASC_VENDOR_NUMBER or passed explicitly).

ParametersJSON Schema
NameRequiredDescriptionDefault
versionNoReport version, e.g. '1_0' or '1_1' (some report types require it)
frequencyNoReport frequency (default: DAILY)
report_dateYesReport date: 'YYYY-MM-DD' (DAILY), 'YYYY-MM-DD' week end (WEEKLY), 'YYYY-MM' (MONTHLY), 'YYYY' (YEARLY)
report_typeNoReport type (default: SALES)
vendor_numberNoOverrides ASC_VENDOR_NUMBER
report_sub_typeNoReport sub type (default: SUMMARY)

TDQS

B3.1/5.0
Behavior2/5

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

No annotations are provided, so the description carries full burden. It discloses the output format and decompression but does not mention side effects (likely read-only), authorization requirements, rate limits, or error conditions. Minimal behavioral disclosure.

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

Conciseness5/5

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

Two concise sentences, front-loaded with the primary action and output. Every sentence adds necessary information without redundancy or fluff.

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

Completeness3/5

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

Given 6 parameters and no output schema, the description covers the output format and a key prerequisite. However, it omits default parameter values, error handling, and does not fully describe the return type (e.g., size or pagination). Adequate but leaves gaps.

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

Parameters3/5

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

The input schema has 100% coverage for all 6 parameters. The description adds value by explaining the vendor_number parameter's behavior (overrides environment variable) and the output format. However, it does not clarify default values or other parameter meanings beyond the schema. Meets baseline with minor addition.

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

Purpose4/5

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

The description clearly states the verb 'Download', the resource 'Sales and Trends report', and the output format 'CSV text (decompressed from gzip)'. It distinguishes from generic download tools but could be more precise about the report scope versus sibling tools like download_finance_report.

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

Usage Guidelines2/5

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

The description provides a prerequisite (vendor number) but lacks guidance on when to use this tool versus alternatives such as create_analytics_report_request or download_finance_report. No explicit when-not or alternative tool references are given.

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

get_appA

Get a single app by ID (name, bundleId, sku, primaryLocale).

ParametersJSON Schema
NameRequiredDescriptionDefault
app_idYesApp Store Connect app ID

TDQS

A3.6/5.0
Behavior3/5

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

No annotations are provided, and the description adds minimal behavioral context beyond the read operation. It does not disclose error handling (e.g., if app not found) or other behavioral traits, but for a simple get-by-ID, this is adequate.

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

Conciseness4/5

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

The description is a single sentence that conveys the essential information. It is concise and front-loaded, though it could be slightly more structured by separating the identifiers.

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

Completeness3/5

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

For a simple get operation with one parameter and no output schema, the description provides enough context. However, it omits mention of return values, error cases, or any special behavior, leaving some gaps.

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

Parameters4/5

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

The input schema describes app_id as 'App Store Connect app ID', but the tool description adds that the ID can also be name, bundleId, sku, or primaryLocale. This adds significant meaning beyond the schema, improving parameter understanding.

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

Purpose5/5

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

The description clearly states the verb 'get' and resource 'app', and specifies the identifiers (name, bundleId, sku, primaryLocale) used to look up the app. This clearly distinguishes it from siblings like list_apps or get_build.

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

Usage Guidelines2/5

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

The description does not provide any guidance on when to use this tool vs alternatives, nor does it mention exclusions or alternative tools. The user is left to infer the appropriate context.

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

get_app_store_version_localizationA

Get a single App Store version localization by ID (description, keywords, what's new, promotional text, URLs).

ParametersJSON Schema
NameRequiredDescriptionDefault
localization_idYesApp Store version localization ID

TDQS

A3.7/5.0
Behavior2/5

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

No annotations provided; description does not disclose any behavioral traits beyond the obvious fetch operation. No mention of authentication, rate limits, or potential errors.

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

Conciseness5/5

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

Single sentence, front-loaded with key action and resource, no unnecessary words.

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

Completeness3/5

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

Adequate for a single-ID retrieval tool with no output schema, but lacks details on response format or error conditions.

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

Parameters4/5

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

Schema coverage is 100% but description adds value by listing the fields returned, providing context beyond the parameter name and type.

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

Purpose5/5

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

Clearly states the verb 'Get', resource 'App Store version localization', and enumerates specific fields (description, keywords, what's new, promotional text, URLs). Differentiates from sibling list tool.

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

Usage Guidelines3/5

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

No explicit when-to-use or alternatives given, though purpose is specific enough that usage context is implicit via sibling tool names.

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

get_app_store_version_statusA

Get the full release status of an App Store version in one call: the version itself (appVersionState / appStoreState), the build attached to it, whether it has been submitted for review, the phased release state and day number, and the App Review contact and notes. Sub-resources that do not exist yet (no build attached, not submitted, no phased release) come back as null.

ParametersJSON Schema
NameRequiredDescriptionDefault
version_idYesApp Store version ID (from list_app_store_versions)

TDQS

A4.2/5.0
Behavior4/5

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

With no annotations present, the description carries the behavioral disclosure burden. It explicitly warns that sub-resources that do not exist yet come back as null, preventing the agent from assuming every field is populated. It also clarifies that this is an aggregated read without claiming any side effects.

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

Conciseness5/5

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

The definition is a single, information-dense sentence that front-loads the purpose, lists concrete delivered fields, and closes with the important null behavior. Every clause contributes value and there is no repetition or padding.

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

Completeness4/5

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

With no output schema and no annotations, the description compensates well by naming the returned version state, build, submission, phased release, and review details. The null-behavior note further boundaries could be argued for a formal response shape, but for a one-parameter getter this is very close to complete.

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

Parameters3/5

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

The only parameter, version_id, is fully documented in the input schema, including where to obtain it, so the schema already gives the agent everything needed. The description adds no additional parameter-level detail, so the baseline score of 3 is appropriate.

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

Purpose5/5

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

The description opens with a specific verb and object: 'Get the full release status of an App Store version'. It then names the exact sub-resources included, which makes the tool's scope unmistakable and distinguishes it from the many list/get siblings.

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

Usage Guidelines4/5

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

The phrase 'in one call' and the enumerated return fields make it clear this is the right tool when an agent needs the aggregate release status of a single App Store version. It does not explicitly name an alternative or give a when-not-to-use condition, so it just misses the top score.

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

get_beta_app_review_detailA

Get the beta app review details an app submits with builds for external TestFlight review: review contact, whether a demo account is required, the demo account name and review notes. The demo account password is deliberately not requested.

ParametersJSON Schema
NameRequiredDescriptionDefault
app_idYesApp Store Connect app ID

TDQS

A4.3/5.0
Behavior4/5

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

No annotations exist, so the description carries the full disclosure burden. The sentence 'The demo account password is deliberately not requested' is a strong, non-obvious behavioral disclosure that prevents an agent from expecting a password field that will never appear. The read-only nature is inferable from the 'get' verb but not explicitly stated.

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

Conciseness5/5

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

Two sentences total: the first is a compact list of content fields and scoping context; the second is a one-line, high-value behavioral note. No filler or restatement.

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

Completeness5/5

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

For a single-parameter tool with no output schema and no nested objects, the description lists exactly what the agent will receive, names the design decision around the password, and clarifies scoping. 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.

Parameters3/5

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

Schema coverage is 100% — the sole parameter app_id is already documented as the App Store Connect app ID. The description does not add anything beyond that, which matches the baseline of 3 for fully covered schemas.

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

Purpose5/5

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

The description names a specific verb ('Get'), a distinct resource ('beta app review details'), and enumerates the exact content returned: review contact, demo account requirement, demo account name, and review notes. The phrase 'submitted with builds for external TestFlight review' clearly scopes the resource and differentiates it from the beta localizations/groups/testers siblings.

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

Usage Guidelines4/5

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

The description gives clear context analogous to when this tool applies: when you need the external TestFlight review submission details for an app. However, it does not explicitly name alternative tools or state when NOT to use this one, so it stops short of full routing guidance.

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

get_beta_tester_metricsA

Get TestFlight tester engagement metrics (session count, crash count, feedback count) for an app or a beta group, grouped by beta tester. Pass either app_id or group_id; optionally restrict to a single tester and pick a reporting period.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMax data points
app_idNoApp Store Connect app ID (or pass group_id)
periodNoReporting period (default: P30D)
group_idNoBeta group ID (from list_beta_groups)
tester_idNoRestrict to a single beta tester ID

TDQS

A4/5.0
Behavior3/5

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

No annotations are present, so the description carries the burden. It discloses that the tool returns engagement data and explains grouping, but it does not mention pagination, limit default, handling of missing IDs, or any side-effect/no-side-effect guarantee. The 'get' prefix makes a read operation likely, but full behavioral disclosure is incomplete.

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

Conciseness5/5

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

Two sentences with no wasted words. The first sentence establishes the metrics and grouping; the second specifies the required input choice and optional filters. Everything present earns its place.

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

Completeness4/5

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

The description covers the key inputs, grouping, and metric content, and without an output schema it still gives a usable mental model of the result (per-tester events counts). It does, however, leave the exact shape of the returns and any validation behavior ambiguous, so there is slight room for improvement.

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

Parameters3/5

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

Schema description coverage is 100%, so all parameters are already documented. The description adds only the relationship between app_id and group_id plus the optional tester/period pattern, which is useful but not a major addition beyond the well-covered schema.

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

Purpose5/5

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

Specific verb and resource: 'Get TestFlight tester engagement metrics' and names the actual fields (session count, crash count, feedback count). It also states the grouping ('grouped by beta tester') and scope (app or beta group), which differentiates it from generic metric tools like get_build_usage_metrics.

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

Usage Guidelines4/5

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

Clear context: this is the tool for tester engagement metrics, with explicit instructions to pass either app_id or group_id and optionally restrict by tester and period. It stops short of naming alternatives or exclusion conditions, but the applicable usage is obvious.

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

get_buildA

Get a single TestFlight build by ID, including its pre-release version and its TestFlight distribution state (buildBetaDetail).

ParametersJSON Schema
NameRequiredDescriptionDefault
build_idYesBuild ID

TDQS

A3.8/5.0
Behavior3/5

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

No annotations are present, so the description carries the transparency burden. It discloses what the response will meaningfully include and implies a read-only operation through 'Get'. However, it does not cover error behavior, permissions, or whether the returned fields are always present.

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

Conciseness5/5

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

A single, front-loaded sentence that says exactly what the tool does and what it returns. There is no redundant wording or fluff.

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

Completeness4/5

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

At a single-parameter retrieval tool, the description tells the agent the key purpose and highlight output fields, with enough specificity to support calling it. The lack of an output schema and annotations weakens full completeness, but the core usage is sufficiently covered.

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

Parameters3/5

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

Schema coverage is 100%, so the schema already fully documents build_id as the required ID. The description adds no further meaning to the single parameter, which is acceptable but not additive.

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

Purpose5/5

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

The description names a specific verb ('Get'), a specific resource ('a single TestFlight build by ID'), and two distinct data aspects it returns (pre-release version and distribution state). This cleanly differentiates it from sibling list tools like list_builds and get_build_status.

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

Usage Guidelines3/5

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

The description implies the tool is for retrieving one specific build when its ID is known, but it does not explicitly state when to prefer it over alternatives or when not to use it. The context is clear enough for basic dispatch, but no exclusion or alternative routing is provided.

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

get_build_statusA

Get the TestFlight distribution status of a build: internal/external build state and auto-notify (buildBetaDetail), the beta app review submission with its betaReviewState (WAITING_FOR_REVIEW, IN_REVIEW, REJECTED, APPROVED) and submitted date, and the 'What to Test' notes per locale. Use this to find out why a build is not yet available to external testers.

ParametersJSON Schema
NameRequiredDescriptionDefault
build_idYesBuild ID (from list_builds)

TDQS

A3.9/5.0
Behavior4/5

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

No annotations are provided, so the description carries the full behavioral burden. It discloses the shape of the return data in depth, including the exact betaReviewState enum values and the fact that 'What to Test' notes come per locale. It stops short of acknowledging edge cases, such as builds that have no review submission yet or the meaning of a null internal/external state, which keeps it from a 5.

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

Conciseness4/5

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

The main action is front-loaded in the first sentence, and the use case is compactly delivered in the second sentence. The colon-delimited enumeration is dense but earns its place because there is no output schema to otherwise convey the response anatomy.

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

Completeness4/5

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

For a one-parameter GET with no output schema and no annotations, the description is largely self-sufficient: it names the backing domain resources (buildBetaDetail, beta app review submission), lists the statuses a user would encounter, and explains why this data matters. It could round out with notes on absence semantics (e.g., what happens when no submission/review exists), which is the main gap.

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

Parameters3/5

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

Schema description coverage is 100% — the single parameter build_id is already described as 'Build ID (from list_builds)'. The tool description contributes nothing further about the format, source, of the parameter's semantics, so a baseline 3 is appropriate.

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

Purpose4/5

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

The description opens with a specific verb + resource, 'Get the TestFlight distribution status of a build', and enumerates exactly what data is returned: buildBetaDetail, betaReviewState enum values, submitted date, and per-locale 'What to Test' notes. However, it does not explicitly differentiate itself from overlapping siblings such as get_build or get_beta_app_review_detail, so it stops one notch short of a 5.

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

Usage Guidelines4/5

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

The final sentence provides a clear use case — 'Use this to find out why a build is not yet available to external testers' — which gives an agent a solid contextual trigger. It does not name alternatives or state when NOT to use this tool over get_build or get_beta_app_review_detail, so it is not fully explicit.

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

get_build_usage_metricsA

Get TestFlight usage metrics for a build: install count, session count, crash count, invite count and feedback count over the reported date range. Use it to turn raw feedback and crash counts into rates (e.g. crashes per install).

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMax data points
build_idYesBuild ID (from list_builds)

TDQS

A4/5.0
Behavior3/5

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

With no annotations, the description carries the full behavioral burden. It does explain that this returns aggregate counts over a reported date range and positions it as aggregate rather than raw event data. But it leaves ambiguity around what 'reported date range' means and does not describe pagination, output shape, or whether the tool requires specific analytics permissions.

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

Conciseness5/5

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

The description is two sentences, with the core purpose and metric list front-loaded, followed immediately by a practical use case. Every sentence earns its place and there is no redundant repetition.

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

Completeness4/5

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

For a simple tool with two parameters and no nested output, the description names the metric fields and the context in which they should be consumed. The main remaining gap is the vague 'reported date range' and the absence of any mention of how 'limit' affects the returned series, but the description is still sufficient for most selection purposes.

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

Parameters3/5

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

Schema coverage is 100%, so the schema already documents both parameters. The description adds no new meaning about the 'limit' parameter or its relationship to the returned data points, so it stays at the baseline.

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

Purpose5/5

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

The description clearly states the action (Get), the resource (TestFlight usage metrics for a build), and enumerates the exact metrics returned: install, session, crash, invite, and feedback counts. This makes the tool easy to distinguish from sibling tools focused on raw feedback, diagnostics, or tester-level metrics.

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

Usage Guidelines4/5

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

The second sentence gives a concrete use case: 'Use it to turn raw feedback and crash counts into rates.' This provides clear context for when the tool is useful. However, it does not explicitly name sibling alternatives or state when not to use this tool.

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

get_crash_feedbackA

Get a single crash feedback submission by ID, including any tester comment, full device metadata, resolved tester and build (with build.version and the TestFlight version build.preReleaseVersion.version), and the crash log reference. Use get_crash_log to download the crash log text.

ParametersJSON Schema
NameRequiredDescriptionDefault
feedback_idYesCrash feedback submission ID

TDQS

A4/5.0
Behavior3/5

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

No annotations provided, so description must carry the burden. It describes the return content but doesn't explicitly state it's a read-only operation or mention any side effects, rate limits, or permissions.

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

Conciseness5/5

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

Two sentences: first one is front-loaded with purpose and response details, second one provides a direct action alternative. No wasted words.

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

Completeness4/5

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

No output schema, but description outlines return fields adequately. Mentions crash log reference linking to sibling tool. Missing error handling or edge cases, but sufficient for a single-fetch tool.

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

Parameters3/5

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

Schema coverage is 100% and the parameter description in schema ('Crash feedback submission ID') is clear. The tool description adds context about what the ID retrieves, but does not add new constraints or format details beyond the schema.

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

Purpose5/5

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

The description clearly states the action 'Get' and the resource 'a single crash feedback submission by ID', listing the components of the response. It distinguishes itself from sibling tools like 'list_crash_feedback' and 'get_crash_log'.

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

Usage Guidelines4/5

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

The description provides explicit guidance to use 'get_crash_log' for downloading the crash log text, but does not elaborate on when not to use this tool or alternative scenarios.

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

get_crash_logA

Download the crash log text for a crash feedback submission. Reads Apple's betaCrashLogs resource linked to the submission, which carries the full symbolicated .crash text (logText).

ParametersJSON Schema
NameRequiredDescriptionDefault
feedback_idYesCrash feedback submission ID

TDQS

A3.5/5.0
Behavior3/5

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

With no annotations, the description carries the full behavioral burden. It usefully discloses that this is a read of Apple's linked betaCrashLogs resource and that the payload is full symbolicated .crash text, but it omits failure behavior (e.g., what happens when no crash log is attached) and any auth/permission context.

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

Conciseness4/5

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

Two tight sentences that front-load the action and payload. Both sentences earn their place, though the second is somewhat explanatory rather than instructive.

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

Completeness4/5

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

For a one-parameter read tool with no output schema, the description compensates by telling the agent what the return value is (logText, symbolicated .crash). Nothing critical is missing for correct invocation, though error/none-attached behavior is unaddressed.

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

Parameters3/5

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

Schema coverage is 100% and there is a single required feedback_id fully described in the schema, so the baseline of 3 applies. The description names the submission concept but adds no format or sourcing detail beyond what the schema already states.

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

Purpose4/5

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

States a specific verb (Download) and resource (crash log text) scoped to a crash feedback submission, so the agent knows exactly what it retrieves. It contrasts only implicitly with the sibling get_crash_feedback (metadata vs. log payload), so it stops short of full sibling differentiation.

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

Usage Guidelines3/5

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

Usage is implied: call it when you need the raw log text for a given feedback submission. There is no explicit when-to-use vs. when-not, and no routing to alternatives like get_crash_feedback or get_diagnostic_logs despite those siblings existing.

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

get_diagnostic_logsA

Get the diagnostic logs for a diagnostic signature: per-log metadata (event, app version, OS version, device type, event detail) and Apple's insights with links to the relevant documentation. Call stack trees are stripped by default because they are very large — set include_call_stacks to true to get the symbolicated call stacks with the blame frames.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMax logs (default: 5)
signature_idYesDiagnostic signature ID (from list_diagnostic_signatures)
include_call_stacksNoInclude the full call stack trees (default: false)

TDQS

A4/5.0
Behavior3/5

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

With no annotations provided, the description carries the full transparency burden. It does disclose a key behavioral trait: call stack trees are stripped by default for size, and toggling include_call_stacks to true returns symbolicated stacks with blame frames. However, it does not mention error behavior, authorization needs, or what happens when an invalid signature_id is given, leaving some gaps.

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

Conciseness5/5

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

The description is two sentences with no fluff: the first states the core purpose and the output fields, the second explains the default behavior and the opt-in flag. It is front-loaded and every part earns its place.

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

Completeness4/5

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

Given there is no output schema, the description does a solid job describing what the return contains (metadata fields, Apple insights with documentation links) and the call stack behavior. The few missing pieces, such as error handling or pagination notes, are minor for a straightforward fetch tool whose parameters are otherwise fully described.

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

Parameters4/5

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

Schema coverage is 100%, so the baseline is 3. The description adds meaningful value for include_call_stacks by explaining why it is stripped by default and that setting it to true returns 'symbolicated call stacks with the blame frames', which exceeds the schema's brief description. It does not add much for limit or signature_id, but those are already well-documented.

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

Purpose5/5

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

The description uses a specific verb–resource pair ('Get… diagnostic logs for a diagnostic signature') and details the returned content (per-log metadata, Apple's insights, documentation links). It distinguishes the tool from siblings like list_diagnostic_signatures (which lists signatures) and get_crash_log (which is crash-specific), without ambiguity.

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

Usage Guidelines3/5

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

The description implies the usage context—call it after you have a diagnostic signature—but does not explicitly state when to choose this tool over alternatives, such as get_crash_log or get_screenshot_feedback. The context is clear but lacks explicit exclusions or differentiations, so it is adequate but not strong.

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

get_perf_power_metricsA

Get aggregated power and performance metrics (MetricKit data from real devices) for an app's recent versions or for a single build: launch time, hang rate, memory, disk writes, battery, animation and termination metrics, plus Apple's regression insights comparing the latest version against previous ones. Pass either app_id or build_id.

ParametersJSON Schema
NameRequiredDescriptionDefault
app_idNoApp Store Connect app ID (or pass build_id)
build_idNoBuild ID, for metrics of a single build
platformNoFilter by platform (only iOS is supported)
device_typeNoFilter by device type, e.g. 'all_iphones' or 'all_ipads'
metric_typeNoFilter by metric type, e.g. 'LAUNCH'

TDQS

A4.3/5.0
Behavior4/5

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

With no annotations provided, the description must carry the behavioral burden, and it does so well: it discloses that the metrics come from real-device MetricKit data, are aggregated, include regression insights, and can be narrowed to a single build. It doesn't discuss error cases or limits, but as a read-style 'get' tool there is no hidden destructive behavior to disclose.

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

Conciseness4/5

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

The description packs a large amount of information into a single focused sentence and front-loads the core purpose. It is slightly dense because of the long metric list, but every clause contributes to describing what the tool returns or how to invoke it.

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

Completeness4/5

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

Given a moderate number of optional parameters, a fully covered schema, and no output schema, the description provides enough context to understand the scope, invocation pattern, and returned data categories. The only minor gaps are lack of explicit edge-case behavior when both app_id and build_id are passed and no mention of date or pagination behavior.

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

Parameters4/5

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

The schema already describes all five parameters well, but the description adds meaning beyond it by clarifying the app_id/build_id relationship as an either/or and mapping metric categories to concrete real-world quantities like launch time, hang rate, memory, disk writes, and battery. That is useful semantic context the schema alone does not fully express.

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

Purpose5/5

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

The description uses a specific verb and resource ('Get aggregated power and performance metrics') and adds the concrete data source (MetricKit data from real devices). It also names the exact metrics returned and the Apple regression insights, which makes it easy to distinguish from sibling reporting tools like get_build_usage_metrics.

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

Usage Guidelines4/5

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

It gives clear context for when to use the tool: for an app's recent versions or for a single build, and states the key dispatch rule 'Pass either app_id or build_id'. It does not explicitly name alternatives or exclusions, but the intended usage is clear enough without leaving the agent guessing.

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

get_screenshot_feedbackA

Get a single screenshot feedback submission by ID, including the tester comment, full device metadata, resolved tester and build (with build.version and the TestFlight version build.preReleaseVersion.version), and screenshot asset URLs. Set download_screenshot to also return the first screenshot inline as an image.

ParametersJSON Schema
NameRequiredDescriptionDefault
feedback_idYesScreenshot feedback submission ID
download_screenshotNoDownload and return the first screenshot inline as an image (default: false)

TDQS

A3.9/5.0
Behavior3/5

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

No annotations provided; description covers return content adequately but does not disclose behavioral traits such as read-only nature, authentication requirements, or potential side effects.

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

Conciseness5/5

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

Two concise sentences, front-loaded with core purpose, no redundant wording.

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

Completeness5/5

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

Despite no output schema, the description lists all key returned fields (comment, device metadata, tester, build info, screenshot URLs) and the optional inline image, providing a complete picture of what the tool returns.

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

Parameters3/5

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

Input schema descriptions already cover the two parameters fully (100% coverage); the tool description adds no additional semantic value beyond restating the download_screenshot option.

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

Purpose5/5

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

Clearly states 'Get a single screenshot feedback submission by ID', specifying the resource and action. Distinguishes itself from sibling list_screenshot_feedback which returns multiple submissions.

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

Usage Guidelines3/5

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

Implies usage when you have a feedback ID and need detailed information, but provides no explicit when-to-use or when-not-to-use guidance compared to alternatives.

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

list_analytics_reportsA

List the analytics reports available for a report request (name, category, instances). Optionally filter by category.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMax reports (default: 100)
categoryNoFilter reports by category
report_request_idYesreportRequestId from create_analytics_report_request

TDQS

A3.8/5.0
Behavior3/5

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

No annotations are provided, so the description must cover behavioral traits. It correctly suggests a read operation ('List') but does not disclose pagination, rate limits, or other important behaviors. The description is minimal but not misleading.

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

Conciseness5/5

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

The description is a single concise sentence with no unnecessary words or repetition. It front-loads the core purpose and fits within a single line.

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

Completeness4/5

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

Given no output schema, the description partially fills the gap by naming expected response fields (name, category, instances). However, it does not clarify pagination behavior despite the 'limit' parameter. For a list tool, this is fairly complete but could be more explicit.

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

Parameters3/5

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

Schema coverage is 100%, so the baseline is 3. The description adds little beyond the schema: it rephrases the 'category' filter and mentions output fields (name, category, instances) which are not parameters. No additional semantic value for parameters.

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

Purpose5/5

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

The description clearly states the verb 'List', the resource 'analytics reports available for a report request', and mentions optional filtering. It distinguishes the tool from sibling list tools (e.g., list_analytics_report_segments) by specifying the context of a report request.

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

Usage Guidelines3/5

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

The description mentions an optional filter by category but provides no explicit guidance on when to use this tool versus alternatives, nor any prerequisites or exclusions. The usage context is implied rather than stated.

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

list_analytics_report_segmentsA

List the downloadable segments of an analytics report (each has a presigned url, size and checksum). Pass a segment url to download_analytics_report_segment.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMax segments (default: 100)
report_idYesAnalytics report ID from list_analytics_reports

TDQS

A4/5.0
Behavior3/5

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

No annotations are provided, so the description carries the full burden. It discloses that segments have presigned URLs, size, and checksum, and that one can pass a URL to download. However, it does not mention pagination behavior (limit parameter suggests optional limit), default order, or error conditions. It adds value beyond being just 'list segments' but lacks some behavioral details.

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

Conciseness5/5

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

Two sentences, no wasted words. First sentence states the action and output attributes, second sentence gives a clear usage hint for the next step. Perfectly concise for the information conveyed.

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

Completeness4/5

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

Given no output schema, the description covers the main output attributes (presigned URL, size, checksum). It also references the sibling download tool. It could be more complete by mentioning pagination outcome (e.g., returns a list that may be truncated due to limit) or error scenarios, but for a list tool of low complexity, it is sufficiently complete.

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

Parameters3/5

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

Schema description coverage is 100%—both parameters have descriptions that explain their meaning (report_id comes from list_analytics_reports, limit has default and max). The tool description does not add additional parameter-level context, so it meets the baseline for high coverage. No extra value beyond schema.

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

Purpose5/5

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

The description uses a specific verb 'list' and clearly states the resource 'downloadable segments of an analytics report'. It distinguishes from sibling tools like list_analytics_reports (which lists reports) and download_analytics_report_segment (which downloads a segment) by mentioning presigned URLs and the next step to download.

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

Usage Guidelines4/5

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

The description implicitly tells when to use: to see segments of a report, then pass a segment URL to the download tool. It does not explicitly state when not to use alternatives, but the purpose is clear given sibling names. It provides a direct pointer to the related tool.

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

list_appsA

List the apps in your App Store Connect account (id, name, bundleId, sku, primaryLocale). Use the returned id as app_id for the other tools.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMax apps to return (default: 100)
bundle_idNoFilter by exact bundle ID, e.g. 'com.acme.app'

TDQS

A3.6/5.0
Behavior3/5

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

No annotations are provided, so the description carries the full burden. It discloses the return fields and the purpose of the id, but does not mention pagination, ordering, or behavior with no parameters (e.g., returns all apps? limit defaults to 100?). Some behavioral context is added beyond the schema but not comprehensive.

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

Conciseness5/5

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

Two sentences with no extraneous words. The first sentence front-loads the action ('List') and resource ('apps'), and the second sentence provides key guidance. Every sentence earns its place.

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

Completeness4/5

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

Given no output schema, the description helpfully lists the returned fields. The parameters are fully described in the schema. It is missing information about error handling, authentication, and whether the list is ordered, but for a list tool with optional parameters, it is reasonably complete.

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

Parameters3/5

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

Schema coverage is 100%, so baseline is 3. The description does not add new information about the parameters (limit and bundle_id) beyond what the schema already provides, but it does add context about the return value (id usage). Therefore, parameter semantics are adequately supported by the schema.

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

Purpose4/5

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

The description clearly states it lists apps and specifies the returned fields (id, name, bundleId, sku, primaryLocale). It implies its role as a data source for other tools by mentioning using the returned id as app_id, but does not explicitly differentiate from sibling tools like get_app (which retrieves a single app) or list_builds.

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

Usage Guidelines3/5

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

The description advises using the returned id for other tools, implying when to use it (to get app IDs). However, it does not specify when not to use it or mention alternatives (e.g., use get_app for detailed info on a specific app). Usage context is implied but not explicit.

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

list_app_store_version_localizationsA

List the per-locale localizations for an App Store version (description, keywords, what's new, promotional text, URLs).

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMax localizations (default: 100)
version_idYesApp Store version ID (from list_app_store_versions)

TDQS

A3.5/5.0
Behavior2/5

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

No annotations are present, so the description carries the full burden. It only describes what the tool lists without disclosing behavioral traits such as authentication requirements, rate limits, or side effects. As a read-only listing operation, the lack of explicit safety cues is a minor gap.

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

Conciseness5/5

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

The description is a single, well-structured sentence that front-loads the verb and resource and includes specific examples of the data returned. Every word is informative, with no redundancy.

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

Completeness3/5

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

Given the absence of an output schema, the description provides a useful list of fields but does not clarify the response format (e.g., an array of objects) or pagination behavior. It adequately covers the core functionality but lacks full completeness for an agent needing to parse results.

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

Parameters3/5

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

Schema coverage is 100%, so the baseline is 3. The description adds context by listing the fields included in the localizations, but it does not elaborate on parameter meaning beyond what the schema provides. The 'limit' and 'version_id' parameters are adequately described in the schema.

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

Purpose5/5

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

The description clearly states the tool lists per-locale localizations for an App Store version, specifying the verb 'list' and the resource 'app store version localizations'. It also enumerates the included fields (description, keywords, what's new, etc.), making the purpose distinct from sibling tools like 'get_app_store_version_localization'.

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

Usage Guidelines3/5

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

The description implicitly conveys usage context by requiring a 'version_id' from 'list_app_store_versions' (as noted in the schema), but it does not explicitly state when to use this tool versus alternatives like 'get_app_store_version_localization' for a single localization. No exclusion criteria or examples are provided.

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

list_app_store_versionsB

List App Store versions for an app (version string, platform, App Store state, release type). Filter by platform, version string or App Store state.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMax versions (default: 100)
app_idYesApp Store Connect app ID
versionNoFilter by version string, e.g. '1.2.0'
platformNoFilter by platform
app_store_stateNoFilter by App Store state, e.g. 'READY_FOR_SALE'

TDQS

B3.4/5.0
Behavior3/5

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

With no annotations provided, the description carries the full burden of behavioral disclosure. It explains the tool lists versions and supports filters, but does not disclose pagination behavior (though the limit parameter is in the schema), read-only nature, or potential limitations (e.g., data freshness, ordering). The description is adequate but not thorough.

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

Conciseness5/5

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

The description is a single sentence that front-loads the purpose and then lists filters. It is concise, with no superfluous words, and every phrase adds value.

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

Completeness4/5

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

Given the moderate complexity (5 parameters, no output schema), the description covers the core functionality and filters. It names the key fields returned, but an explicit listing of return fields or guidance on the 'release type' field would improve completeness. Overall, it is mostly sufficient.

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

Parameters3/5

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

Schema description coverage is 100%, so the parameter descriptions already define each parameter. The tool description merely restates the filtering capability without adding semantic nuances (e.g., format for version string, case sensitivity for state). No additional value beyond the schema.

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

Purpose4/5

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

The description clearly states the tool lists App Store versions for an app and enumerates the fields returned (version string, platform, App Store state, release type). It mentions filtering capabilities but does not explicitly differentiate from sibling list tools, though the context of app-specific versions is distinct.

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

Usage Guidelines2/5

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

The description indicates filtering by platform, version string, or App Store state, but provides no guidance on when to use this tool versus other list tools (e.g., list_apps, list_builds). There is no mention of prerequisites, context, or alternatives.

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

list_beta_app_localizationsA

List the TestFlight app localizations for an app (per-locale beta description, feedback email, marketing and privacy policy URLs). This is the tester-facing TestFlight metadata, not the App Store listing.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMax localizations (default: 100)
app_idYesApp Store Connect app ID
localeNoFilter by locale, e.g. 'en-US'

TDQS

A4.2/5.0
Behavior3/5

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

No annotations are provided, so the description must carry behavioral responsibility. It makes the read-only nature clear by using 'List' and describes the content being returned, which is helpful. However, it does not mention pagination behavior, output structure, or any other nuances that would prepare the agent for the tool's runtime behavior, though for a simple list tool this information is largely inferable.

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

Conciseness5/5

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

The description is exactly two sentences, with the key scope and differentiating clause front-loaded in the first sentence and the important 'not the App Store listing' clarification in the second. There is no filler or tautology; every phrase adds meaningful information.

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

Completeness4/5

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

The tool has a modest parameter set (3) and no output schema, yet the description covers the main intent, the content returned, and the distinguishing context. It does not describe return shape or pagination, but for a simple list tool this is a minor gap. The absence of an output schema suggests the description should be slightly more explicit, but it is still sufficient for correct selection and invocation.

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

Parameters4/5

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

The input schema already covers all three parameters (app_id, limit, locale) with clear descriptions, so the baseline is 3. The description adds extra context about the kind of data being filtered (per-locale beta metadata), which reinforces why the locale parameter exists and what the results represent. This modest extra value above the schema earns a 4.

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

Purpose5/5

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

The description uses a specific verb (List) and names the exact resource (TestFlight app localizations for an app). It further clarifies the domain by listing the content fields (beta description, feedback email, marketing and privacy policy URLs), and explicitly distinguishes this from the App Store listing, which prevents confusion with the sibling list_app_store_version_localizations.

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

Usage Guidelines4/5

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

The description clearly states the tool's scope (tester-facing TestFlight metadata) and explicitly excludes the App Store listing. While it does not name the sibling tool directly, the contrast with 'not the App Store listing' tells an agent to use this only for TestFlight metadata and look elsewhere for App Store data. This is strong, though not as explicit as naming the alternative.

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

list_beta_groupsA

List the TestFlight beta groups for an app (name, internal/external, public link, whether feedback is enabled).

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMax groups (default: 100)
app_idYesApp Store Connect app ID

TDQS

A3.5/5.0
Behavior2/5

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

No annotations are provided, and the description only mentions returned fields. It does not disclose that the tool is read-only, any pagination behavior (despite the limit parameter), or potential side effects or prerequisites. For a tool with no annotations, the description carries the full burden and falls short.

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

Conciseness5/5

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

The description is a single sentence that front-loads the action and resource, followed by parenthetical details. Every word is necessary and there is no redundancy.

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

Completeness3/5

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

Given the tool has 2 parameters, no output schema, and no annotations, the description provides minimal context. It explains the output fields but does not mention pagination, the default limit of 100, or authentication requirements. It is adequate but not thorough.

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

Parameters3/5

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

Schema coverage is 100% (both parameters have descriptions). The description adds no additional meaning or context for the parameters beyond what the schema already provides, so baseline score of 3 is appropriate.

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

Purpose5/5

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

The description clearly states the action (list), the resource (TestFlight beta groups for an app), and specifies the returned fields (name, internal/external, public link, feedback enabled). This effectively distinguishes it from sibling tools like list_builds or list_apps.

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

Usage Guidelines3/5

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

The description implies usage for listing beta groups for an app but does not explicitly state when to use this tool vs alternatives like list_beta_testers or list_group_testers. No when-not-to-use conditions are provided.

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

list_beta_testersA

List TestFlight beta testers (name, email, invite type, state). Filter by app, beta group and/or email.

ParametersJSON Schema
NameRequiredDescriptionDefault
emailNoFilter by exact tester email
limitNoMax testers (default: 100)
app_idNoFilter testers by app ID
group_idNoFilter testers by beta group ID

TDQS

A3.5/5.0
Behavior2/5

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

No annotations provided, so description bears full burden. Describes read-only listing but lacks details on pagination, sorting, behavior with no filters, or potential side effects. Limit parameter hints at pagination but not explicitly mentioned.

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

Conciseness4/5

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

Single sentence with key information front-loaded. Parenthetical list of fields keeps it compact. No superfluous words, but could be slightly more structured for readability.

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

Completeness4/5

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

Given no output schema and straightforward listing task, description adequately covers what is returned and how to filter. Lacks details on pagination or sorting, but acceptable for a simple list tool with high schema coverage.

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

Parameters3/5

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

Schema has 100% description coverage for all 4 parameters, so baseline is 3. Description adds marginal value by clarifying that filters can be combined ('Filter by app, beta group and/or email'), but does not provide additional syntax or constraints beyond schema.

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

Purpose5/5

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

Clearly states verb 'List', resource 'TestFlight beta testers', and specifies returned fields (name, email, invite type, state). Mentions filtering by app, beta group, and/or email, distinguishing it from sibling tools like list_beta_groups or list_devices.

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

Usage Guidelines3/5

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

Implies usage for listing testers with optional filters, but no explicit when-to-use or when-not-to-use guidance. No reference to alternatives like list_group_testers, which could be more specific.

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

list_buildsA

List TestFlight builds for an app (build/upload number, app version, platform, processing state, expiry) together with each build's TestFlight distribution state (buildBetaDetail: internalBuildState, externalBuildState, autoNotifyEnabled). Filter by pre-release version or processing state.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMax builds (default: 25)
app_idYesApp Store Connect app ID
versionNoFilter by pre-release version, e.g. '1.2.0'
processing_stateNoFilter by processing state

TDQS

A4.1/5.0
Behavior4/5

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

No annotations are supplied, so the description carries the full burden. It makes the read-only nature clear via 'List' and discloses the exact output fields, including the nested buildBetaDetail distribution state. It omits ordering and paging behavior, but those are minor for a listing tool.

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

Conciseness4/5

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

Two efficient sentences: the first states the action and output, the second states filtering. It is slightly field-heavy and repeats 'processing state', but each clause contributes essential information.

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

Completeness4/5

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

Given 100% schema parameter coverage, one required param, and no output schema, the description adequately covers input and return shape by enumerating returned fields. Minor missing details like default ordering are still acceptable for a list utility.

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

Parameters3/5

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

Schema description coverage is 100%, so the schema already documents every parameter. The description only echoes the filtering params (version, processing_state) without adding examples, format details, or edge-case meaning, which lands right at the baseline.

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

Purpose5/5

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

Uses a concrete verb ('List') and resource ('TestFlight builds for an app'), enumerates the returned fields, and names the two filtering dimensions. This clearly distinguishes it from siblings like get_build or get_build_status, which target a single build or status.

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

Usage Guidelines4/5

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

Gives a clear context of when to use the tool: listing TestFlight builds for an app, optionally filtered by version or processing state. It does not explicitly exclude alternatives like get_build for single-build lookups, so it stops short of a 5.

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

list_bundle_idsA

List registered bundle IDs (identifier, name, platform, seed ID). Filter by identifier or platform.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMax bundle IDs (default: 100)
platformNoFilter by bundle platform
identifierNoFilter by bundle identifier, e.g. 'com.acme.app'

TDQS

A4/5.0
Behavior3/5

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

No annotations are provided, so the description must suffice. It correctly implies a read-only list operation, but does not mention pagination, rate limits, or default behavior for the limit parameter. The limit schema hints at pagination but is not described.

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

Conciseness5/5

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

The description is a single, efficient sentence that conveys the purpose, return fields, and filtering options without unnecessary words. It is well-structured and front-loaded.

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

Completeness4/5

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

For a simple list tool with optional filters, the description is largely complete. It mentions the return fields. The only missing aspects are default ordering and explicit pagination handling, but the limit parameter covers this implicitly.

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

Parameters3/5

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

Schema coverage is 100% and the schema already describes the parameters. The description adds the list of return fields (identifier, name, platform, seed ID) which is not in the schema, providing some extra context, but it repeats the filtering capability already in the schema.

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

Purpose5/5

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

The description clearly states 'List registered bundle IDs' with specific fields (identifier, name, platform, seed ID) and mentions filtering by identifier or platform, making it distinct from sibling tools that deal with other resources.

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

Usage Guidelines4/5

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

The description indicates when to use (when listing bundle IDs) and mentions filtering options, but does not explicitly exclude cases or compare to alternatives. However, the sibling tools are for different resources, so confusion is unlikely.

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

list_certificatesA

List signing certificates (type, name, platform, serial number, expiry). Filter by certificate type.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMax certificates (default: 100)
certificate_typeNoFilter by type, e.g. 'IOS_DISTRIBUTION', 'IOS_DEVELOPMENT', 'DISTRIBUTION'

TDQS

A4.2/5.0
Behavior3/5

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

No annotations are provided, so the description must disclose behavior. It correctly indicates a read operation (listing) and filtering, but omits details on pagination, rate limits, auth requirements, or any side effects. Limited but not misleading.

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

Conciseness5/5

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

Single sentence that is succinct, informative, and front-loads the key action and returned data. No unnecessary words.

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

Completeness4/5

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

Given no output schema, the description covers the main output fields and filtering capability. However, it lacks details on pagination (despite the limit parameter) and response format structure, which would be helpful for a complete understanding.

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

Parameters4/5

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

Schema description coverage is 100%, so the schema documents both parameters. The description adds value by listing the output fields (type, name, platform, serial number, expiry) and providing example values for certificate_type, which enriches understanding beyond the schema.

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

Purpose5/5

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

Description clearly states 'List signing certificates' and enumerates the fields returned (type, name, platform, serial number, expiry). Filtering by certificate type is mentioned, which distinguishes it from sibling list tools that handle other resources.

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

Usage Guidelines4/5

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

The description implicitly conveys usage: use to list certificates and optionally filter by type. It does not explicitly state when to avoid this tool or mention alternatives, but the context of siblings makes the purpose clear.

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

list_ci_artifactsA

List the artifacts a build action produced (logs, archives, test results) with file name, type, size and a download URL.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMax artifacts (default: 50)
build_action_idYesXcode Cloud build action ID (from list_ci_build_actions)

TDQS

A4/5.0
Behavior4/5

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

With no annotations, the description carries the burden of indicating behavior. 'List' signals a read-only operation, and naming the returned metadata fields clarifies that the tool returns artifact metadata rather than the artifact content itself. It does not discuss authorization or pagination, but these are less critical for a simple listing tool.

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

Conciseness5/5

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

The description is a single compact sentence that front-loads the action and resource, then gives useful examples and return fields. Every phrase contributes meaning with no wasted words.

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

Completeness4/5

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

For a simple list operation with no output schema, the description appropriately documents the main return fields and artifact types. It slightly under-explains the overall CI workflow, but the schema and sibling tool names provide enough surrounding context for an agent to call it correctly.

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

Parameters3/5

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

Schema description coverage is 100%, so both build_action_id and limit are already well documented in the schema. The description does not add extra parameter-level meaning but also does not need to, given the schema's completeness.

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

Purpose5/5

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

States a specific verb and resource: 'List the artifacts a build action produced', and adds concrete return fields (file name, type, size, download URL). This clearly separates it from sibling CI tools like list_ci_build_actions, list_ci_issues, and list_ci_products.

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

Usage Guidelines3/5

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

The description implies usage after a build action has been identified, and the schema reinforces that build_action_id comes from list_ci_build_actions. However, the prose does not explicitly state when to use this tool versus alternatives, nor does it describe what to do if no artifacts exist.

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

list_ci_build_actionsA

List the actions of an Xcode Cloud build run (build, test, analyze, archive) with their execution progress, completion status and issue counts. Use the returned action id with list_ci_issues and list_ci_artifacts.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMax actions (default: 50)
build_run_idYesXcode Cloud build run ID (from list_ci_build_runs)

TDQS

A4/5.0
Behavior3/5

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

With no annotations, the description carries the full burden of explaining expected behavior. It does disclose read-style behavior ('List') and describes the kind of data returned, which is useful. However, it does not mention important behavioral details such as default pagination, ordering, or what happens when a build has zero actions, leaving some room for inference.

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

Conciseness5/5

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

Two crisp sentences with no filler. The first sentence states the resource and output contents; the second sentence provides the crucial integration guidance. Every sentence earns its place.

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

Completeness4/5

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

For a simple two-parameter tool with a fully documented schema, the description is nearly complete. It explains what the tool returns and explicitly names the downstream tools for the returned action id. It does not elaborate on return shape or result paging, but these are minor given the simple list operation and the schema's limit parameter.

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

Parameters3/5

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

Schema description coverage is 100%, so the heavy lifting is already done by the schema. The description adds a small semantic link by mentioning the returned action id chains into sibling tools, but it does not add new meaning to either 'build_run_id' or 'limit' beyond what the schema already provides. Baseline 3 is appropriate.

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

Purpose5/5

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

The description clearly states the tool lists the actions of an Xcode Cloud build run and enumerates the action types (build, test, analyze, archive). It also specifies the kind of information returned (execution progress, completion status, issue counts), distinguishing it from sibling tools that list issues, artifacts, or build runs.

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

Usage Guidelines4/5

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

The description provides clear context: it works from a build_run_id (sourced from list_ci_build_runs) and it feeds the returned action id into list_ci_issues and list_ci_artifacts. It does not explicitly state when not to use this tool or contrast it with alternatives, but the downstream dependency is clearly articulated, giving an agent enough guidance for correct sequencing.

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

list_ci_build_runsA

List Xcode Cloud build runs for a product or a workflow (build number, start reason, execution progress, completion status, issue counts, source commit and branch/tag). Newest first.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMax build runs (default: 25)
product_idNoXcode Cloud product ID (or pass workflow_id)
workflow_idNoXcode Cloud workflow ID

TDQS

A3.8/5.0
Behavior3/5

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

No annotations are provided, so the description carries the behavioral burden. It does disclose 'Newest first' ordering and the expected return fields, but it does not explicitly state whether this is a read-only operation, mention side effects, or describe pagination behavior beyond the parameter-level default limit.

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

Conciseness5/5

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

The description is a single concise sentence that leads with the action and resource, then packs the return contents and ordering into a parenthetical list. There is no redundant or speculative prose.

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

Completeness4/5

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

Since there is no output schema, the description usefully enumerates the expected fields and the sort order, which covers the main return context. It lacks an explanation of pagination or the default result count, but the limit parameter description already communicates the default, so the residual gap is small for a straightforward list tool.

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

Parameters3/5

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

Schema description coverage is 100%, and each parameter already has a clear description including limits, defaults, and the product_id vs workflow_id relationship. The tool description adds only a high-level 'product or workflow' framing, so the schema does most of the semantic work.

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

Purpose5/5

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

The description names a specific verb and resource ('List Xcode Cloud build runs') and scopes it to a product or workflow. The detailed field list and 'Newest first' ordering make it clearly distinct from sibling tools like list_ci_build_actions, list_ci_issues, and list_ci_artifacts.

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

Usage Guidelines3/5

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

The phrase 'for a product or a workflow' provides implied context for when to use the tool and how filtering should work. However, it does not explicitly explain when to prefer this tool over siblings such as list_ci_build_actions or list_ci_artifacts, so usage guidance is inferable but not stated.

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

list_ci_issuesA

List the issues Xcode Cloud reported for a build action (errors, warnings, analyzer and test failures) with the message and the source file location. This is what to read when a build run failed.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMax issues (default: 50)
build_action_idYesXcode Cloud build action ID (from list_ci_build_actions)

TDQS

A4/5.0
Behavior3/5

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

With no annotations provided, the description carries the full burden of explaining behavior. It clearly states that it returns issues with messages and source locations, which is a useful behavioral disclosure. However, it doesn't mention pagination behavior, possible absence of results, or any additional response traits beyond the list contents.

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

Conciseness5/5

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

Two sentences with no filler. The core behavior is front-loaded, and the practical when-to-use signal is a terse second sentence. Every sentence contributes value.

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

Completeness4/5

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

The description effectively conveys what the tool returns and when to use it. Since there is no output schema, the note about including message and source file location helps compensate. It doesn't mention the limit parameter or sorting, but the schema covers the parameter, and those details are minor for a list-issues tool.

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

Parameters3/5

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

Schema description coverage is 100%, so the schema already documents build_action_id and limit with descriptions. The tool description adds no new parameter-level meaning, so the baseline score of 3 is appropriate.

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

Purpose5/5

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

The description names a specific verb ('List'), a specific resource (Xcode Cloud issues for a build action), and specifies scope (errors, warnings, analyzer/test failures) and output content (message and source file location). This clearly differentiates it from sibling tools like list_ci_build_actions or list_ci_artifacts.

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

Usage Guidelines4/5

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

Explicitly states the trigger condition: 'This is what to read when a build run failed.' This gives clear when-to-use guidance. It doesn't explicitly name alternatives or when-not-to-use cases, but the build_action_id schema reference to list_ci_build_actions reinforces the workflow.

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

list_ci_productsA

List the Xcode Cloud products in the account (name, product type, created date, related app). Use the returned id as product_id for list_ci_build_runs.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMax products (default: 100)
app_idNoFilter by App Store Connect app ID
product_typeNoFilter by product type

TDQS

A4.2/5.0
Behavior4/5

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

With no annotations, the description carries more responsibility: it states the account scope, what fields will be returned, and the relationship between the product id and the CI build-runs tool. It does not discuss pagination or ordering, but the basic behavior of a read-only list is adequately disclosed.

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

Conciseness5/5

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

The description is two concise sentences with no filler. It front-loads the action and resource, then adds the most useful workflow hint about using the returned id for a related list. Every clause serves a purpose.

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

Completeness4/5

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

Given the simple list operation, no output schema, and high schema coverage, the description covers the key essentials: what this returns and how it connects to the next CI step. It could mention default pagination behavior, but that is reasonably supplied by the limit parameter's own documentation.

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

Parameters3/5

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

Schema description coverage is 100%, so the parameters themselves are well documented. The tool description gives no additional parameter-specific guidance beyond the schema's own descriptions. Hitting the baseline of 3 is appropriate because the schema already handles the semantics.

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

Purpose5/5

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

The description states a specific action, 'List the Xcode Cloud products', with the exact resource and real returned fields. It also explicitly links the returned id to list_ci_build_runs, which distinguishes it from that sibling and clarifies its role in the CI workflow.

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

Usage Guidelines4/5

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

The description gives clear usage context by explaining how the returned id feeds into list_ci_build_runs. It does not mention when not to use the tool or compare it to alternatives, but the primary workflow is explicit enough to guide correct invocation.

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

list_crash_feedbackA

List TestFlight crash feedback submissions for an app. Each submission includes any tester comment, device/OS details, the resolved tester and build, and a reference to the downloadable crash log (use get_crash_log). The build carries its build number (build.version) and the TestFlight/marketing version (build.preReleaseVersion.version, e.g. '1.2.0'). By default only the latest pre-release version's feedback is returned (set app_version to a specific version or 'all'). Filter by build, platform, device, OS or tester.

ParametersJSON Schema
NameRequiredDescriptionDefault
sortNoSort order (default: -createdDate, newest first)
limitNoMax items to return (default: 50)
app_idYesApp Store Connect app ID (from list_apps)
build_idNoFilter to a single build ID
tester_idNoFilter by beta tester ID
os_versionNoFilter by OS version string
app_versionNoPre-release (marketing) version to filter by, e.g. '1.2.0'. Defaults to 'latest' — only the most recent version's feedback is returned; older versions are excluded. Pass 'all' to include every version. Ignored when build_id is set.
app_platformNoFilter by app platform
device_modelNoFilter by device model, e.g. 'iPhone15,2'
device_platformNoFilter by device platform

TDQS

A4.4/5.0
Behavior4/5

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

With no annotations provided, the description carries full burden. It discloses key behavioral traits: default sorting (newest first), default limit (50, max 200), effect of app_version parameter (default 'latest', ignored when build_id set), and return fields (tester comment, device/OS, etc.). Missing details like pagination or rate limits, but overall transparent.

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

Conciseness5/5

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

The description is concise, front-loading the main purpose and then progressively adding detail about default behavior and filtering options. Every sentence contributes meaning without redundancy.

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

Completeness4/5

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

Given 10 parameters, 100% schema coverage, and no output schema, the description explains what the output contains and references get_crash_log for crash log download. It does not explicitly mention pagination or list structure, but the information is otherwise complete for an API tool.

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

Parameters4/5

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

Schema coverage is 100% with descriptions for all properties. The description adds value by explaining defaults (app_version default 'latest', sort default '-createdDate'), relationships (app_version ignored when build_id set), and output semantics (build.version and build.preReleaseVersion.version).

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

Purpose5/5

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

The description clearly states it lists TestFlight crash feedback submissions for an app, including specific details like tester comments, device/OS, resolved tester and build, and a reference to the crash log. It distinguishes itself from sibling tools like get_crash_feedback and get_screenshot_feedback by implying a list vs. single retrieval.

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

Usage Guidelines4/5

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

The description explains default behavior (latest pre-release version only) and how to override (set app_version or 'all'), and lists available filters (build, platform, device, OS, tester). It does not explicitly state when not to use the tool or mention alternatives, but the guidance is sufficient for typical use.

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

list_customer_reviewsA

List public App Store customer reviews for a released app (rating, title, body, reviewer, territory) together with your published developer response, if any. Distinct from TestFlight beta feedback. Filter by rating or territory, or restrict to reviews that already have a response.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMax reviews (default: 50)
app_idYesApp Store Connect app ID
ratingNoFilter by star rating (1-5)
territoryNoFilter by territory code, e.g. 'USA'
has_responseNoOnly reviews that have (true) or lack (false) a published developer response

TDQS

A4.2/5.0
Behavior4/5

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

Since there are no annotations, the description carries the full burden of behavioral disclosure. It conveys that reviews are public, limited to released apps, and include the developer's published response 'if any', showing that the response is optional. It could be more explicit about pagination or default ordering, but the essential behavioral traits are not hidden.

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

Conciseness5/5

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

The description is very compact: two sentences deliver the purpose, return fields, exclusions, and filter capabilities with no filler. Information is front-loaded, with the primary action and target resource in the first sentence and the important distinction in the second. Every sentence earns its place.

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

Completeness4/5

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

Given the 100% parameter coverage and the absence of an output schema, the description usefully lists the expected output fields and clarifies the difference from beta feedback. Missing details like default ordering and pagination are not critical, because the schema documents the limit parameter and its default. Overall, enough information is present for an agent to select and invoke the tool correctly.

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

Parameters3/5

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

The input schema already covers 100% of the parameters with descriptions, so the baseline is 3. The description restates the rating, territory, and has-response filters in natural language but adds no new semantics beyond what the schema provides. It is helpful for quick comprehension but does not elevate the score above the baseline.

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

Purpose5/5

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

The description states a specific verb and resource: 'List public App Store customer reviews for a released app', and enumerates the returned fields including rating, title, body, reviewer, and territory. It explicitly distinguishes itself from TestFlight beta feedback, which is the closest sibling category and prevents confusion with the feedback-related tools. This goes beyond a vague listing and makes the tool's purpose unambiguous.

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

Usage Guidelines4/5

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

The description gives clear usage context: it is for App Store customer reviews of a released app, not for TestFlight beta feedback. It also mentions filtering by rating, territory, and response presence, which outlines the main ways the tool can be used. However, it does not name specific alternative tools or explicitly say 'use this when...', so it barely misses the top tier.

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

list_devicesA

List registered devices (name, platform, UDID, class, model, status). Filter by platform or status.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMax devices (default: 100)
statusNoFilter by device status
platformNoFilter by device platform

TDQS

A3.6/5.0
Behavior2/5

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

No annotations are provided, so the description carries full burden for behavioral disclosure. It only states that the tool lists devices with specific fields. It does not disclose idempotency, auth requirements, rate limits, pagination, or default ordering. For a simple list tool, this is insufficient transparency.

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

Conciseness5/5

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

A single sentence that starts with the core action ('List registered devices'), then enumerates fields and filter options. Every part adds value; no redundant information.

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

Completeness4/5

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

Given no output schema, the description covers the return fields and filter parameters adequately. It does not mention ordering, default limit, or error conditions, but for a simple list tool with clear schema, this is mostly sufficient.

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

Parameters3/5

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

Schema description coverage is 100%, so baseline is 3. The description adds that platform and status are filters, which is already implied by their enum values. It does not provide additional semantics beyond the schema definitions.

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

Purpose4/5

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

The description clearly states the tool lists registered devices and enumerates the fields returned (name, platform, UDID, class, model, status). This distinguishes it from sibling list_* tools, which list other resources. However, it does not explicitly contrast with alternatives.

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

Usage Guidelines4/5

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

The description mentions filtering by platform or status, providing direct guidance on parameter usage. It does not specify when not to use the tool, but among sibling tools, no direct alternative for device listing exists, so explicit exclusions are less critical.

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

list_diagnostic_signaturesA

List the diagnostic signatures for a build — groups of similar disk-write, hang or launch problems collected from real devices, each with the symbolicated signature, a weight between 0 and 1 (how much of the problem it accounts for) and Apple's insight. Use get_diagnostic_logs with a signature ID for the detailed logs.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMax signatures (default: 25)
build_idYesBuild ID (from list_builds)
diagnostic_typeNoFilter by diagnostic type: DISK_WRITES, HANGS or LAUNCHES

TDQS

A4.2/5.0
Behavior4/5

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

No annotations are provided, so the description carries full responsibility. It discloses the aggregation basis (groups collected from real devices), the three diagnostic categories, and the meaning of the weight field. This goes beyond the name and schema, although it does not disclose rate limits, sort order, or partial-result behavior.

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

Conciseness5/5

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

The description is two sentences with no wasted words: the first defines what the tool lists and what each object contains, and the second points to the correct follow-up tool. It is front-loaded with the core purpose and every sentence earns its place.

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

Completeness4/5

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

Because there is no output schema, the description usefully names the return elements: symbolicated signature, weight, and Apple's insight. It also explains that the data comes from real devices and how to drill into detailed logs. Minor gaps such as pagination, sort order, and a complete return-field list keep it from a perfect score.

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

Parameters3/5

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

Input schema descriptions already cover 100% of the parameters, including the source of build_id, default and range of limit, and explicit enum values for diagnostic_type. The description adds domain context about the returned data but does not add parameter-level semantics beyond what the schema already documents, so a baseline 3 is appropriate.

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

Purpose5/5

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

The description states a specific verb and resource—'List the diagnostic signatures for a build'—and defines what the resource is: groups of similar disk-write, hang, or launch problems with a symbolicated signature, weight, and Apple insight. This clearly differentiates it from related list/get sibling tools like get_diagnostic_logs.

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

Usage Guidelines4/5

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

The description provides actionable context by directing the agent to use get_diagnostic_logs when detailed logs are needed, effectively distinguishing summary listing from detailed data. It does not spell out explicit when-not-to-use conditions against the many sibling tools, but the boundary is clear enough for selection.

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

list_group_testersB

List the beta testers that belong to a specific beta group.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMax testers (default: 100)
group_idYesBeta group ID

TDQS

B3.3/5.0
Behavior2/5

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

With no annotations, the description should disclose behavioral traits like error handling or pagination, but it only states the basic action.

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

Conciseness5/5

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

A single sentence with no extraneous words, appropriate for a simple tool.

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

Completeness3/5

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

The description is minimal; it covers the basic purpose but lacks details on return format, pagination beyond the limit parameter, or error scenarios.

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

Parameters3/5

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

Schema coverage is 100%, so the baseline is 3. The description adds no additional meaning beyond what the schema provides for group_id and limit.

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

Purpose5/5

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

The description clearly states the tool lists beta testers for a specific beta group using a specific verb and resource, distinguishing it from similar tools like list_beta_testers.

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

Usage Guidelines2/5

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

No guidance on when to use this tool versus alternatives (e.g., list_beta_testers), nor any prerequisites or exclusions.

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

list_profilesA

List provisioning profiles (name, platform, type, state, UUID, expiry) with their bundle ID. Filter by profile state.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMax profiles (default: 100)
profile_stateNoFilter by profile state

TDQS

A3.8/5.0
Behavior3/5

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

No annotations are provided, so the description is the sole source for behavioral disclosure. It states the tool lists provisioning profiles with specific attributes and supports filtering. As a read-only listing operation, there is no contradiction or missing critical behavior, but it does not mention potential side effects, authentication 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.

Conciseness5/5

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

The description is a single concise sentence that packs all essential information: the action (list), the resource (provisioning profiles), the returned data, and the filter option. No unnecessary words.

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

Completeness4/5

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

Given the tool's simplicity, good schema coverage, and no output schema, the description adequately covers basic usage. It lists returned attributes and the filter. Potential gaps include pagination behavior beyond the limit parameter or how results are ordered, but these are minor. A score of 4 is appropriate.

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

Parameters3/5

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

Schema description coverage is 100%, so the input schema already documents both parameters thoroughly. The description merely echoes the filter capability without adding new meaning or usage nuances. Baseline 3 applies as the description adds no extra value beyond the schema.

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

Purpose5/5

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

The description clearly states it lists provisioning profiles and enumerates the attributes returned (name, platform, type, state, UUID, expiry), with bundle ID. It also specifies filtering by profile state. This distinguishes it from sibling tools like list_apps or list_builds.

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

Usage Guidelines3/5

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

The description notes filtering by profile state, providing some usage context. However, it lacks explicit guidance on when to use this tool versus alternatives (e.g., when to use list_profiles vs list_certificates or list_devices). The context from sibling tools helps but is not explicit in the description.

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

list_review_submissionsA

List App Store review submissions for an app: the state of each submission (READY_FOR_REVIEW, WAITING_FOR_REVIEW, IN_REVIEW, UNRESOLVED_ISSUES, CANCELING, COMPLETING, COMPLETE), when it was submitted, the App Store version under review and the items it contains (version, in-app purchases, product pages, experiments). Use this to see what is currently in App Review and what is blocking it.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMax submissions (default: 25)
stateNoFilter by submission state
app_idYesApp Store Connect app ID
platformNoFilter by platform

TDQS

A3.9/5.0
Behavior3/5

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

No annotations are provided, so the description carries the transparency burden. It signals a read-only 'List' operation and enumerates the returned fields and statuses, which is useful. However, it does not explicitly state side-effect characteristics (pagination, sorting, or whether COMPLETE submissions are also included) beyond the schema, leaving some behavioral assumptions implied rather than confirmed.

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

Conciseness4/5

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

Two sentences carry substantial specific information with a clear frontload of the core purpose. The status enum list is a bit long, but it serves the agent by clarifying output content; nothing is filler.

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

Completeness4/5

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

For a list tool with 4 params and no output schema, the description covers the required output semantics and the practical use case. It doesn't mention pagination or explicitly exclude alternative tools for version-specific status checks, but an agent has enough to call this correctly with app_id from the required schema.

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

Parameters3/5

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

Input schema coverage is 100%, so the baseline is 3 even without extra parameter commentary. The description mentions status values and item types, which slightly enriches the `state` and `platform` semantics, but it does not add meaning beyond what the schema already describes with field-level comments.

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

Purpose5/5

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

The description opens with a specific verb-resource pairing: 'List App Store review submissions for an app.' It then clarifies exactly what the list contains: submission state, submission date, App Store version, and contained items (version, in-app purchases, product pages, experiments). This clearly distinguishes it from sibling tools such as list_app_store_versions and list_customer_reviews.

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

Usage Guidelines4/5

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

The description provides an explicit use case: 'Use this to see what is currently in App Review and what is blocking it.' It doesn't formally enumerate when-not-to-use and alternatives to other sibling tools, but the context is clear enough for an agent to choose this when it needs App Review submission state.

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

list_screenshot_feedbackA

List TestFlight screenshot feedback submissions for an app. Each submission includes the tester's comment (the actual feedback text), the screenshot asset URL(s), device/OS details, and the resolved tester and build. The build carries its build number (build.version) and the TestFlight/marketing version (build.preReleaseVersion.version, e.g. '1.2.0'). By default only the latest pre-release version's feedback is returned (set app_version to a specific version or 'all'). Filter by build, platform, device, OS or tester.

ParametersJSON Schema
NameRequiredDescriptionDefault
sortNoSort order (default: -createdDate, newest first)
limitNoMax items to return (default: 50)
app_idYesApp Store Connect app ID (from list_apps)
build_idNoFilter to a single build ID
tester_idNoFilter by beta tester ID
os_versionNoFilter by OS version string
app_versionNoPre-release (marketing) version to filter by, e.g. '1.2.0'. Defaults to 'latest' — only the most recent version's feedback is returned; older versions are excluded. Pass 'all' to include every version. Ignored when build_id is set.
app_platformNoFilter by app platform
device_modelNoFilter by device model, e.g. 'iPhone15,2'
device_platformNoFilter by device platform

TDQS

A4.2/5.0
Behavior3/5

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

No annotations are provided, so the description carries the full burden. It discloses default filtering, that app_version is ignored when build_id is set, and what fields are returned. However, it does not mention read-only nature, pagination behavior, or rate limits, leaving some behavioral gaps.

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

Conciseness5/5

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

The description is concise with 5 sentences, front-loading the purpose. Each sentence adds essential information without redundancy, achieving high efficiency.

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

Completeness4/5

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

Given 10 parameters and no output schema, the description covers defaults, filtering, and output content well. It could mention pagination (limit) and sorting more explicitly, but overall it is sufficiently complete for an AI agent.

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

Parameters4/5

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

Schema description coverage is 100%, but the description adds value by explaining the default behavior of app_version and its interaction with build_id. It also summarizes output fields beyond the schema, enhancing parameter understanding.

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

Purpose5/5

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

The description clearly states the tool lists TestFlight screenshot feedback submissions, specifying the included fields (comment, screenshot URLs, device/OS, tester, build). It uses a specific verb 'list' and resource 'screenshot feedback', effectively distinguishing it from siblings like 'get_screenshot_feedback'.

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

Usage Guidelines4/5

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

The description explains default behavior (only latest pre-release version returned) and filtering options (app_version, build_id, etc.). It provides clear context on when to use parameters, but does not explicitly state when to avoid the tool or compare with alternatives like get_screenshot_feedback.

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

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 16 tool updatesv0.3.1
    • Addedget_app_store_version_status
    • Addedget_beta_app_review_detail
    • Addedget_beta_tester_metrics
    • Addedget_build_status
    • Addedget_build_usage_metrics
    • Addedget_diagnostic_logs
    • Addedget_perf_power_metrics
    • Addedlist_beta_app_localizations
    • Addedlist_ci_artifacts
    • Addedlist_ci_build_actions
    • Addedlist_ci_build_runs
    • Addedlist_ci_issues
    • Addedlist_ci_products
    • Changedlist_customer_reviews1 field changed
      • addedInput schema / properties / has_response
        Added value: +{
        +  "description": "Only reviews that have (true) or lack (false) a published developer response",
        +  "type": "boolean"
        +}
    • Addedlist_diagnostic_signatures
    • Addedlist_review_submissions
  2. 26 tool updatesv0.2.1
    • First observedcreate_analytics_report_request
    • First observeddownload_analytics_report_segment
    • First observeddownload_finance_report
    • First observeddownload_sales_report
    • First observedget_app
    • First observedget_app_store_version_localization
    • First observedget_build
    • First observedget_crash_feedback
    • First observedget_crash_log
    • First observedget_screenshot_feedback
    • First observedlist_analytics_report_segments
    • First observedlist_analytics_reports
    • First observedlist_app_store_version_localizations
    • First observedlist_app_store_versions
    • First observedlist_apps
    • First observedlist_beta_groups
    • First observedlist_beta_testers
    • First observedlist_builds
    • First observedlist_bundle_ids
    • First observedlist_certificates
    • First observedlist_crash_feedback
    • First observedlist_customer_reviews
    • First observedlist_devices
    • First observedlist_group_testers
    • First observedlist_profiles
    • First observedlist_screenshot_feedback

TDQS

B3.4/5.0

Scored across 41 tools

Disambiguation4/5

Most tools target a distinct resource and action, and the list/get/download patterns are explicit. However, a few pairs overlap meaningfully: get_build and get_build_status both return TestFlight distribution state, and list_beta_testers vs list_group_testers both enumerate testers, so an agent could occasionally misselect.

Naming Consistency5/5

Every tool follows a consistent snake_case verb_noun convention (list_, get_, create_, download_) with predictable resource suffixes. There are no mixed naming styles or vague verbs.

Tool Count2/5

41 tools is far above the typical well-scoped range and will strain an agent's tool-selection context. Although the server spans several distinct Apple APIs, the count is still excessive and many adjacent read tools could be consolidated.

Completeness3/5

The read surface is extensive across TestFlight, App Store, Xcode Cloud, analytics, finance and device assets, but the server is almost entirely query-only. There are notable gaps in lifecycle operations such as updating/deleting testers, groups, localizations or versions, and submitting releases for review.

Maintenance

ActivityMaintained
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    A
    maintenance
    MCP 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.
    68
    MIT
  • A
    license
    Not graded
    quality
    A
    maintenance
    A 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 npm
    MIT
  • A
    license
    Not graded
    quality
    B
    maintenance
    MCP server that exposes App Store Connect TestFlight beta feedback including screenshot submissions, crash submissions, crash logs, and screenshot downloads as tools for MCP-capable clients.
    2
    BSD 3-Clause