Skip to main content
Glama
OrellBuehler

testflight-mcp

by OrellBuehler

upload_app_screenshots

Upload local PNG or JPEG files as App Store screenshots in order for one localization display type, creating the set if needed and optionally replacing existing images.

Instructions

Upload local PNG/JPEG files as App Store screenshots to one display type of an App Store version localization, in the given order. Creates the screenshot set if it does not exist. With replace_existing, the set's current screenshots are deleted first; otherwise the files are appended (a set holds at most 10). Returns each uploaded screenshot with its assetDeliveryState; Apple processes them asynchronously, so check again with list_app_screenshot_sets.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
file_pathsYesAbsolute paths of the image files, in display order
display_typeYesScreenshot display type, e.g. APP_IPHONE_67, APP_IPHONE_65, APP_IPAD_PRO_3GEN_129, APP_WATCH_ULTRA
localization_idYesApp Store version localization ID (from list_app_store_version_localizations)
replace_existingNoDelete the set's existing screenshots before uploading (default: false)

Schema Changelog

Changes observed during successful MCP inspections.

  1. Addedv0.4.0

TDQS

A4.7/5.0
Behavior5/5

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

With no annotations, the description carries the full burden and does so well: it discloses the destructive replace_existing deletion, the create-if-missing behavior, the append default, the 10-item cap, and the async Apple processing with assetDeliveryState. Nothing important about side effects is left to 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?

Three dense sentences that front-load the core action, then side-effect behavior, then return/async status. Every clause earns its place with no filler.

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

Completeness5/5

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

For a mutation tool with no annotations and no output schema, the description covers purpose, side effects, limits, return value, and the follow-up call needed due to async processing. An agent has everything required to invoke it correctly.

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, but the description adds meaning beyond the schema by spelling out the destructive semantics of replace_existing, the in-order interpretation of file_paths, and the 10-screenshot set limit. It stops short of 5 only because display_type values and localization_id sourcing are 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?

States a specific verb (upload) and resource (local PNG/JPEG files as App Store screenshots) scoped to one display type of a version localization, in order. An agent can distinguish this from list_app_screenshot_sets and list_app_store_version_localizations without opening a schema.

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

Usage Guidelines4/5

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

Explains the key decision point (replace_existing deletes first vs. append) and points to list_app_screenshot_sets for the async-status follow-up. It lacks an explicit 'when not to use' or a named alternative for creating/patching screenshots a different way, so it stops short of a full 5.

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