Agent C — App Store Screenshots
Server Details
AI-designed App Store screenshot sets from your app's screens, uploaded to App Store Connect.
- Status
- Healthy
- Uptime
- 100.0% over 24 days
- Last Tested
- Transport
- Streamable HTTP · MCP 2025-06-18
- URL
- Repository
- jacobteague50-glitch/agent-c-mcp
- GitHub Stars
- 0
TDQS
Scored across 10 tools
Most tools target a distinct action in the screenshot workflow: add_app, design_set, edit_set, get_set, unlock_set, export_set, and send_to_app_store are clearly separable. The only mild overlap is upload_screenshots vs. get_upload_link, though their descriptions explicitly clarify when to use each.
All tools use a consistent snake_case verb_noun pattern (add_app, list_apps, design_set, edit_set, export_set, get_set, unlock_set, upload_screenshots, send_to_app_store). The convention is predictable and readable throughout.
Ten tools is well-scoped for an App Store screenshot workflow, covering app import, upload, design, edit, unlock, export, and App Store submission. Each tool has a clear place in the lifecycle.
The surface covers the full core lifecycle from adding an app through exporting and submitting to App Store Connect. Minor gaps exist around deleting apps/sets or managing multiple sets explicitly, but agents can work around these.
Available Tools
10 toolsadd_appAdd an appAInspect
Add an app by its App Store link (imports name, icon, description), or by name if it isn't released yet. Importing a live app takes ~10-30s; poll list_apps until status is 'ready'.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | Only for apps not on the App Store yet | |
| app_store_url | No | e.g. https://apps.apple.com/us/app/…/id123456789 |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare this is a non-read-only, open-world, non-destructive write. The description adds genuinely useful behavior the annotations cannot: import of a live app is asynchronous and takes ~10-30s, and the caller must poll list_apps until status is 'ready'. It omits failure modes (invalid URL, duplicate app) but the async contract is the key gap it closes.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, no filler, and the primary path (App Store link) is front-loaded ahead of the fallback and the latency/polling caveat.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a two-optional-parameter mutation tool with full schema coverage, existing annotations, and no output schema, the description covers the essential unknown — that the operation is asynchronous and requires polling. Error/duplicate handling is the only notable omission.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and both parameters are documented in the schema, including the 'not on the App Store yet' note for name. The description restates that condition rather than adding new syntax or format detail, so baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Add an app') and explains the two distinct input modes — App Store link vs. bare name for unreleased apps. It names list_apps, but only as a polling target rather than as an alternative tool, so sibling differentiation is partial.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives clear conditional guidance: use the App Store link for live apps, use the name for apps not yet released. It also tells the agent what to do afterward (poll list_apps). It stops short of explicit when-not-to-use guidance or naming a competing sibling like edit_set.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
design_setDesign a screenshot setAInspect
Claude art-directs a full App Store screenshot set from the uploaded screenshots: opening shot, headline per slide, close-ups, palette. Returns watermarked preview images, the slide list and a link to open it in the Agent C studio. Takes ~40-60 seconds.
| Name | Required | Description | Default |
|---|---|---|---|
| focus | No | Optional: what to emphasize (feature, audience, angle). | |
| app_id | Yes | app_id from list_apps / add_app | |
| device | No | Screenshot size: iPhone 6.9" (1320x2868), 6.5" (1284x2778), iPad 13" (2064x2752), or the optional iPhone Duo inner (2007x2853) / outer (1398x2034) displays. iPad and Duo need the app's real iPad / Duo simulator screenshots uploaded first (replace=false); iPhone-only apps should skip iPad. Duo is export-only: App Store Connect's API doesn't accept Duo uploads yet, so send_to_app_store refuses Duo sets. | iphone_69 |
| opener | No | Opening slide: hand holding the phone, big app icon, lifestyle photo, or a plain phone. auto lets Claude pick. | auto |
| include | No | What to make: the screenshot set, screenshots + the App Store product page header (iOS 27), or only the header | screenshots |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare non-read-only, open-world, non-destructive. The description adds real value beyond them: a ~40-60 second runtime estimate and the shape of the output (watermarked previews, slide list, studio link). It does not say whether a new set is created or an existing one overwritten, which is the main remaining ambiguity.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One dense paragraph, front-loaded with the action and what is produced, with runtime appended last. Every sentence carries information; nothing is padding.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No output schema exists, so describing the return shape (previews, slide list, studio link) is necessary and done. Missing is the lifecycle context an agent needs: that the result is a set later editable via edit_set or exported via export_set, and any cost/credit implications of a 40-60 second generation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and three enums are fully documented in the schema (device sizes, opener styles, include modes). The description contributes nothing about focus, app_id, or device behavior, so baseline 3 is right.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a concrete verb and artifact: art-directs a full App Store screenshot set (opening shot, headlines, close-ups, palette). This clearly distinguishes it from edit_set/export_set/get_set. It stops short of explicitly naming the sibling it differs from, so not a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
'from the uploaded screenshots' implies the upload prerequisite, and the app_id param points at list_apps/add_app, but the description never says when to call this versus edit_set (revise an existing set) or get_set. Usage is inferable rather than stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
edit_setEdit a setAInspect
Change one slide (headline, subline, screenshot, layout, position, or remove it), the opening shot, the device size, or the App Store header (header_*). Re-renders previews. Free.
| Name | Required | Description | Default |
|---|---|---|---|
| slide | No | 1-based slide number to change | |
| device | No | Screenshot size: iPhone 6.9" (1320x2868), 6.5" (1284x2778), iPad 13" (2064x2752), or the optional iPhone Duo inner (2007x2853) / outer (1398x2034) displays. iPad and Duo need the app's real iPad / Duo simulator screenshots uploaded first (replace=false); iPhone-only apps should skip iPad. Duo is export-only: App Store Connect's API doesn't accept Duo uploads yet, so send_to_app_store refuses Duo sets. | |
| layout | No | ||
| opener | No | ||
| remove | No | ||
| set_id | Yes | set_id returned by design_set | |
| include | No | What to make: the screenshot set, screenshots + the App Store product page header (iOS 27), or only the header | screenshots |
| move_to | No | ||
| subline | No | ||
| headline | No | Wrap words in *stars* to color them | |
| screenshot | No | 1-based screenshot to show on this slide | |
| header_layout | No | Header visual: lifestyle photo, three phones, big icon, or a hand holding the phone | |
| header_subline | No | ||
| header_headline | No | App Store header headline (*stars* color words). No prices, URLs, platform names or #1 claims. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly=false, destructive=false and openWorld=true, so the safety profile is covered; the description adds real value beyond that by disclosing the side effect (previews are re-rendered) and the cost model (Free), which matters for deciding to iterate here repeatedly. It does not disclose whether edits are reversible, whether removal renumbers remaining slides, or whether re-render is synchronous — gaps that matter for a destructive=false but write-shaped tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two front-loaded sentences with no filler; the editable targets come first and the side effect/cost trail as a short addendum. The parenthetical lists and shorthand like 'header_*' are dense but each clause carries information, so nothing is wasted.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 14-parameter mutation tool with no output schema and no documentation of what is returned after a re-render, the description covers the main edit modes but leaves notable holes: how header-only edits interact with include, whether slide and header fields can be mixed in one call, and what happens to slide numbering after remove. It is adequate to attempt a call, not complete enough to predict the result.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is only 57% across 14 parameters, so the description has to carry weight. It does map several undocumented params to meaning (opener = 'opening shot', move_to = 'position', remove = 'remove it', device = 'device size', header_* = App Store header), but it never explains the layout enum values, the include modes, or whether the 'or'-separated edit modes are mutually exclusive or combinable in one call.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (change) and enumerates the editable surfaces: one slide and its parts, the opening shot, device size, or the App Store header (header_*). That makes it operationally distinct from read-only siblings like get_set and from design_set/export_set. It stops short of naming an alternative sibling explicitly, which keeps it out of 5 territory.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied by the enumeration of what can be edited, but there is no explicit when-to-use guidance, no statement of when to prefer design_set or upload_screenshots, and no stated prerequisites (e.g., a set must exist and be unlocked before editing). The agent must infer that 'Free' and 'Re-renders previews' make this a cheap iterative step.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
export_setExport PNGsAInspect
Render the unlocked set at exact App Store pixels without watermark and return download links (valid 7 days). Includes the product page header (3840x1646) and search-results image (3840x2560) when the set has a header.
| Name | Required | Description | Default |
|---|---|---|---|
| set_id | Yes | set_id returned by design_set |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare the safety profile (readOnlyHint=false, destructiveHint=false, openWorldHint=true), so the description need only add context. It does: no watermark, exact App Store pixels, link validity of 7 days, and conditional inclusion of header/search images when the set has a header. It stops short of stating auth/Permission needs or rate limits, keeping it at 4 rather than 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, front-loaded with the core action and outcome, then the qualifying conditional detail. Every clause (pixels, no watermark, link TTL, image dimensions) earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-parameter tool with no output schema, the description covers what is produced (download links with 7-day validity) and the exact deliverables (3840x1646 header, 3840x2560 search image). Nothing an agent needs to invoke it correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and the single set_id param is documented as 'set_id returned by design_set.' The description adds no syntax or meaning beyond the schema, so the baseline of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and outcome ('Render the unlocked set ... and return download links') with the exact resource and pixel fidelity, and the granted/unlocked scope cleanly separates it from design_set, get_set, and unlock_set. An agent immediately knows this is the export step.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase 'the unlocked set' implies the unlock_set prerequisite, which is useful context, but no alternatives (get_set, send_to_app_store) are named and there is no explicit when-to-use or when-not guidance. Usage is only implied.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_setGet a setBRead-onlyInspect
Current slides, unlock status and fresh preview images for a set.
| Name | Required | Description | Default |
|---|---|---|---|
| set_id | Yes | set_id returned by design_set |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, destructiveHint=false and openWorldHint=true, so the safety profile is covered. The description adds the useful fact that returned data is live/current state including unlock status and regenerated previews, but says nothing about freshness latency, pagination, or failure modes.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single tight sentence with the payload description front-loaded and zero filler. It is a noun phrase rather than a full sentence, which slightly blurs the action being performed.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description must characterize the return value, and it does name the three returned elements. Combined with the annotation-covered read-only profile, an agent has enough to call it correctly, though richer detail would help.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Only one parameter and schema description coverage is 100%, so the schema carries the semantics. The description adds nothing about set_id beyond what the schema already states; baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Names the resource (a set) and enumerates exactly what is fetched: current slides, unlock status, and fresh preview images. That is specific enough to separate it from edit_set, unlock_set, and export_set, though it never uses an explicit retrieval verb.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no statement of when to call this versus siblings such as list_apps or design_set, and no prerequisites or follow-up guidance. Only the implicit read-a-set use case hints at context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_upload_linkGet an upload linkAInspect
Best way to upload screenshots from files on disk: returns a one-time URL (valid 30 min) to POST the image files to with curl (multipart field 'files', up to 10 per request). Use this instead of upload_screenshots when you have a shell, so large images don't pass through the conversation.
| Name | Required | Description | Default |
|---|---|---|---|
| app_id | Yes | app_id from list_apps / add_app | |
| replace | No | First upload clears the app's old screenshots. Use false to add iPad / iPhone Duo captures next to the iPhone ones. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Adds meaningful behavior beyond the annotations: the URL is one-time, valid for 30 minutes, accepts multipart field 'files', and caps at 10 files per request. It doesn't cover auth requirements or what happens on expiry, but it substantially enriches the safety profile already supplied by readOnlyHint=false, destructiveHint=false, and openWorldHint=true.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, front-loaded with the core action and return value, followed by the routing guidance. Every clause carries useful information with no repetition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple two-parameter tool with no output schema, the description covers what is returned, how long it is valid, how to use it, and when to prefer it. Minor gaps around auth headers and failure modes remain, but the essential calling context is present.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so app_id and replace are already documented in the input schema. The description adds operational detail about the URL's 'files' field and the 10-file limit, but does not clarify the tool's own input parameters beyond that. Baseline 3 is appropriate when the schema does the heavy lifting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: returns a one-time upload URL. It explicitly distinguishes itself from the sibling upload_screenshots by naming the alternative and the condition that selects it, so an agent can route correctly without opening either schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives explicit when-to-use guidance: prefer this over upload_screenshots when a shell is available, so large images don't pass through the conversation. The alternative and the routing condition are named directly.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_appsList appsBRead-onlyInspect
The user's apps in Agent C, with how many screenshots each has uploaded.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, destructiveHint=false, and openWorldHint=true, so the safety profile is covered. The description adds useful return-value context by noting each app comes with its screenshot count, but says nothing about pagination, sorting, or result size for an open-world read.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single compact sentence with no filler, front-loading the resource and then the included metric. Slightly under-specified rather than padded, which is the right failure mode for a zero-arg list tool.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description is the only source of return-value information, and it does disclose the key payload (apps plus per-app screenshot counts). However it omits ordering, pagination, and errors, which matters since the annotation marks this as an open-world read.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters, so there is no parameter surface for the description to compensate for. Baseline 4 applies; the description correctly avoids inventing parameters.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Identifies the resource (the user's apps in Agent C) and a notable included field (screenshot count per app), but it is a noun phrase without a verb, so the act of listing is only implied by the tool name. It is distinguishable from siblings like add_app or upload_screenshots, but the scope (all apps? paginated?) is unstated.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No indication of when to call this versus sibling tools such as get_set or design_set, and no prerequisites or context are given. The agent must infer usage entirely from the name and the resource description.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
send_to_app_storeSend to App Store ConnectADestructiveInspect
Upload the unlocked set into the app's editable version in App Store Connect, replacing that language's screenshots for this device size (not iPhone Duo — export_set those). Never submits for review. Requires the user to have connected App Store Connect in Agent C. If the app has no editable version, ask the user, then call with create_version=true.
| Name | Required | Description | Default |
|---|---|---|---|
| locale | No | en-US | |
| set_id | Yes | set_id returned by design_set | |
| create_version | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already flag destructiveHint=true and openWorldHint=true; the description goes further by specifying exactly what is destroyed (that language's screenshots for this device size are replaced), that it never submits for review, and that an external App Store Connect connection is required. That is real context beyond the structured hints.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Four sentences, each carrying distinct load: action and scope first, exclusion second, scope limit third, prerequisites fourth. No restating of the title or filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive, open-world mutation with no output schema, the description covers action, scope, exclusion, prerequisites, and the create_version fallback path. It doesn't say what a successful or partial upload returns (screenshot counts, failures), which would help an agent interpret the result.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is only 33%, so the description must compensate. It explains create_version behaviorally (only after asking the user and finding no editable version) and implies locale via 'that language's screenshots'; set_id is covered by the schema itself. Locale's default and matching rules remain slightly underspecified.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: uploads the unlocked set into the app's editable App Store Connect version, replacing that locale's screenshots for the current device size. It also names the case it is not for (iPhone Duo -> export_set), so an agent can separate it from export_set without opening any schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives explicit preconditions (user must have connected App Store Connect), a branch instruction (if no editable version, ask the user then retry with create_version=true), and one exclusion (not iPhone Duo). It does not clarify its relationship to the sibling upload_screenshots, so the boundary against every alternative isn't fully drawn.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
unlock_setUnlock a setAInspect
Unlock clean, full-resolution files for a set. Uses a free unlock if the user has one; otherwise returns a $9.99 Stripe checkout link the USER must open and pay. Studio subscribers are already unlocked. Ask the user before calling.
| Name | Required | Description | Default |
|---|---|---|---|
| set_id | Yes | set_id returned by design_set |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations (readOnlyHint=false, openWorldHint=true, destructiveHint=false), it discloses the free-unlock-first logic, that the agent returns a $9.99 Stripe link the USER must personally open and pay, and that Studio subscribers are already unlocked. It also mandates user confirmation, which is essential behavioral context for an open-world paid action.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences, each carrying distinct information, with the action and outcome front-loaded and the consent requirement placed last as a directive. No filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description covers both possible outcomes (immediate unlock vs. returned checkout link) and the subscriber bypass, so an agent knows what it will get back and what to do next. Nothing needed to invoke this correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and there is a single required parameter already documented as 'set_id returned by design_set'. The description adds no parameter detail, which is the expected baseline when the schema does the work.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource ('Unlock clean, full-resolution files for a set') and pins down exactly what unlocking produces. It is immediately distinguishable from siblings like design_set, edit_set, and export_set.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives clear context for use: try a free unlock if available, otherwise the paid checkout path, and 'Ask the user before calling' sets the consent gate. It does not name alternative tools, but no sibling competes for this action, so the guidance is effectively complete.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
upload_screenshotsUpload screenshotsAInspect
Upload 1-10 raw screenshots of the app (plain captures of the real UI, ideally 4-10, in the order you'd like them considered). Each item is base64 image data (PNG/JPEG) or a public https URL. By default replaces the app's screenshot library — pass replace=false when adding iPad or iPhone Duo captures next to the iPhone ones.
| Name | Required | Description | Default |
|---|---|---|---|
| app_id | Yes | app_id from list_apps / add_app | |
| images | Yes | ||
| replace | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses the most important behavioral fact — that the call overwrites the app's existing screenshot library unless replace=false — which is exactly the kind of side effect an agent must know. However, this overwrite-by-default behavior conflicts with the annotation destructiveHint=false, producing contradictory safety signals, and nothing is said about validation failures, size limits, or fetch behavior for remote https URLs.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences, each front-loaded with the most decision-relevant fact: count/ordering first, payload format second, the destructive default last. No filler and no restatement of the title.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 3-parameter mutation with no output schema, the description covers the essentials an agent needs to call it safely: payload forms, ordering, count range, and overwrite semantics. It would be stronger if it mentioned what is returned (e.g., resulting screenshot IDs) or limits on remote URL fetching.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is only 33% (only app_id is documented), so the description has to carry images and replace, and it does: item count 1-10 with an ideal 4-10, ordering semantics, accepted formats (base64 PNG/JPEG or public https URL), and the exact meaning of replace=true/false with a concrete use case. Only minor gaps remain (per-item size limits, mixed URL/base64 allowed?).
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Specific verb + resource + target ('Upload 1-10 raw screenshots of the app'), with the accepted payload shapes spelled out (base64 PNG/JPEG or public https URL). It does not explicitly distinguish itself from siblings like get_upload_link or send_to_app_store, so an agent must infer the boundary.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives actionable conditions: default replaces the library, pass replace=false when adding iPad or iPhone Duo captures alongside iPhone ones, and aim for 4-10 plain captures in the desired order. It lacks an explicit 'when not to use this vs X' statement against siblings, but the context needed to choose correct parameter values is present.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
3 tool updates
- Changed
design_set2 fields changed- added
Input schema / properties / device / descriptionAdded value: +"Screenshot size: iPhone 6.9\" (1320x2868), 6.5\" (1284x2778), iPad 13\" (2064x2752), or the optional iPhone Duo inner (2007x2853) / outer (1398x2034) displays. iPad and Duo need the app's real iPad / Duo simulator screenshots uploaded first (replace=false); iPhone-only apps should skip iPad. Duo is export-only: App Store Connect's API doesn't accept Duo uploads yet, so send_to_app_store refuses Duo sets." - changed
Input schema / properties / device / enumPrevious value: -[ - "iphone_69", - "iphone_65", - "ipad_13" -]New value: +[ + "iphone_69", + "iphone_65", + "ipad_13", + "iphone_duo_inner", + "iphone_duo_outer" +]
- Changed
edit_set2 fields changed- added
Input schema / properties / device / descriptionAdded value: +"Screenshot size: iPhone 6.9\" (1320x2868), 6.5\" (1284x2778), iPad 13\" (2064x2752), or the optional iPhone Duo inner (2007x2853) / outer (1398x2034) displays. iPad and Duo need the app's real iPad / Duo simulator screenshots uploaded first (replace=false); iPhone-only apps should skip iPad. Duo is export-only: App Store Connect's API doesn't accept Duo uploads yet, so send_to_app_store refuses Duo sets." - changed
Input schema / properties / device / enumPrevious value: -[ - "iphone_69", - "iphone_65", - "ipad_13" -]New value: +[ + "iphone_69", + "iphone_65", + "ipad_13", + "iphone_duo_inner", + "iphone_duo_outer" +]
- Changed
get_upload_link1 field changed- changed
Input schema / properties / replace / descriptionPrevious value: -"First upload clears the app's old screenshots"New value: +"First upload clears the app's old screenshots. Use false to add iPad / iPhone Duo captures next to the iPhone ones."
2 tool updates
- Changed
design_set1 field changed- added
Input schema / properties / includeAdded value: +{ + "default": "screenshots", + "description": "What to make: the screenshot set, screenshots + the App Store product page header (iOS 27), or only the header", + "enum": [ + "screenshots", + "both", + "header" + ], + "type": "string" +}
- Changed
edit_set4 fields changed- added
Input schema / properties / header_headlineAdded value: +{ + "description": "App Store header headline (*stars* color words). No prices, URLs, platform names or #1 claims.", + "type": "string" +} - added
Input schema / properties / header_layoutAdded value: +{ + "description": "Header visual: lifestyle photo, three phones, big icon, or a hand holding the phone", + "enum": [ + "photo", + "phones", + "icon", + "hand" + ], + "type": "string" +} - added
Input schema / properties / header_sublineAdded value: +{ + "type": "string" +} - added
Input schema / properties / includeAdded value: +{ + "default": "screenshots", + "description": "What to make: the screenshot set, screenshots + the App Store product page header (iOS 27), or only the header", + "enum": [ + "screenshots", + "both", + "header" + ], + "type": "string" +}
10 tool updates
- First observed
add_app - First observed
design_set - First observed
edit_set - First observed
export_set - First observed
get_set - First observed
get_upload_link - First observed
list_apps - First observed
send_to_app_store - First observed
unlock_set - First observed
upload_screenshots
Related MCP Connectors
App Store and Google Play screenshot generator: design, localize into 41 languages, render, upload.
Design App Store and Google Play screenshots with your AI agent in the AppScreenStudio editor.
Create and edit app store screenshot projects with AI, then export in the web editor.
Generate designed, localized App Store screenshot sets from your raw app captures.
Related MCP Servers
- AlicenseNot gradedqualityCmaintenanceEnables agents to design App Store and Google Play screenshot sets from templates or simulator captures, translate captions into 41 languages with automatic text fitting, render the pixels, and publish straight to App Store Connect or Google Play.1MIT
- FlicenseAqualityCmaintenanceGenerates beautiful App Store and Play Store screenshots by inserting app images into iPhone/iPad mockup frames with customizable text overlays and gradient backgrounds. Supports multiple device types and batch generation with both free and pro subscription tiers.8-

MagicScreenshotsofficial
AlicenseNot gradedqualityCmaintenanceEnables AI agents to search a daily-updated library of real App Store screenshots, preview videos and listing history from thousands of top apps by category, chart, look or app name. It also generates and localizes the user's own App Store screenshots at App Store resolution, restyled after any app in the library.MIT- AlicenseAqualityBmaintenanceAn MCP server that turns raw app screenshots into polished, pixel-perfect store listing visuals with device frames, benefit-driven headlines, brand colors, and exact store dimensions for iOS and Android.6376 npm26MIT
Glama MCP Gateway
Add one secure layer between your agents and this server.