appdesigns App Store screenshots
Server Details
App Store and Google Play screenshots MCP: your agent captures the app, you edit and export. Free.
- Status
- Healthy
- Uptime
- 100.0% over 42 days
- Last Tested
- Transport
- Streamable HTTP · MCP 2025-11-25
- URL
- Repository
- haider-nawaz/app-store-screenshots-mcp
- GitHub Stars
- 0
- Server Listing
- appdesigns
- ChatGPT
- appdesigns
- Claude
- –
TDQS
Scored across 19 tools
Most tools have a clearly distinct purpose, but there are three creation paths (create_design vs create_project vs make_screenshot_set) and three update paths (edit_asset vs update_design vs update_project) whose boundaries overlap. The very detailed conditional descriptions do a good job separating them by context (chat attachments vs coding agent vs self-drawn art), but the fact that edit_asset can fully supersede update_design/update_project creates some potential for misselection.
Every tool follows a clean snake_case verb_noun pattern (create_design, get_asset, list_projects, update_project, export_asset, etc.). Verbs are used consistently (create/get/update/list/search/save/translate) with no camelCase or stylistic mixing.
19 tools is on the heavier side but the domain is genuinely broad, spanning design art, screenshot sets, exports, localization, gallery submission and account management. Several two-step workflows (create_project/finish_project, export_asset/get_export) inflate the count, yet each tool still appears to earn its place.
The surface covers creation, reading, editing, export, translation, saving, featuring and guidance across the full lifecycle of store screenshots and marketing art. The main gap is the absence of any delete/remove tool, though users can delete assets in the editor, so this is a minor shortfall.
Available Tools
19 toolscreate_designCreate a listing art designAInspect
Use this when you have designed art for an app yourself and the user should get it as an editable project: App Store listing art that loops as a video (a product page header, search result, or In-App Event card or page), or a still marketing image (an X, LinkedIn or Instagram post, a link preview, a Product Hunt image, a 16:9 image, Google Play's feature graphic). Takes 1 to 4 variants (directions for the user to choose from), each a background and layers: art you draw as SVG, library pieces, the app's icon, text, and phone frames showing the app (an iPhone, the iPhone Duo open from behind and from the front...), with moves and a loop on listing art. Checks everything and returns a preview image of each variant, warnings, a design_handle for update_design, and open_url, which opens the design in the appdesigns editor, where the user keeps a direction, tweaks any layer, saves it and exports it. Nothing is public and no account is needed. The design waits 72 hours to be opened and saved.
| Name | Required | Description | Default |
|---|---|---|---|
| asset | No | Listing art: header (3840x1646), search_result (3840x2560), event_card (3840x2160) or event_page (2160x3840). Stills: x_post (1600x900), linkedin_post (1200x627), link_preview (1200x630), instagram_square (1080x1080), instagram_portrait (1080x1350), instagram_tall (1080x1440), product_hunt (1270x760), wide_image (1920x1080), play_feature_graphic (1024x500). | header |
| animated | No | false for a still image (the user asked for one): the moves are kept with motion turned off, so the Motion toggle brings them back. | |
| variants | Yes | The directions, each a whole design. The first is the one you would pick. | |
| project_id | No | A project_id from list_projects (the user signed in): the new asset is saved into that saved project of theirs. Use it, not same_project_as, to add to something the user already saved. | |
| project_name | Yes | The app's name. It becomes the project name in the user's appdesigns library. | |
| app_store_url | No | The app's App Store link, if it is on the App Store: the editor's preview phone then shows its real name and icon, app_icon layers use its icon, and a phone layer can show one of its App Store screenshots. | |
| same_project_as | No | The project_handle or design_handle of an earlier asset from this conversation (screenshots, a header...). The user's save then files this one in the same project, once they have saved that one. | |
| screenshots_from | No | The project_handle of a screenshot set you made with create_project in this conversation (finished, not yet saved): a phone layer's screenshot n then shows that set's n-th capture, instead of an App Store screenshot. No sign-in needed. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations cover the mutation profile (readOnly=false, destructive=false, openWorld=true, idempotent=false), but the description adds substantial non-annotation behavior: nothing is public, no account is needed, the design waits 72 hours to be opened and saved, and it returns a preview image, warnings, a design_handle, and open_url. These lifecycle and side-effect details go well beyond the structured fields.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The usage condition is front-loaded, but the body is a dense run-on sentence heavy with nested parentheticals enumerating asset types and layer kinds. Much of it earns its place (return values, editor handoff, 72-hour window), yet the packing makes it harder to scan than necessary.
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 complex, non-idempotent creation tool with no output schema, the description compensates by naming the return contents (preview image per variant, warnings, design_handle, open_url) and the post-creation editor workflow. It is largely complete, though the relationship to create_project/make_screenshot_set could be sharper.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents all 8 parameters in depth. The description adds only marginal param meaning (variants are directions, design_handle feeds update_design, open_url opens the editor), 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?
The description opens with a specific verb+resource and scope: creating app listing art designs (looping video headers, search results, event cards, and still marketing images) as an editable project. It distinguishes itself from siblings by naming create_project's screenshot sets, update_design for later edits, and the editor flow, so an agent can route correctly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives a clear trigger ("use this when you have designed art for an app yourself and the user should get it as an editable project") and points to update_design for subsequent tweaks. It does not explicitly state when NOT to use it versus create_project or make_screenshot_set, so no exclusion guidance is present.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_projectCreate a screenshot projectAInspect
Use this when you can run shell commands on the user's machine and have their app's screenshots as local files (a coding agent). Not for a chat without a terminal, such as ChatGPT, where the upload command cannot run. Starts a screenshot set: 1 to 6 screenshots in store order, each with a screen name and a headline. Returns a project_handle and one upload command (bash and PowerShell forms) that sends every screenshot straight to storage; run it once, then call finish_project with the handle. Upload and call finish_project within 1 hour (an unfinished project lapses then); a finished one waits 72 hours to be opened. Nothing is public and no account is needed; the user saves the set to their account when they open the link finish_project returns.
| Name | Required | Description | Default |
|---|---|---|---|
| fold | No | iPhone Duo only: inner-open (Unfolded, the open inner display), outer-closed (Cover, the folded cover display) or outer-open (Open back, the open phone from behind, showing its cover display). The editor's names work too. Leave it out for the display the canvas is. | |
| store | No | Which store the set is for. | app_store |
| device | No | A device id from list_devices. Defaults to iphone-17-pro-max for the App Store and pixel-11-pro for Google Play. | |
| screens | Yes | One entry per screenshot, in the order the store should show them. The first sells the app. | |
| project_id | No | A project_id from list_projects (the user signed in): the new asset is saved into that saved project of theirs. Use it, not same_project_as, to add to something the user already saved. | |
| canvas_size | No | A canvas size from list_devices, as WIDTHxHEIGHT, portrait or landscape (2868x1320 for a landscape iPhone set). Leave it out and finish_project takes the store size the screenshots are (a landscape capture makes a landscape set), else the store default (1320x2868 for iPhone, 2048x2732 for iPad, 2007x2853 for iPhone Duo, 1080x1920 for Play). | |
| frame_color | No | A colour id of that device from list_devices. Leave it out to pick one that stands out from the background. | |
| orientation | No | Which way up the set is, when canvas_size does not say: landscape for an app that runs in landscape (most games), and the phone is drawn on its side. Leave it out to follow the screenshots. | |
| project_name | Yes | The app's name. It becomes the project name in the user's appdesigns library. | |
| same_project_as | No | The project_handle or design_handle of an earlier asset from this conversation (screenshots, a header...). The user's save then files this one in the same project, once they have saved that one. | |
| background_color | No | #RRGGBB. Use the app's brand or accent colour if you can find it in the code. Leave it out for a neutral light background. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only declare the generic profile (not read-only, not idempotent, not destructive), but the description adds real lifecycle facts: upload and finish within 1 hour or the project lapses, a finished project waits 72 hours to be opened, nothing is public, no account is needed, and the user saves the set on open. This is exactly the kind of context annotations cannot carry.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loads the when-to-use condition before any mechanics, and nearly every sentence carries information (precondition, exclusion, payload shape, return value, timing, privacy). It is dense rather than bloated, though the long single paragraph could be split for scanability.
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 an 11-parameter, no-output-schema tool, the description covers what an agent needs: what the tool produces (project_handle and upload command), the mandatory follow-up (finish_project), and the time budget for each stage. Nothing essential to a correct invocation is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents all 11 parameters thoroughly, including enums, defaults, and fallback behavior. The description adds little parameter-level detail beyond restating '1 to 6 screenshots in store order, each with a screen name and a headline', 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: it 'starts a screenshot set' of 1-6 screens, and names its return artifacts (project_handle plus one upload command). It is clearly distinguishable from siblings like finish_project, make_screenshot_set, and create_design.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives an explicit precondition ('when you can run shell commands on the user's machine and have their app's screenshots as local files') and an explicit exclusion ('Not for a chat without a terminal, such as ChatGPT, where the upload command cannot run'). It also routes the agent forward: run the upload command once, then call finish_project with the handle.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
edit_assetChange an assetADestructiveInspect
Use this to change something, after get_asset: one the user saved (asset_id) or a set or design you made in this conversation (handle). Rewrite or restyle text, move, resize or recolour layers, add art you draw as SVG, a library piece (search_library), a phone frame or new text, remove or reorder layers, move or resize the phone or change its model, colour and fold, change the background or the loop, turn the whole set landscape or portrait or give it another size of the same asset (set_canvas), rename, duplicate, reorder or remove screens. Send only what changes, with the revision get_asset returned; the asset changes at once (like an edit in the editor) and the reply has the new revision, previews of the changed screens and warnings. A set or design changed this way keeps changing here: update_project and update_design no longer apply to it. With asset_id (something the user saved) it needs the user signed in to appdesigns (in Claude Code type /mcp, pick appdesigns and choose Authenticate (or run claude mcp login appdesigns in a separate terminal), in Codex run codex mcp login appdesigns; other agents open the sign-in page themselves); with handle (a set or design you made in this conversation, not saved yet) it needs no sign-in.
| Name | Required | Description | Default |
|---|---|---|---|
| handle | No | Instead of asset_id: the project_handle create_project returned or the design_handle create_design returned, for something you made in this conversation that the user has not saved yet. Needs no sign-in. | |
| changes | Yes | Applied in order, all or none. Layer positions count from 0 at the bottom of the screen's layers list, the phone included. | |
| asset_id | No | The asset_id list_projects returned. | |
| revision | Yes | The revision get_asset (or the last edit_asset) returned. If the asset changed since, nothing changes and you read it again. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true, idempotentHint=false and readOnlyHint=false, so the safety profile is covered. The description adds substantial context beyond that: the asset mutates immediately, the reply carries the new revision, previews of changed screens and warnings, the revision guard means a stale revision causes no change, and edits are applied atomically ("all or none").
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?
It is front-loaded well with the core purpose and the asset_id/handle fork, but the middle collapses a very large op surface into one sprawling run-on sentence, making it hard to scan. The content is largely non-redundant, but the wall-of-text form costs readability.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 4-parameter mutation tool with no output schema, the description covers everything an agent needs: when to call it, auth per target type, revision/conflict semantics, atomicity, the shape of the reply, and the relationship to update_project/update_design. Nothing material is left unstated.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already carries most parameter meaning and a baseline of 3 applies. The description nonetheless adds semantics the schema does not: "Send only what changes, with the revision get_asset returned" clarifies partial-update and revision-chaining behavior, and the handle/asset_id distinction is framed as a usage choice rather than a type.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb+resource ("change something") and immediately scopes it to two targets: a saved asset via asset_id or an in-conversation set/design via handle. It then enumerates concrete capabilities (restyle text, move/resize layers, add SVG art, reorder screens, set_canvas) and explicitly distinguishes itself from siblings by stating that update_project and update_design no longer apply once an asset is edited this way.
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 states the prerequisite ("after get_asset"), the two usage modes with their respective auth requirements, and the routing rule against alternatives (update_project/update_design stop applying). Sign-in instructions are spelled out per agent (Claude Code, Codex, other agents), leaving little to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
export_assetExport an asset's filesAInspect
Use this when the user wants the finished files (to upload to App Store Connect or the Play Console, or to use elsewhere) of something they saved (asset_id) or something you made in this conversation (handle). The files are made by the appdesigns editor in the user's browser, the same pixels its Export saves: open_url opens it there and makes them (a PNG per screen, and an MP4 for a screen whose loop is on), then get_export with export_id gives a command that downloads them. With asset_id (something the user saved) it needs the user signed in to appdesigns (in Claude Code type /mcp, pick appdesigns and choose Authenticate (or run claude mcp login appdesigns in a separate terminal), in Codex run codex mcp login appdesigns; other agents open the sign-in page themselves); with handle (a set or design you made in this conversation, not saved yet) it needs no sign-in.
| Name | Required | Description | Default |
|---|---|---|---|
| format | No | auto: an MP4 for each screen whose loop is on (an animated listing asset), a PNG for every other screen. png: stills only. | auto |
| handle | No | Instead of asset_id: the project_handle create_project returned or the design_handle create_design returned, for something you made in this conversation that the user has not saved yet. Needs no sign-in. | |
| asset_id | No | The asset_id list_projects returned. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses behavior well beyond the annotations: files are rendered by the appdesigns editor in the user's browser (the same pixels its Export saves), open_url produces them, and get_export with the returned export_id yields a download command. It also spells out the auth requirement in detail for asset_id (sign-in via /mcp, `claude mcp login`, or `codex mcp login`) versus no sign-in for handle. This is rich, actionable context for a non-idempotent operation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The content is front-loaded with the primary use case, but it is delivered as one dense paragraph of nested parentheticals, which makes the open_url/get_export workflow hard to parse. The information is mostly justified by the tool's multi-step nature, yet the structure could be split into clearer sentences without losing content.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
There is no output schema, so the description carries the burden of explaining the return flow, and it does so by pointing to open_url (generation) and get_export (download command). Auth requirements and the two input paths are covered. The one gap is that it never explicitly states what export_asset itself returns (e.g., an export_id/URL) beyond implying it through the follow-up call.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents format, handle, and asset_id, including the enum and the handle/asset_id trade-off. The description reinforces the meaning of asset_id (something saved) and handle (something made in-conversation), but adds little syntax or format detail beyond what the schema provides, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific verb and resource: it exports the finished files (a PNG per screen, an MP4 for looping screens) of a saved asset or an in-conversation handle. It distinguishes itself from the get_export sibling by describing the two-step flow where open_url generates the files and get_export downloads them. The core purpose is clear, though it is buried inside a long narrative sentence rather than stated up front.
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 an explicit trigger ("when the user wants the finished files... to upload to App Store Connect or the Play Console") and clearly separates the two input modes: asset_id for something saved vs handle for something made in-conversation and not yet saved. It does not name an explicit alternative tool to avoid, but the asset_id/handle routing is precise enough to select the right mode.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
feature_appFeature the app in the appdesigns galleryADestructiveIdempotentInspect
Use this when the user wants their app in the appdesigns gallery (appdesigns.click/apps): a screenshot set they saved (asset_id, from save_to_account or list_projects) is sent for review as a template other makers start from, listed with the app's icon, name and store link, so other makers get inspiration and the user gets seen. A person reviews it within 24 to 48 hours and the user gets an email when it is live. The set needs at least 3 screens, an App Store or Google Play link, and an icon: taken from the App Store link (Apple's public lookup), else the project's icon in appdesigns, else icon. Ask the user before calling it: the listing is public. Needs the user signed in to appdesigns; a call without it fails asking for sign-in, and then the user signs in (in Claude Code type /mcp, pick appdesigns and choose Authenticate (or run claude mcp login appdesigns in a separate terminal), in Codex run codex mcp login appdesigns; other agents open the sign-in page themselves).
| Name | Required | Description | Default |
|---|---|---|---|
| icon | No | An https URL of the app icon (square; on appdesigns.click, Supabase storage or Apple's image CDN). Leave it out: the icon comes from the App Store link, else the project's icon. | |
| app_name | Yes | The app's name as the store shows it. | |
| asset_id | Yes | The asset_id list_projects returned. | |
| x_handle | No | The maker's X handle, if they want to be tagged when the listing is shared on X (a handle or a profile link). | |
| description | No | One line about the app, shown on its gallery page. | |
| app_store_url | No | The app's App Store page, https://apps.apple.com/... (this or play_store_url, or both). | |
| play_store_url | No | The app's Google Play page, https://play.google.com/... |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only give generic flags (destructiveHint=true, openWorldHint=true, idempotentHint=true). The description supplies the actual behavior those flags imply: the listing becomes public, a human reviews it in 24-48 hours, an email is sent when live, and the app is discoverable by other makers. It also documents the icon fallback chain and auth requirements with per-agent sign-in remediation, which annotations cannot express.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The when-to-use trigger and the public-listing warning are front-loaded, and nearly every sentence carries operational content. It loses a point for density: the sign-in remediation is a single heavily nested sentence with two parentheticals, which is harder to parse than the rest of the description.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description carries the return-value burden and does so: it tells the agent the submission is reviewed and confirmed by email rather than returning immediately. Combined with asset requirements, auth handling, and consent guidance, an agent has everything needed to decide and call correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3, but the description adds provenance the schema lacks — that asset_id originates from save_to_account or list_projects — and restates the icon derivation order (App Store lookup, then project icon, then icon.param) as a single coherent rule. It adds context beyond field-level docs without introducing new syntax.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a precise trigger ('when the user wants their app in the appdesigns gallery') and states the concrete effect: a saved screenshot set is submitted for review and published as a browsable template. This distinguishes it unambiguously from siblings like make_screenshot_set, save_to_account, and edit_asset, which manipulate assets rather than submit them for public listing.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It names the source tools for the required asset_id (save_to_account or list_projects), states the preconditions (3+ screens, a store link, an icon), and adds an explicit behavioral rule: 'Ask the user before calling it: the listing is public.' It also covers the when-not case by explaining what happens on an unauthenticated call and how to remedy it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
finish_projectFinish a screenshot projectADestructiveInspect
Checks that every screenshot of a project was uploaded and is a real PNG or JPEG, then returns the link that opens the set in the appdesigns editor, where the user saves it to their account and can edit and export it. Calling it again returns a fresh link and retires the previous one.
| Name | Required | Description | Default |
|---|---|---|---|
| project_handle | Yes | The project_handle create_project returned. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description explains behavior annotations cannot: calling again yields a fresh link and retires the previous one, which directly accounts for idempotentHint=false and destructiveHint=true. It stops short of describing auth requirements, failure behavior on invalid files, or rate limits.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two tight sentences: the validation behavior is front-loaded, followed by the link lifecycle. Every clause earns its place, and the re-call/retirement caveat is genuinely load-bearing rather than filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description correctly explains the return value (the editor link) and its lifecycle. It covers validation, return, and non-idempotency well, but omits what happens when validation fails, which an agent calling a checker would want to know.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and the single project_handle parameter is fully documented there (including that create_project returned it), so the description adds no parameter detail. Baseline 3 is appropriate when the schema carries the parameter burden.
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 specific verbs and resources: it validates that every project screenshot was uploaded and is a real PNG/JPEG, then returns an editor link. This is clearly distinct from siblings like make_screenshot_set or save_to_account, though it never names those siblings to sharpen the contrast.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is only implied – an agent infers this is the finalization step after uploading screenshots, and that the returned link is then saved via save_to_account, but no explicit when-to-use or when-not-to-use guidance or alternative routing is given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_assetRead one assetARead-onlyIdempotentInspect
Use this before changing an asset with edit_asset, or when the user asks what one looks like: one the user saved (asset_id) or a set or design you made in this conversation (handle). Returns its screens, each with its background, its layers bottom first (text, pictures and the phone, each with an id, a position as a share of the canvas and its style) and its loop if it is animated, plus warnings about what may look off, and a preview image of each screen. Also returns the revision edit_asset needs. With asset_id (something the user saved) it needs the user signed in to appdesigns (in Claude Code type /mcp, pick appdesigns and choose Authenticate (or run claude mcp login appdesigns in a separate terminal), in Codex run codex mcp login appdesigns; other agents open the sign-in page themselves); with handle (a set or design you made in this conversation, not saved yet) it needs no sign-in. Read-only.
| Name | Required | Description | Default |
|---|---|---|---|
| handle | No | Instead of asset_id: the project_handle create_project returned or the design_handle create_design returned, for something you made in this conversation that the user has not saved yet. Needs no sign-in. | |
| asset_id | No | The asset_id list_projects returned. | |
| previews | No | Which screens to preview, from 1. Default: all of them. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare read-only/idempotent/non-destructive, but the description adds substantive behavioral context beyond them: the auth dance for asset_id versus none for handle, and the fact that the returned revision is the token edit_asset requires. That is genuinely useful operational detail.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with usage, which is good, but the body is one sprawling sentence with deeply nested parentheticals (auth instructions inside a clause about asset_id) that is dense and hard to parse. Content earns its place, but the packaging is not tight.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
There is no output schema, so the description must carry return-value semantics — and it does, detailing screens, layers, styles, loops, warnings, previews and the revision field. Combined with full auth guidance, an agent has everything needed to call it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% so the baseline is 3, but the description adds meaning: it explains that asset_id is a user-saved object needing sign-in while handle is an in-conversation artifact needing none, clarifying why two identifiers exist. It doesn't add much on the previews parameter beyond the schema's 'from 1, default all.'
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource (read one asset) and enumerates exactly what comes back: screens with backgrounds, layers, styles, loops, warnings, preview images, and the revision. It also names the sibling it complements (edit_asset), so the agent can place it without opening the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly says when to use it ('before changing an asset with edit_asset, or when the user asks what one looks like') and gives the two mutually exclusive access paths (asset_id vs handle) with their differing sign-in requirements. There is little left to infer.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_design_guideGet the design guideARead-onlyIdempotentInspect
Use this when the user wants App Store listing art (an animated product page header, a search result, In-App Event art) or a marketing image (a launch post for X, LinkedIn or Instagram, a link preview, a Play feature graphic) designed for their app and you will draw it yourself. Returns the appdesigns recipe for that asset as markdown: its size and what crops or covers it, the layer format create_design takes (phone frames included), the moves, the quality bar and the hand-off to the user. Read-only; changes nothing.
| Name | Required | Description | Default |
|---|---|---|---|
| asset | No | The asset, as create_design names it: header, search_result, event_card, event_page, x_post, linkedin_post, link_preview, instagram_square, instagram_portrait, instagram_tall, product_hunt, wide_image or play_feature_graphic. | header |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the safety profile (readOnlyHint, idempotentHint, destructiveHint false), and the description reinforces this with 'Read-only; changes nothing'. It goes further by disclosing the return payload in the absence of an output schema: size, cropping/covering, layer format, the moves, the quality bar and the hand-off to the user. It omits auth, freshness or rate-limit context, so not a full 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the usage condition, followed by the return contents, then a terse safety confirmation. The second sentence is long and list-heavy, but each clause describes a distinct part of the returned recipe and none is filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only, single-parameter lookup with no output schema, the description carries the full burden of explaining what comes back and does so thoroughly (size, crops, layer format with phone frames, moves, quality bar, hand-off). An agent has everything needed to call it correctly and to know what to do with 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 description coverage is 100% with a fully enumerated single parameter, so the baseline is 3. The description adds value by mapping human intents ('an animated product page header', 'a search result', 'In-App Event art', 'a launch post for X, LinkedIn or Instagram', 'a link preview', 'a Play feature graphic') onto the enum values, helping the agent pick the right asset string.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource — returns the appdesigns recipe for a named asset as markdown — and enumerates the asset classes it covers (App Store header, search result, In-App Event art, social/marketing images). It also distinguishes itself from the sibling create_design by describing the recipe as 'the layer format create_design takes', so an agent can tell the two apart 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 a clear triggering condition: use it when the user wants listing art or a marketing image designed 'and you will draw it yourself', i.e. the agent renders the asset rather than having a tool do it. It never states an explicit exclusion or names create_design as the follow-up call, so the routing is implied rather than spelled out.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_exportGet an export's filesADestructiveInspect
Use this after export_asset, once the user has the editor open: says whether the files are made, and when they are, returns them with a command that downloads them into a folder (bash and PowerShell) and where they go next in App Store Connect or the Play Console. The command's links work until the export expires (24 hours after export_asset); each call with the files ready makes new links and retires the earlier ones, so run the command from the latest call. Pass the handle too when you exported something you made in this conversation; then it needs no sign-in, else it needs the user signed in (in Claude Code type /mcp, pick appdesigns and choose Authenticate (or run claude mcp login appdesigns in a separate terminal), in Codex run codex mcp login appdesigns; other agents open the sign-in page themselves).
| Name | Required | Description | Default |
|---|---|---|---|
| handle | No | Instead of asset_id: the project_handle create_project returned or the design_handle create_design returned, for something you made in this conversation that the user has not saved yet. Needs no sign-in. | |
| export_id | Yes | The export_id export_asset returned. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations flag destructiveHint=true and idempotentHint=false for what sounds like a read, and the description explains exactly why: each call with files ready creates new links and retires earlier ones, so only the latest works. It also discloses the 24-hour expiry and the full sign-in story (which agents need auth, which commands to run). This is rich behavior well beyond the annotation surface.
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?
Information-dense and mostly earning its length, but delivered as one enormous semicolon-chained sentence with nested parentheticals, which hurts scanability. The usage trigger is front-loaded, and little could be cut without losing the auth and expiry semantics.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description carries the return-value burden and does so: readiness state, the returned download command in both bash and PowerShell, and where files go next in App Store Connect or the Play Console. Auth requirements and link expiry are covered, so an agent has everything needed to call and interpret it.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3, but the description adds real meaning: it explains that passing handle removes the sign-in requirement for conversation-created assets, and ties export_id to the 24-hour link lifetime. That conditional-auth behavior is not derivable from the schema alone.
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 function: it reports whether export files are ready and, if so, returns them alongside a download command plus next-step destinations. However, it opens with sequencing advice ("Use this after export_asset") rather than a clean statement of purpose, so the agent must infer the core function from the second clause. It does distinguish itself from export_asset by naming it and describing the follow-on role.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicit when-to-use: after export_asset, once the user has the editor open. It also handles the conditional case for the handle parameter (pass it for in-conversation exports) versus the sign-in path, and instructs running the command from the latest call. The alternative is named directly, leaving nothing to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_workflowGet the screenshot workflowARead-onlyIdempotentInspect
Use this when you are working in an app's code and can run commands (a coding agent) and the user wants App Store or Google Play screenshots of that app. Returns the full appdesigns recipe for one platform and store, as markdown: how to pick the screens, how to check and populate demo data with the user's consent, the exact capture commands (simulator or emulator, status bar, deep links), the caption rules, and the upload and hand-off steps. Not for a chat without a terminal, where the screenshots come as attachments instead. Read-only; changes nothing.
| Name | Required | Description | Default |
|---|---|---|---|
| store | No | Which store the screenshots are for. | app_store |
| platform | Yes | How the app is built: ios (Swift or Objective-C), android (Kotlin or Java), expo, react-native, flutter, or web (a web app or PWA). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and destructiveHint=false, so the safety profile is covered; the description reinforces it ('Read-only; changes nothing') and, more valuably, discloses the actual payload — capture commands, demo-data steps requiring user consent, caption rules, upload hand-off. It stops short of noting pagination/format edge cases, but for a read-only retrieval tool this is rich context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the triggering scenario, then the return payload, then the exclusion — a sensible order. It is dense and longer than most definitions, but each clause (consent requirement, deep links, hand-off) maps to distinct content in the returned recipe rather than 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?
With no output schema, the description must explain the return value, and it does so thoroughly by itemizing the recipe's sections. Combined with annotations covering safety, an agent has everything needed to decide and call correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and both parameters have enums with per-value documentation, so the schema carries the load. The description only implies the platform/store scoping via 'for one platform and store' and adds no format or interaction detail beyond the schema — the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Returns the full appdesigns recipe for one platform and store, as markdown') and enumerates the recipe's contents. It clearly distinguishes itself from the execution siblings (make_screenshot_set, replace_screenshots) by being the tool that hands back instructions rather than performing captures.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicit when-to-use ('working in an app's code and can run commands ... user wants App Store or Google Play screenshots') and explicit when-not ('Not for a chat without a terminal, where the screenshots come as attachments instead'). Nothing about routing is left to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_devicesList device framesARead-onlyIdempotentInspect
Use this when the user asks which devices, frame colours or canvas sizes appdesigns offers, or before choosing a non-default device for a screenshot set. Lists them for one store, with the defaults used when you leave them out. The App Store gets Apple devices only; Google Play gets Android phones. Read-only.
| Name | Required | Description | Default |
|---|---|---|---|
| store | No | Which store the screenshots are for. | app_store |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, destructiveHint=false and openWorldHint=false, so the safety profile is covered. The description adds real value beyond them by disclosing store-specific content (App Store = Apple devices only, Google Play = Android phones) and that omitted values fall back to defaults. The trailing 'Read-only' is redundant with the annotations but harmless.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences, front-loaded with the usage trigger and scoping constraint; nothing is wasted except the redundant 'Read-only' tail that the annotations already assert. Tight and easy to scan.
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, no-output-schema read tool, the description covers trigger conditions, store scoping, default behaviour, and the shape of what is returned. An agent has everything needed to call it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and the store enum already carries its own description and default. The description nonetheless adds meaning the enum cannot: what each store value actually yields in the result set, and that defaults apply when the parameter is omitted.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (List) and resource (device frames) plus the attributes returned: devices, frame colours and canvas sizes. It is easily distinguished from siblings such as list_projects and make_screenshot_set, which serve different resources.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives explicit triggering conditions: when the user asks which devices/colours/sizes exist, or before choosing a non-default device for a screenshot set. It stops short of naming an alternative tool or a when-not condition, but the context is clear enough to route correctly.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_projectsList the user's appdesigns projectsARead-onlyIdempotentInspect
Use this when the user wants to work on something they already made in appdesigns: change a screenshot set, a header or event art they saved, add to a project, or see what a project still lacks. Lists their projects (one per app) with every saved asset in each (asset_id, kind, canvas size, last edit) and what each project still needs. Needs the user signed in to appdesigns; a call without it fails asking for sign-in, and then the user signs in (in Claude Code type /mcp, pick appdesigns and choose Authenticate (or run claude mcp login appdesigns in a separate terminal), in Codex run codex mcp login appdesigns; other agents open the sign-in page themselves). Read-only.
| Name | Required | Description | Default |
|---|---|---|---|
| query | No | Only projects or assets whose name contains this, ignoring case. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint and destructiveHint=false, so the safety profile is covered. The description goes beyond them by disclosing the auth requirement and the exact failure mode (a call without sign-in fails asking for sign-in), with remediation steps. That is meaningful added context, though the agent-specific login commands are verbose.
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?
Usage intent is front-loaded, but the long parenthetical with per-agent login commands (`/mcp`, `claude mcp login`, `codex mcp login`) is disproportionate detail for a tool description and bloats an otherwise tidy two-sentence core.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description compensates by describing the return shape (per-project asset lists with id, kind, canvas size, last edit, and unmet needs). Combined with the explained auth failure path, it is largely complete for a read-only list tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and the single 'query' parameter is fully documented as a case-insensitive name filter, so the schema does the work. The description adds nothing about the parameter, which is the expected baseline when the schema is complete.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb+resource (lists projects, one per app) and enumerates exactly what comes back per asset (asset_id, kind, canvas size, last edit) plus what each project still needs. It is clearly distinct from mutation siblings like create_project or edit_asset, though it never names them explicitly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives a concrete when-to-use: the user wants to work on something already made in appdesigns (change a screenshot set, header/event art, add to a project, see what's missing). That contrasts implicitly with the create/edit siblings, but no alternative tool is named and no explicit when-not condition is given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
make_screenshot_setMake a screenshot set from attached screenshotsAInspect
Use this when the user has attached screenshots of their own app in this conversation and wants App Store or Google Play screenshots made from them: store listing images, framed screenshots or app mockups for the App Store or Play Store. Each screenshot is put in a real device frame on a background with the screen name and headline you write, at the store's exact size, and open_url opens the set as an editable project in the appdesigns editor. Takes 1 to 6 screenshots (PNG, JPEG, WebP or GIF, at most 20 MB each, all the same way up; landscape ones make a landscape App Store set) in store order, with one screens entry per screenshot in the same order. Each must be a raw capture of the app as the device shows it. Do not use it for images that already have a device frame, a background or marketing text (the user needs to attach the raw screenshots instead), to invent app screens that do not exist, or when nothing is attached (the user needs to attach screenshots first). The screenshots are stored privately so open_url can load them; it works for 72 hours or until the user saves the set to their account. Nothing is public and no account is needed to make the set.
| Name | Required | Description | Default |
|---|---|---|---|
| store | No | Which store the set is for: app_store for iPhone or iPad screenshots, play for Android. | app_store |
| device | No | A device id from list_devices. Defaults to iphone-17-pro-max for the App Store and pixel-11-pro for Google Play. | |
| screens | Yes | One entry per attached screenshot, in the same order as screenshots. The first sells the app. | |
| canvas_size | No | A canvas size from list_devices, as WIDTHxHEIGHT. Leave it out for the store default, or the store size the screenshots are; landscape screenshots make a landscape App Store set. | |
| frame_color | No | A colour id of that device from list_devices. Leave it out to pick one that stands out from the background. | |
| orientation | No | Which way up the set is, when canvas_size does not say: landscape for an app that runs in landscape (most games), and the phone is drawn on its side. Leave it out to follow the screenshots. | |
| screenshots | Yes | The screenshots the user attached, in store order, one per screens entry. | |
| project_name | Yes | The app's name. It becomes the project name in the user's appdesigns library. | |
| background_color | No | #RRGGBB, for example the app's brand colour as seen in the screenshots. Leave it out for a neutral light background. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only tell the agent this is a non-read-only, non-destructive, non-idempotent write. The description adds real lifecycle context the annotations cannot: private storage, a 72-hour retention window or until saved, no account required, and that open_url exposes an editable project. It stops short of saying what happens on repeat invocations or whether existing sets are overwritten, so not a perfect 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?
It is long but front-loaded with the core use case, and the dense constraint clause is information-rich rather than padded. There is mild redundancy in the closing privacy statements ('stored privately... Nothing is public and no account is needed'), which keeps it from a 5.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 9-parameter mutation tool with no output schema, the description covers inputs, ordering rules, storage/lifecycle behavior, the open_url follow-up, and the privacy model. An agent has everything needed to invoke it correctly and set user expectations.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3, but the description adds constraints absent from the schema: 1–6 screenshots, accepted formats (PNG/JPEG/WebP/GIF), a 20 MB per-file cap, uniform orientation, and strict store-order correspondence between screenshots and screens entries. These materially reduce invocation errors.
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 artifact ('make App Store or Google Play screenshots... store listing images, framed screenshots or app mockups') and scopes it to screenshots the user attached in this conversation. It is clearly distinguishable from siblings like replace_screenshots or create_project.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives explicit when-to-use (user attached their own raw app screenshots and wants store images) and when-not-to-use (already-framed images, inventing screens, nothing attached), and tells the agent what to do instead in each excluded case. This is textbook routing guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
replace_screenshotsPut new screenshots in a setADestructiveInspect
Use this when a set needs new screenshots in its phones: a recapture, a fixed screen, or a phone frame layer to fill (get_asset shows those as "phone frame: ..."), in a set the user saved (asset_id) or a set or design you made in this conversation (handle). Two calls. First with asset_id or handle and screens (each a screen number, the local file and, for a phone frame layer, its id): it returns one upload command (bash and PowerShell) that sends the files straight to storage. Run it, then call again with the same asset_id or handle, replace_handle and the revision get_asset returned: the files are checked (PNG or JPEG, the shape of the phone's screen) and swapped in, and the reply has the new revision and previews. With asset_id (something the user saved) it needs the user signed in to appdesigns (in Claude Code type /mcp, pick appdesigns and choose Authenticate (or run claude mcp login appdesigns in a separate terminal), in Codex run codex mcp login appdesigns; other agents open the sign-in page themselves); with handle (a set or design you made in this conversation, not saved yet) it needs no sign-in.
| Name | Required | Description | Default |
|---|---|---|---|
| handle | No | Instead of asset_id: the project_handle create_project returned or the design_handle create_design returned, for something you made in this conversation that the user has not saved yet. Needs no sign-in. | |
| screens | No | First call: what goes where, at most 6 files a call. | |
| asset_id | No | The asset_id list_projects returned. | |
| revision | No | Second call: the revision get_asset (or the last edit) returned. | |
| replace_handle | No | Second call: the replace_handle the first call returned, once the upload command has run. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations, the description discloses a two-call workflow: the first call returns an upload command, the user runs it, then the second call validates PNG/JPEG files and swaps them in. It explains authentication requirements for asset_id versus handle and notes the reply contains a new revision and previews. This is rich operational detail consistent with destructiveHint=true and idempotentHint=false.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with the usage condition and all details are relevant to a complex two-step, auth-dependent operation. It is dense and delivered as a single long paragraph, but it avoids repetition and earns most of its length.
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 non-readOnly, destructive, multi-call tool with no output schema, the description covers the complete workflow, validation rules, authentication differences, and return values. It gives an agent everything needed to invoke the tool correctly and interpret the two responses.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3. The description adds meaningful beyond-schema semantics by assigning parameters to specific calls: asset_id/handle and screens in the first call, then asset_id/handle, replace_handle, and revision in the second. It also clarifies that layer is optional and only for phone frame layers.
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: replacing screenshots in a set's phone screens, including recaptures, fixed screens, and phone frame layers. It distinguishes saved sets (asset_id) from in-conversation sets/designs (handle) and references get_asset for layer IDs, so an agent can identify the tool's scope without opening the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives clear when-to-use guidance: when a set needs new screenshots for a recapture, fixed screen, or phone frame layer. It also explains the two-call sequence and auth requirements for each mode. It does not explicitly name a sibling alternative for creating new sets, but the usage context is otherwise well specified.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
save_to_accountSave a new set to the user's accountAIdempotentInspect
Use this when the user is signed in and a set you made is ready: after finish_project (and any update_project), or create_design (and any update_design), once the previews look right. Saves it straight into their appdesigns library, into the project you named with project_id or same_project_as (else a new project named after it), with no link to open and nothing for them to press. Returns the saved asset_id and revision for edit_asset, and open_url, which opens the saved set in the editor. The draft's own link then opens the saved set. Needs the user signed in to appdesigns; a call without it fails asking for sign-in, and then the user signs in (in Claude Code type /mcp, pick appdesigns and choose Authenticate (or run claude mcp login appdesigns in a separate terminal), in Codex run codex mcp login appdesigns; other agents open the sign-in page themselves).
| Name | Required | Description | Default |
|---|---|---|---|
| handle | Yes | The project_handle create_project returned, or the design_handle create_design returned. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations (readOnlyHint=false, idempotentHint=true, destructiveHint=false), the description discloses the target library, default project behavior when no project is named, that there is 'no link to open and nothing for them to press', the returned fields (asset_id, revision for edit_asset, open_url), and the full auth failure/remediation path. This is unusually rich behavioral context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The when-to-use clause is correctly front-loaded, but the closing paragraph embeds lengthy per-agent sign-in remediation (Claude Code /mcp instructions, Codex command, 'other agents open the sign-in page themselves'). Actionable, yet disproportionate to a one-parameter tool and dilutes the core message.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description correctly compensates by naming the return values, and it covers the auth prerequisite and side effects. The only shortfall is the stale project_id/same_project_as reference that contradicts the one-parameter schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% for the single 'handle' parameter, so the baseline would be 3, but the description instead references 'project_id or same_project_as' as if they were inputs — neither exists in the schema. That misdirects an agent toward parameters it cannot pass, which is worse than adding no parameter detail.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb and resource ('Saves it straight into their appdesigns library') and situates it precisely in the workflow: after finish_project/update_project or create_design/update_design. It is clearly distinguishable from the adjacent save/update siblings (create_design, update_design, edit_asset).
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 states exactly when to call ('when the user is signed in and a set you made is ready ... once the previews look right') and names the upstream tools that must run first. It also gives an explicit precondition (user signed in to appdesigns) with the alternatives for what happens without it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_librarySearch the appdesigns libraryARead-onlyIdempotentInspect
Use this when a design or a saved asset needs a ready-made piece rather than art you draw: SF Symbols, emoji, 3D shapes, glows and blobs, seasonal art, store badges, ratings, payment and social marks and more (a few thousand pieces). Returns the best matches with their path, which a library layer takes (create_design and edit_asset), and one image showing them in order, left to right then down. With no match it lists the categories. Read-only.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | How many to return, best first. | |
| query | Yes | Words for what the piece shows, such as "heart", "sparkle", "3d cube", "apple pay", "christmas". | |
| category | No | Keep one category, such as sf-symbols, emoji, 3d, decorative, seasonal, badges or shapes. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover read-only, idempotent, non-destructive, and closed-world traits, and 'Read-only' merely repeats them. The description goes further by disclosing the return shape (matches with paths, one composite image ordered left-to-right then down) and the fallback behavior when nothing matches (it lists the categories).
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The usage condition is front-loaded and the return behavior follows, so it reads in the right order with no preamble. It is a dense run-on paragraph with a few expendable asides ('and more (a few thousand pieces)'), which keeps it short of a 5.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description carries the return-format burden and does so: paths, image, ordering, and the no-match category list. Pagination or the significance of limit beyond the schema default is not addressed, but nothing critical for a correct invocation is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so query, limit, and category are all documented in the schema with examples and defaults. The description adds only the implicit reinforcement of 'best matches' ordering, which the schema's limit field already states, so baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific verb (search) and resource (the appdesigns library of ready-made pieces) and enumerates the asset classes it covers (SF Symbols, emoji, 3D shapes, badges, marks). It also distinguishes itself from siblings by positioning create_design and edit_asset as downstream consumers of the returned paths rather than alternatives.
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 an explicit triggering condition: use this when a design or saved asset needs a ready-made piece rather than art you draw, which implicitly rules out the drawing/creation path. However, it never names the sibling it replaces for custom art nor when to prefer get_asset, so there are no explicit exclusions or named alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
translate_assetMake a set in another languageAInspect
Use this when the user wants a screenshot set or listing asset in another language (a localization for the App Store or Google Play): one they saved (asset_id), or one you made in this conversation (handle). You translate every text layer yourself (get_asset lists them, with their ids); this makes a copy in that language, its images copied and the original untouched, wrapping a long translation and moving the captions under it down as the editor's own Translate set does. A saved set's copy is saved into the same project (asset_id back); a copy of yours is a new set with its own handle and link, which joins the original's project when the user saves them. Returns a preview of every screen (check the line breaks) and warnings; fix any line with edit_asset. One call per language. With asset_id (something the user saved) it needs the user signed in to appdesigns (in Claude Code type /mcp, pick appdesigns and choose Authenticate (or run claude mcp login appdesigns in a separate terminal), in Codex run codex mcp login appdesigns; other agents open the sign-in page themselves); with handle (a set or design you made in this conversation, not saved yet) it needs no sign-in.
| Name | Required | Description | Default |
|---|---|---|---|
| texts | Yes | Every text layer that has words, translated. Keep names and brands as written; match the source's tone and length where the language allows. | |
| handle | No | Instead of asset_id: the project_handle create_project returned or the design_handle create_design returned, for something you made in this conversation that the user has not saved yet. Needs no sign-in. | |
| asset_id | No | The asset_id list_projects returned. | |
| language | Yes | App Store Connect's code for the language, such as de-DE, fr-FR, ja, es-MX or pt-BR. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare non-read-only, non-idempotent, non-destructive, and the description is consistent, adding real value beyond them: the original is untouched, images are copied, a saved copy lands in the same project, a copy of an unsaved set gets its own handle/link and joins the project on save. It also details exact auth steps per agent (Claude Code /mcp, Codex login command). Return behavior (screen previews + warnings) is disclosed, though line-break-wrapping behavior is described only loosely.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the trigger and the two modes, and every sentence carries real information (behavior, return, auth). It is dense with long parenthetical clauses, so it reads more as a wall of text than a scannable spec, but nothing is truly redundant given the tool's complexity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description compensates fully: it describes the return (a preview of every screen plus warnings) and the remedy (fix lines with edit_asset), covers both input modes, the per-language call limit, and per-agent authentication. 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%, so the baseline is 3, but the description adds semantics beyond the schema: it explains where text-layer ids come from (get_asset lists them), that every word-bearing text layer must be translated, that asset_id comes from list_projects and handle from create_project/create_design, and the 'one call per language' constraint on language.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb+resource ('makes a copy in that language' of a 'screenshot set or listing asset') and immediately distinguishes the two modes (asset_id for saved sets vs handle for sets made in-conversation). It names sibling tools (get_asset, edit_asset) so the agent can place it in the workflow without opening schemas.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It opens with an explicit trigger ('Use this when the user wants... in another language'), names the alternative inputs and when each applies (asset_id = saved, needs sign-in; handle = unsaved, no sign-in), and states 'One call per language.' Exclusions and prerequisites are explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_designChange a listing art designADestructiveInspect
Changes a design create_design made, before the user saves it: set fields of a layer by id, add, remove or reorder layers, or replace a variant's background, loop or title, or add or remove a variant. Send only what changes. Returns new preview images and warnings, like create_design; the open_url create_design gave then opens the new version. A design changed with edit_asset keeps changing there, and one the user already saved changes in the editor (or with edit_asset by asset_id once they sign you in).
| Name | Required | Description | Default |
|---|---|---|---|
| changes | Yes | Applied in order. Positions count from 0 at the bottom. | |
| design_handle | Yes | The design_handle create_design returned. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true, idempotentHint=false and non-read-only, so the safety profile is covered. The description adds real value beyond that: 'Send only what changes' (patch semantics), that it returns preview images and warnings, and that the open_url from create_design then opens the new version.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loads the core action and scope in the first clause and wastes no sentences, but the trailing sentence about edit_asset and saved designs is dense and somewhat tangled. It mostly earns its place, though it could be split for clarity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description correctly fills that gap by stating what is returned (preview images and warnings) and how the returned open_url behaves. Combined with sibling routing, an agent has enough to call it, though the edit_asset/saved-design relationship remains slightly ambiguous.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the schema already documents both top-level parameters and every nested op field, including the meaning of design_handle. The description's 'send only what changes' reinforces partial-update semantics but adds little syntax or meaning beyond what the schema provides, making 3 the correct baseline.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Changes a design create_design made') and enumerates the exact scope of operations (layer field edits, add/remove/reorder, variant background/loop/title replacement, add/remove variant). It explicitly ties itself to create_design, distinguishing it from siblings that also mutate designs.
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?
Sets the operative condition 'before the user saves it' and routes the agent to alternatives ('one the user already saved changes in the editor (or with edit_asset)'). The edit_asset vs editor guidance is present but expressed indirectly rather than as a crisp when-not rule.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_projectChange a screenshot projectADestructiveIdempotentInspect
Changes a screenshot set create_project made, before the user saves it: rewrite any screen's screen name or headline, or change the background colour, the frame colour or the device. The uploaded screenshots stay as they are. Returns new previews and warnings; the open_url finish_project gave then opens the new version. For anything more (the phone's place, size or fold, text styles, pieces, another canvas), use edit_asset with this project_handle as handle, no sign-in needed; once it has changed the set, keep using edit_asset. A set the user already saved changes with edit_asset by asset_id.
| Name | Required | Description | Default |
|---|---|---|---|
| device | No | A device id from list_devices that suits the set's canvas. | |
| screens | No | Only the screens and captions that change. | |
| frame_color | No | A colour id of the device from list_devices. | |
| project_handle | Yes | The project_handle create_project returned. | |
| background_color | No | #RRGGBB. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false, destructiveHint=true and idempotentHint=true, and the description is consistent with that: it discloses that names/headlines/colours are overwritten while 'the uploaded screenshots stay as they are'. It adds real context beyond the annotations by stating the return payload ('new previews and warnings'), that finish_project's open_url then opens the new version, and that edit_asset needs no sign-in (implying this path does). It stops short of stating auth or failure behaviour for this tool itself.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core change operation before the alternative paths, and every sentence carries routing or behavioural information. The middle is dense with semicolons and slightly run-on, which costs a point but does not bury the actionable content.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No output schema exists, and the description compensates by naming the return values (new previews and warnings) and their consumer (finish_project's open_url). Combined with the change scope, the unchanged-screenshots guarantee, and the full routing to edit_asset, an agent has everything needed to call it correctly in the project lifecycle.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents device, screens, frame_color, background_color and project_handle with formats, lengths and examples. The description reinforces which fields are mutable and that only changed screens are sent, but adds no syntax or constraint beyond what the schema 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?
States a specific verb and resource ('Changes a screenshot set create_project made') and pins the exact scope: screen name, headline, background colour, frame colour, device. It explicitly names the sibling it is not for ('For anything more ... use edit_asset') and distinguishes pre-save sets from already-saved ones, so an agent can separate it from edit_asset, create_project and finish_project without opening a schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives explicit when-to-use ('before the user saves it') and when-not-to-use, naming edit_asset as the alternative for extra changes, for a different canvas, and for sets the user already saved (by asset_id). It also states that once edit_asset has touched the set, the agent should stay with edit_asset. Nothing is left to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
1 tool update
- Added
feature_app
11 tool updates
- Changed
create_design10 fields changed- changed
Input schema / properties / app_store_url / descriptionPrevious value: -"The app's App Store link, if it is on the App Store: the editor's preview phone then shows its real name and icon, and app_icon layers use its icon."New value: +"The app's App Store link, if it is on the App Store: the editor's preview phone then shows its real name and icon, app_icon layers use its icon, and a phone layer can show one of its App Store screenshots." - changed
Input schema / properties / asset / descriptionPrevious value: -"header (the product page header, 3840x1646), search_result (3840x2560), event_card (3840x2160) or event_page (2160x3840)."New value: +"Listing art: header (3840x1646), search_result (3840x2560), event_card (3840x2160) or event_page (2160x3840). Stills: x_post (1600x900), linkedin_post (1200x627), link_preview (1200x630), instagram_square (1080x1080), instagram_portrait (1080x1350), instagram_tall (1080x1440), product_hunt (1270x760), wide_image (1920x1080), play_feature_graphic (1024x500)." - changed
Input schema / properties / asset / enumPrevious value: -[ - "header", - "search_result", - "event_card", - "event_page" -]New value: +[ + "header", + "search_result", + "event_card", + "event_page", + "x_post", + "linkedin_post", + "link_preview", + "instagram_square", + "instagram_portrait", + "instagram_tall", + "product_hunt", + "wide_image", + "play_feature_graphic" +] - added
Input schema / properties / screenshots_fromAdded value: +{ + "description": "The project_handle of a screenshot set you made with create_project in this conversation (finished, not yet saved): a phone layer's screenshot n then shows that set's n-th capture, instead of an App Store screenshot. No sign-in needed.", + "maxLength": 100, + "minLength": 10, + "type": "string" +} - added
Input schema / properties / variants / items / properties / layers / items / properties / foldAdded value: +{ + "description": "phone, iPhone Duo: inner-open (Unfolded), outer-closed (Cover) or outer-open (Open back, the open phone from behind); the editor's names work too.", + "maxLength": 30, + "type": "string" +} - added
Input schema / properties / variants / items / properties / layers / items / properties / frame_colorAdded value: +{ + "description": "phone: a colour id of the device from list_devices; default its first.", + "maxLength": 40, + "type": "string" +} - added
Input schema / properties / variants / items / properties / layers / items / properties / heightAdded value: +{ + "description": "phone only: its height as a share of the canvas height, instead of width.", + "exclusiveMinimum": 0, + "maximum": 3, + "type": "number" +} - added
Input schema / properties / variants / items / properties / layers / items / properties / orientationAdded value: +{ + "description": "phone: upright or on its side; default the way up of the screenshot it shows, else the canvas's (Open back is always on its side).", + "enum": [ + "portrait", + "landscape" + ], + "type": "string" +} - added
Input schema / properties / variants / items / properties / layers / items / properties / phoneAdded value: +{ + "description": "A phone frame showing the app: a device id from list_devices (iphone-duo, iphone-17-pro-max...). Takes width or height, frame_color, fold, orientation and screenshot.", + "maxLength": 40, + "type": "string" +} - added
Input schema / properties / variants / items / properties / layers / items / properties / screenshotAdded value: +{ + "description": "phone: show screenshot n: the n-th screen of the set screenshots_from names (your own captures), else the app's n-th App Store screenshot (app_store_url). Leave it out for an empty screen, which replace_screenshots fills.", + "maximum": 10, + "minimum": 1, + "type": "integer" +}
- Changed
create_project3 fields changed- changed
Input schema / properties / canvas_size / descriptionPrevious value: -"A canvas size from list_devices, as WIDTHxHEIGHT. Leave it out for the store default (1320x2868 for iPhone, 2048x2732 for iPad, 2007x2853 for iPhone Duo, 1080x1920 for Play)."New value: +"A canvas size from list_devices, as WIDTHxHEIGHT, portrait or landscape (2868x1320 for a landscape iPhone set). Leave it out and finish_project takes the store size the screenshots are (a landscape capture makes a landscape set), else the store default (1320x2868 for iPhone, 2048x2732 for iPad, 2007x2853 for iPhone Duo, 1080x1920 for Play)." - added
Input schema / properties / foldAdded value: +{ + "description": "iPhone Duo only: inner-open (Unfolded, the open inner display), outer-closed (Cover, the folded cover display) or outer-open (Open back, the open phone from behind, showing its cover display). The editor's names work too. Leave it out for the display the canvas is.", + "maxLength": 30, + "type": "string" +} - added
Input schema / properties / orientationAdded value: +{ + "description": "Which way up the set is, when canvas_size does not say: landscape for an app that runs in landscape (most games), and the phone is drawn on its side. Leave it out to follow the screenshots.", + "enum": [ + "portrait", + "landscape" + ], + "type": "string" +}
- Changed
edit_asset9 fields changed- added
Input schema / properties / changes / items / properties / canvasAdded value: +{ + "description": "set_canvas: the new canvas. Text keeps its place and size, as in the editor, so check the previews and move what needs it.", + "properties": { + "orientation": { + "description": "Turns the set, and the phone with it (the editor's orientation toggle). A size alone keeps the phone's stance, as the size chip does.", + "enum": [ + "portrait", + "landscape" + ], + "type": "string" + }, + "size": { + "description": "WIDTHxHEIGHT of the same asset: another iPhone display or the twin turned the other way, the Duo's other display, another marketing size (320 to 4096 a side).", + "maxLength": 12, + "type": "string" + } + }, + "type": "object" +} - changed
Input schema / properties / changes / items / properties / layer / descriptionPrevious value: -"set_layer: only the fields to change (motion {\"move\":\"none\"} stops it). add_layer: a whole new text, svg or library layer, with create_design's fields."New value: +"set_layer: only the fields to change; fields get_asset shows that only describe a layer (id, kind, box, what, frame, model_name, screenshot, locked) are ignored. Text: text, x, y, size, font, weight, color, align, line_height, wrap_width, rotation, motion (float, drift or sway). Picture: x, y, width or height, rotation, opacity, flip, tint (library pieces), svg or library (new art), motion. Phone frame layer: phone (a device id), color, fold, orientation, x, y, width or height, rotation, opacity, flip, motion. The screen's phone (\"device\"): shown, model, color, fold (inner-open/Unfolded, outer-closed/Cover, outer-open/Open back), x, y, height or width, rotation (-15 to 15), motion (listing assets). motion {\"move\":\"none\"} stops a move. add_layer: a whole new text (id, text, x, y, size), svg (id, svg, x, y, width), library (id, library, x, y, width) or phone frame (id, phone, x, y, height or width, and color, fold, orientation; screenshot \"screen\" shows the screen's own screenshot, else fill it with replace_screenshots) layer, with create_design's fields." - changed
Input schema / properties / changes / items / properties / op / descriptionPrevious value: -"set_layer changes the fields you give of layer id (\"device\" is the phone); add_layer adds layer (on top, or at position to); remove_layer and move_layer (to a position in the screen's layer list, 0 is the bottom) take id; set_background, set_loop and set_title change the screen's; duplicate_screen copies the screen (to the screen number to, default right after it); remove_screen removes it; move_screen moves it to screen number to."New value: +"set_layer changes the fields you give of layer id (\"device\" is the phone); add_layer adds layer (on top, or at position to); remove_layer and move_layer (to a position in the screen's layer list, 0 is the bottom) take id; set_background, set_loop and set_title change the screen's; duplicate_screen copies the screen (to the screen number to, default right after it); remove_screen removes it; move_screen moves it to screen number to; set_canvas changes the canvas of every screen (canvas), as the editor's size chip and orientation toggle do." - changed
Input schema / properties / changes / items / properties / op / enumPrevious value: -[ - "set_layer", - "add_layer", - "remove_layer", - "move_layer", - "set_background", - "set_loop", - "set_title", - "duplicate_screen", - "remove_screen", - "move_screen" -]New value: +[ + "set_layer", + "add_layer", + "remove_layer", + "move_layer", + "set_background", + "set_loop", + "set_title", + "duplicate_screen", + "remove_screen", + "move_screen", + "set_canvas" +] - changed
Input schema / properties / changes / items / properties / screen / descriptionPrevious value: -"Which screen, from 1, as numbered after the changes before this one."New value: +"Which screen, from 1, as numbered after the changes before this one. Every op but set_canvas, which changes them all." - changed
Input schema / properties / changes / items / requiredPrevious value: -[ - "op", - "screen" -]New value: +[ + "op" +] - added
Input schema / properties / handleAdded value: +{ + "description": "Instead of asset_id: the project_handle create_project returned or the design_handle create_design returned, for something you made in this conversation that the user has not saved yet. Needs no sign-in.", + "maxLength": 100, + "minLength": 10, + "type": "string" +} - changed
Input schema / properties / revision / descriptionPrevious value: -"The revision get_asset (or the last edit_asset) returned. If the asset was saved since, nothing changes and you read it again."New value: +"The revision get_asset (or the last edit_asset) returned. If the asset changed since, nothing changes and you read it again." - changed
Input schema / requiredPrevious value: -[ - "asset_id", - "revision", - "changes" -]New value: +[ + "revision", + "changes" +]
- Changed
export_asset2 fields changed- added
Input schema / properties / handleAdded value: +{ + "description": "Instead of asset_id: the project_handle create_project returned or the design_handle create_design returned, for something you made in this conversation that the user has not saved yet. Needs no sign-in.", + "maxLength": 100, + "minLength": 10, + "type": "string" +} - removed
Input schema / requiredRemoved value: -[ - "asset_id" -]
- Changed
get_asset2 fields changed- added
Input schema / properties / handleAdded value: +{ + "description": "Instead of asset_id: the project_handle create_project returned or the design_handle create_design returned, for something you made in this conversation that the user has not saved yet. Needs no sign-in.", + "maxLength": 100, + "minLength": 10, + "type": "string" +} - removed
Input schema / requiredRemoved value: -[ - "asset_id" -]
- Changed
get_design_guide2 fields changed- changed
Input schema / properties / asset / descriptionPrevious value: -"header (product page header), search_result, event_card or event_page."New value: +"The asset, as create_design names it: header, search_result, event_card, event_page, x_post, linkedin_post, link_preview, instagram_square, instagram_portrait, instagram_tall, product_hunt, wide_image or play_feature_graphic." - changed
Input schema / properties / asset / enumPrevious value: -[ - "header", - "search_result", - "event_card", - "event_page" -]New value: +[ + "header", + "search_result", + "event_card", + "event_page", + "x_post", + "linkedin_post", + "link_preview", + "instagram_square", + "instagram_portrait", + "instagram_tall", + "product_hunt", + "wide_image", + "play_feature_graphic" +]
- Changed
get_export1 field changed- added
Input schema / properties / handleAdded value: +{ + "description": "Instead of asset_id: the project_handle create_project returned or the design_handle create_design returned, for something you made in this conversation that the user has not saved yet. Needs no sign-in.", + "maxLength": 100, + "minLength": 10, + "type": "string" +}
- Changed
make_screenshot_set2 fields changed- changed
Input schema / properties / canvas_size / descriptionPrevious value: -"A canvas size from list_devices, as WIDTHxHEIGHT. Leave it out for the store default."New value: +"A canvas size from list_devices, as WIDTHxHEIGHT. Leave it out for the store default, or the store size the screenshots are; landscape screenshots make a landscape App Store set." - added
Input schema / properties / orientationAdded value: +{ + "description": "Which way up the set is, when canvas_size does not say: landscape for an app that runs in landscape (most games), and the phone is drawn on its side. Leave it out to follow the screenshots.", + "enum": [ + "portrait", + "landscape" + ], + "type": "string" +}
- Added
replace_screenshots - Added
save_to_account - Changed
translate_asset2 fields changed- added
Input schema / properties / handleAdded value: +{ + "description": "Instead of asset_id: the project_handle create_project returned or the design_handle create_design returned, for something you made in this conversation that the user has not saved yet. Needs no sign-in.", + "maxLength": 100, + "minLength": 10, + "type": "string" +} - changed
Input schema / requiredPrevious value: -[ - "asset_id", - "language", - "texts" -]New value: +[ + "language", + "texts" +]
1 tool update
- Changed
create_design1 field changed- changed
Input schema / properties / variants / items / properties / layers / items / properties / svg / descriptionPrevious value: -"Art you draw: one standalone <svg> with a viewBox and a transparent background, cropped tight to the drawing. Paths, shapes, gradients, clip paths, masks and blur filters only; no <text>, <image>, scripts, CSS animation or outside files."New value: +"Art you draw: one standalone <svg> with a viewBox and a transparent background, cropped tight to the drawing. Paths, shapes, gradients, clip paths, masks and filters only; no <text>, <image>, scripts, stroke-dasharray, feMorphology, CSS animation or outside files."
12 tool updates
- Added
create_design - Changed
create_project2 fields changed- added
Input schema / properties / project_idAdded value: +{ + "description": "A project_id from list_projects (the user signed in): the new asset is saved into that saved project of theirs. Use it, not same_project_as, to add to something the user already saved.", + "pattern": "^[0-9a-f-]{36}$", + "type": "string" +} - added
Input schema / properties / same_project_asAdded value: +{ + "description": "The project_handle or design_handle of an earlier asset from this conversation (screenshots, a header...). The user's save then files this one in the same project, once they have saved that one.", + "maxLength": 100, + "minLength": 10, + "type": "string" +}
- Added
edit_asset - Added
export_asset - Added
get_asset - Added
get_design_guide - Added
get_export - Added
list_projects - Added
search_library - Added
translate_asset - Added
update_design - Added
update_project
1 tool update
- Added
make_screenshot_set
1 tool update
- Changed
create_project1 field changed- changed
Input schema / properties / canvas_size / descriptionPrevious value: -"A canvas size from list_devices, as WIDTHxHEIGHT. Leave it out for the store default (1320x2868 for iPhone, 2048x2732 for iPad, 1080x1920 for Play)."New value: +"A canvas size from list_devices, as WIDTHxHEIGHT. Leave it out for the store default (1320x2868 for iPhone, 2048x2732 for iPad, 2007x2853 for iPhone Duo, 1080x1920 for Play)."
4 tool updates
- First observed
create_project - First observed
finish_project - First observed
get_workflow - First observed
list_devices
Related MCP Connectors
Turn your app's screens into editable App Store and Google Play screenshot sets, from your agent.
Design App Store and Google Play screenshots with your AI agent in the AppScreenStudio editor.
Generate exact-size App Store and Google Play screenshots, feature graphics, and listing copy.
App Store and Google Play screenshot generator: design, localize into 41 languages, render, upload.
Related MCP Servers
- AlicenseAqualityCmaintenanceTurn raw app screenshots into App Store & Google Play marketing screenshots from Cursor, Claude, or any MCP client.660 npmMIT
- 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-
- AlicenseNot gradedqualityBmaintenanceEnables 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
- 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.6164 npm27MIT
Glama MCP Gateway
Add one secure layer between your agents and this server.