Skip to main content
Glama

appdesigns App Store screenshots

Server Details

App Store and Google Play screenshots MCP: your agent captures the app, you edit and export. Free.

If you are the author of this connector, you can claim ownership by verifying the domain or GitHub account it belongs to. Claimed connector authors can inspect health checks, view analytics, and manage their listing.
Status
Healthy
Uptime
100.0% over 22 days
Last Tested
Transport
Streamable HTTP · MCP 2025-11-25
URL
Repository
haider-nawaz/app-store-screenshots-mcp
GitHub Stars
0
Server Listing
appdesigns

TDQS

A4.5/5.0

Scored across 4 tools

Disambiguation5/5

Each tool addresses a distinct stage: project creation, finalization, workflow retrieval, and device listing. No overlap in purpose, making selection unambiguous for an agent.

Naming Consistency5/5

All tools follow a consistent verb_noun pattern (create_project, finish_project, get_workflow, list_devices). Naming is predictable and uniform.

Tool Count5/5

Four tools cover the essential workflow without redundancy or bloat. The scope is tightly aligned with the server's purpose of managing App Store screenshots.

Completeness4/5

The surface covers the core lifecycle: workflow guidance, device configuration, project creation, and finalization. Minor gaps exist (e.g., no explicit cancellation or project listing), but agents can work around them.

Available Tools

18 tools
create_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.

ParametersJSON Schema
NameRequiredDescriptionDefault
assetNoListing 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
animatedNofalse for a still image (the user asked for one): the moves are kept with motion turned off, so the Motion toggle brings them back.
variantsYesThe directions, each a whole design. The first is the one you would pick.
project_idNoA 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_nameYesThe app's name. It becomes the project name in the user's appdesigns library.
app_store_urlNoThe 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_asNoThe 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_fromNoThe 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

A4.7/5.0
Behavior5/5

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

Annotations only establish that this is a non-read-only, non-destructive, closed-world write. The description goes well beyond: it discloses the return payload (preview image per variant, warnings, design_handle, open_url), that checks run before returning, that nothing is public and no account is needed, and a 72-hour window before the design must be opened and saved.

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

Conciseness3/5

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

Front-loaded correctly with the when-to-use clause, but the enumeration of asset types ("a product page header, search result, or In-App Event card or page... an X, LinkedIn or Instagram post...") and layer types largely restates the asset enum and layer schema. Those clauses are long and duplicate structured data rather than adding value.

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

Completeness5/5

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

With no output schema, the description takes on return-value disclosure itself (preview images, warnings, design_handle, open_url) and covers the lifecycle caveat of the 72-hour expiry plus the no-account requirement. For an 8-parameter creation tool, nothing needed to invoke it correctly is missing.

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

Parameters4/5

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

Schema coverage is 100%, so the schema already carries per-field meaning. The description nevertheless adds cross-parameter workflow semantics: 1-4 variants where the first is the preferred direction, layers as background+art+icon+text+phone frames with moves, and how project_id/screenshots_from/same_project_as relate to prior tool calls.

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

Purpose5/5

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

States a specific verb and resource (create a listing art design) and scopes it precisely: listing art that loops as video or a still marketing image, delivered as an editable project. It names the sibling relationships explicitly (design_handle for update_design, project_handle from create_project), so an agent can separate it from update_design and make_screenshot_set 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.

Usage Guidelines5/5

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

"Use this when you have designed art for an app yourself and the user should get it as an editable project" gives the triggering condition, and it adds an alternative rule: "Use it, not same_project_as, to add to something the user already saved." It also clarifies that screenshots_from must come from a create_project set in the same conversation.

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 projectInspect

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
foldNoiPhone 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.
storeNoWhich store the set is for.app_store
deviceNoA device id from list_devices. Defaults to iphone-17-pro-max for the App Store and pixel-11-pro for Google Play.
screensYesOne entry per screenshot, in the order the store should show them. The first sells the app.
project_idNoA 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_sizeNoA 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_colorNoA colour id of that device from list_devices. Leave it out to pick one that stands out from the background.
orientationNoWhich 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_nameYesThe app's name. It becomes the project name in the user's appdesigns library.
same_project_asNoThe 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_colorNo#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.
edit_assetChange an assetA
Destructive
Inspect

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
handleNoInstead 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.
changesYesApplied in order, all or none. Layer positions count from 0 at the bottom of the screen's layers list, the phone included.
asset_idNoThe asset_id list_projects returned.
revisionYesThe revision get_asset (or the last edit_asset) returned. If the asset changed since, nothing changes and you read it again.

TDQS

A4.5/5.0
Behavior5/5

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

Annotations only declare destructive=true, idempotent=false, readOnly=false; the description goes well beyond that by disclosing the revision-conflict behavior ('If the asset changed since, nothing changes and you read it again'), that the edit takes effect immediately like an editor edit, that the reply carries the new revision plus previews and warnings, and the full auth requirement per mode (signed in for asset_id, no sign-in for handle, with per-client login instructions).

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

Conciseness3/5

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

The core routing and auth information is front-loaded, but the middle is one very long run-on sentence enumerating layer/screen/background/canvas operations that the schema already documents, which adds length without new decision-relevant content. It is information-dense yet hard to scan.

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

Completeness5/5

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

For a complex, destructive, no-output-schema tool, the description covers everything an agent needs before calling: prerequisites (get_asset first), the required revision token, both addressing modes, the auth difference between them, immediate-effect semantics, conflict behavior, and what the reply contains (revision, previews, warnings).

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

Parameters3/5

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

Schema description coverage is 100%, so parameters are already documented in structured data. The description adds useful framing ('Send only what changes, with the revision get_asset returned'), but the op-by-op behavior it recounts largely mirrors the schema's own op enum and layer descriptions, so it does not meaningfully exceed the baseline.

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

Purpose5/5

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

States a specific verb (change) and resource (an asset) and immediately distinguishes the two mutually exclusive target modes: asset_id for 'one the user saved' versus handle for 'a set or design you made in this conversation'. It also names the operation vocabulary (layers, screens, background, loop, canvas) so the agent knows the scope of the edit 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.

Usage Guidelines5/5

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

Explicitly gated on 'after get_asset', requires the returned revision, and gives a clear routing rule against siblings: 'A set or design changed this way keeps changing here: update_project and update_design no longer apply to it.' It also names search_library and set_canvas as the paths for specific sub-needs, which is exactly the when-to-use/when-to-use-something-else guidance an agent needs.

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
formatNoauto: an MP4 for each screen whose loop is on (an animated listing asset), a PNG for every other screen. png: stills only.auto
handleNoInstead 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_idNoThe asset_id list_projects returned.

TDQS

A4.6/5.0
Behavior5/5

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

Goes well beyond the annotations: it explains that files are produced by the appdesigns editor in the browser, that open_url must be opened there to generate them (PNG per screen, MP4 for looping screens), and that get_export with export_id yields the download command. It also spells out exact authentication requirements per host (Claude Code /mcp Authenticate, codex mcp login), which the annotations do not cover.

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

Conciseness4/5

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

Front-loaded with the trigger ('Use this when the user wants the finished files'), which is ideal. However, the body is a dense single paragraph with nested parentheticals (auth instructions inlined mid-sentence) that could be split for scannability; every sentence is informative but the structure taxes reading.

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

Completeness5/5

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

With no output schema and an open-ended return path, the description compensates by outlining the full three-step flow (open_url to render, export_asset to get export_id, get_export to download) and the auth preconditions for each mode. Nothing an agent needs to call this correctly is missing.

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

Parameters4/5

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

Schema coverage is 100%, so baseline is 3, but the description adds real meaning: asset_id requires sign-in while handle requires none, and it clarifies handle is for an unsaved set/design made in this conversation. Format behavior (MP4 for looping screens vs PNG) is echoed from the schema's enum description, so only marginally additive.

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

Purpose5/5

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

States a specific verb+resource (export an asset's files) and immediately distinguishes the two input modes: asset_id (something the user saved) vs handle (something made in this conversation). It also names the downstream sibling get_export, so an agent can locate it against the rest of the export flow.

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

Usage Guidelines4/5

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

Explicitly frames when to use it ('when the user wants the finished files... to upload to App Store Connect or the Play Console'), and routes between the two modes. It stops short of naming when NOT to use it or which sibling to prefer for adjacent tasks (e.g. get_asset vs export_asset), so it is strong context rather than full when/when-not coverage.

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 project
Destructive
Inspect

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
project_handleYesThe project_handle create_project returned.
get_assetRead one assetA
Read-onlyIdempotent
Inspect

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
handleNoInstead 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_idNoThe asset_id list_projects returned.
previewsNoWhich screens to preview, from 1. Default: all of them.

TDQS

A4.8/5.0
Behavior5/5

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

Annotations already establish read-only/idempotent/non-destructive, and the description adds substantial context on top: the full return shape (screens, backgrounds, bottom-first layers with id/position/style, animation loop, warnings, preview images), the fact that it returns the revision edit_asset needs, and detailed auth requirements per identifier including exact login commands.

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

Conciseness4/5

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

Dense but front-loaded: usage context comes first, then return shape, then auth. It is a single long run-on paragraph with heavy parentheticals, which hurts scanability, but almost every clause carries information an agent needs (revision linkage, auth commands, layer ordering).

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

Completeness5/5

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

There is no output schema, so the description carries the return-value burden and does so thoroughly (screens, layers, styles, loop, warnings, previews, revision). Combined with the auth guidance and identifier selection rules, 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.

Parameters4/5

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

Schema coverage is 100%, so the baseline is 3, but the description adds meaning beyond the schema by tying each identifier to an auth consequence: asset_id requires signing in to appdesigns (with concrete login steps), while handle requires none. The previews parameter is not elaborated in the description, relying entirely on the schema.

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

Purpose5/5

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

States a specific verb and resource ('read one asset') and immediately scopes it to two use cases: pre-edit inspection and answering 'what does it look like'. It distinguishes itself from siblings by naming edit_asset and by explaining the two lookup keys (asset_id vs handle) that separate it from list_projects-style tools.

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

Usage Guidelines5/5

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

Explicitly says when to call it ('before changing an asset with edit_asset, or when the user asks what one looks like') and gives the conditional selection rule between asset_id and handle, including which one requires sign-in. Nothing about when to use it 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.

get_design_guideGet the design guideA
Read-onlyIdempotent
Inspect

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
assetNoThe 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

A4.1/5.0
Behavior4/5

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

Annotations already declare readOnlyHint/idempotentHint/non-destructive, so 'Read-only; changes nothing' is largely redundant. However, with no output schema the description usefully discloses what is returned: size, crops/covers, layer format, moves, quality bar, and the hand-off to the user.

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

Conciseness4/5

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

Two sentences, front-loaded with the usage condition followed by the return contract. Dense but every clause carries information; the asset enumeration is somewhat long but maps directly to the use cases.

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

Completeness4/5

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

For a simple read-only, single-enum tool with no output schema, the description covers the trigger, the return content, and the safety profile. Minor gaps remain (no mention of error cases or how the recipe relates to subsequent edit/export steps), but nothing essential is missing.

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

Parameters3/5

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

Schema description coverage is 100% and the single enum parameter is fully documented in the schema. The description only restates the asset list and the 'as create_design names it' convention already present in the schema, adding no new syntax or format meaning.

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

Purpose5/5

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

States a specific verb+resource: returns the appdesigns recipe (markdown) for a named asset type, and enumerates concrete use cases (listing art, marketing image). It clearly distinguishes itself from create_design by saying the agent 'will draw it yourself' rather than creating the asset.

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

Usage Guidelines4/5

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

Gives explicit trigger conditions ('when the user wants App Store listing art ... or a marketing image') and implies the follow-on flow by referencing the layer format create_design takes. No explicit when-not or named alternative for the actual creation step, so it stops short of a 5.

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

get_exportGet an export's filesAInspect

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).

ParametersJSON Schema
NameRequiredDescriptionDefault
handleNoInstead 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_idYesThe export_id export_asset returned.

TDQS

A4.4/5.0
Behavior5/5

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

Discloses rich behavior beyond the annotations: link lifetime (24h after export), that each ready call mints new links and retires the earlier ones (explaining the non-idempotent, non-read-only profile), and the auth requirement plus exact commands to authenticate. This is exactly the context annotations cannot convey.

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

Conciseness3/5

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

Every clause carries useful information, but it is delivered as one marathon run-on sentence that is not front-loaded with the purpose, making it hard to parse. The content earns its place; the structure does not.

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

Completeness5/5

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

With no output schema, the description correctly carries the return-value burden: it explains that files come back with a bash/PowerShell download command, where they land, and the next steps in App Store Connect and the Play Console. Auth and expiry behavior round it out.

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

Parameters4/5

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

Schema coverage is 100%, so baseline is 3. The description adds meaning by tying handle usage to the auth outcome (no sign-in needed) and its relationship to items made in the current conversation, going beyond the bare schema note. export_id is only implicitly explained, keeping this just short of a 5.

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

Purpose4/5

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

The description states a specific action: it reports whether the exported files are ready and returns them with a download command plus destination guidance. It clearly distinguishes itself from the sibling export_asset by positioning itself as the post-export step. The purpose is stated but somewhat buried after the leading usage clause rather than front-loaded.

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

Usage Guidelines5/5

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

Explicitly states when to call it ("after export_asset, once the user has the editor open") and the correct sequencing. It also names the condition for passing handle (something made in this conversation) and the fallback sign-in path per agent, 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 workflow
Read-onlyIdempotent
Inspect

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
storeNoWhich store the screenshots are for.app_store
platformYesHow the app is built: ios (Swift or Objective-C), android (Kotlin or Java), expo, react-native, flutter, or web (a web app or PWA).
list_devicesList device frames
Read-onlyIdempotent
Inspect

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
storeNoWhich store the screenshots are for.app_store
list_projectsList the user's appdesigns projectsA
Read-onlyIdempotent
Inspect

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
queryNoOnly projects or assets whose name contains this, ignoring case.

TDQS

A4/5.0
Behavior5/5

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

Annotations already declare readOnlyHint/idempotentHint/non-destructive, so the bar is lower, yet the description adds substantial new context: a hard auth prerequisite, the exact failure mode ('a call without it fails asking for sign-in'), and per-agent remediation steps. It also discloses the return contents (asset_id, kind, canvas size, last edit) and the derived 'what each project still needs' summary, none of which the annotations convey.

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

Conciseness3/5

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

The purpose and scope are front-loaded well in the first two sentences, but the auth remediation parenthetical (three agent-specific login procedures plus a terminal command) consumes the majority of the text and is disproportionate to a read-only list tool. The final 'Read-only.' fragment is redundant with the annotations.

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

Completeness4/5

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

With no output schema, the description usefully describes the return shape and the auth prerequisite, which is most of what an agent needs for a one-parameter list call. It omits pagination/result limits and empty-result behavior, so it is not fully complete.

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

Parameters3/5

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

There is a single optional 'query' parameter and schema description coverage is 100%, so the schema already documents the case-insensitive substring match and 80-char cap. The description adds nothing about the parameter, so the baseline 3 for schema-carried semantics is appropriate.

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

Purpose4/5

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

The description gives a specific verb and resource ('Lists their projects (one per app) with every saved asset in each') and even enumerates the returned fields, which clearly separates it from asset-level siblings like get_asset or list_devices. It stops short of explicitly naming or contrasting with any sibling, so it lands at a strong 4 rather than a 5.

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

Usage Guidelines4/5

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

It opens with an explicit when-to-use trigger ('Use this when the user wants to work on something they already made in appdesigns') and backs it with concrete scenarios: changing a screenshot set, header/event art, adding to a project, seeing what's missing. There are no stated exclusions and no named alternative tools (e.g. search_library, get_asset) for the adjacent cases, so it is clear context without routing.

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 PNG or JPEG screenshots (at most 6 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.

ParametersJSON Schema
NameRequiredDescriptionDefault
storeNoWhich store the set is for: app_store for iPhone or iPad screenshots, play for Android.app_store
deviceNoA device id from list_devices. Defaults to iphone-17-pro-max for the App Store and pixel-11-pro for Google Play.
screensYesOne entry per attached screenshot, in the same order as screenshots. The first sells the app.
canvas_sizeNoA 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_colorNoA colour id of that device from list_devices. Leave it out to pick one that stands out from the background.
orientationNoWhich 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.
screenshotsYesThe screenshots the user attached, in store order, one per screens entry.
project_nameYesThe app's name. It becomes the project name in the user's appdesigns library.
background_colorNo#RRGGBB, for example the app's brand colour as seen in the screenshots. Leave it out for a neutral light background.

TDQS

A4.5/5.0
Behavior4/5

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

Annotations cover the safety profile (not read-only, not destructive, not open-world), and the description goes well beyond them by disclosing storage privacy, the 72-hour lifetime until save-to-account, that nothing is public, and that no account is required. It does not explain failure modes (e.g., what happens on >6MB or mixed-orientation input) beyond constraints.

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

Conciseness4/5

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

Front-loaded with the triggering condition and the when-not-to-use rules before the mechanics. It is long, but nearly every clause carries a constraint; a couple of store-listing examples could be trimmed without loss.

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

Completeness4/5

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

For a complex 9-parameter mutation tool with no output schema, the description covers inputs, constraints, privacy, and that open_url opens the result as an editable project. It stops short of describing the returned reference (URL id, expiry token) that the agent would pass to open_url, which is the main remaining gap.

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

Parameters4/5

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

Schema coverage is 100%, so baseline is 3, but the description adds cross-parameter semantics the schema cannot: screens entries must be in the same order as screenshots, one per screenshot, the first sells the app, and mixed orientation is disallowed (landscape input yields a landscape App Store set).

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

Purpose5/5

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

States a specific verb and resource (make a screenshot set from attached screenshots) and names the concrete deliverables: App Store/Play listing images, framed screenshots, mockups. It is clearly distinguishable from siblings like create_design or replace_screenshots because it is scoped to raw user-attached captures.

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

Usage Guidelines5/5

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

Explicitly gives both when-to-use (user attached their own app screenshots and wants store images) and when-not-to-use (already-framed images, inventing screens, nothing attached), with the corrective action for each exclusion. This is exactly the routing an agent needs against 17 siblings.

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 setA
Destructive
Inspect

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
handleNoInstead 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.
screensNoFirst call: what goes where, at most 6 files a call.
asset_idNoThe asset_id list_projects returned.
revisionNoSecond call: the revision get_asset (or the last edit) returned.
replace_handleNoSecond call: the replace_handle the first call returned, once the upload command has run.

TDQS

A4.3/5.0
Behavior5/5

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

Annotations only declare the safety profile (destructive, not read-only, not idempotent); the description adds substantial context beyond that — the required two-call sequence, that an upload command (bash/PowerShell) must be run between calls, file validation rules (PNG/JPEG, phone-screen shape), what the reply contains, and detailed per-client authentication steps.

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

Conciseness3/5

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

The usage trigger is usefully front-loaded, but the body is a dense run-on sentence with nested parentheses that is harder to parse than it needs to be. Information is mostly load-bearing, but the packaging is not clean.

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

Completeness5/5

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

For a complex multi-call, no-output-schema tool, the description covers the full workflow, the intermediate upload step, validation, the returned revision/previews, and auth differences per client. Nothing an agent needs to call it correctly is missing.

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

Parameters3/5

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

Schema coverage is 100% and each parameter already carries a 'First call'/'Second call' description, so the schema does the heavy lifting. The description mainly repeats the asset_id/handle/revision/replace_handle roles rather than adding syntax or edge-case meaning beyond what is documented.

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

Purpose5/5

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

States a specific verb and resource ('Put new screenshots in a set') and immediately scopes the operation to 'replace' semantics with a two-call flow, distinguishing it from make_screenshot_set and edit_asset. An agent can tell what it does 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.

Usage Guidelines4/5

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

Gives concrete triggering conditions ('a recapture, a fixed screen, or a phone frame layer to fill') and splits usage by asset_id (saved set, needs sign-in) vs handle (in-conversation, no sign-in). It does not explicitly exclude or route away from sibling tools like edit_asset, so it stops short of a 5.

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

save_to_accountSave a new set to the user's accountA
Idempotent
Inspect

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).

ParametersJSON Schema
NameRequiredDescriptionDefault
handleYesThe project_handle create_project returned, or the design_handle create_design returned.

TDQS

A4.4/5.0
Behavior5/5

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

Annotations only give the safety profile (readOnly=false, idempotent=true, destructive=false); the description adds the substantive behavior: where the asset lands (named project, project_id/same_project_as, else a new project), that no link needs opening, the returned asset_id/revision/open_url, the auth requirement, and the exact failure+recovery path per agent. That is rich disclosure 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.

Conciseness3/5

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

Usage is front-loaded and most content earns its place, but it is delivered as one sprawling run-on sentence with deeply nested parentheses, and the per-client sign-in instructions (/mcp, claude mcp login, codex mcp login) add bulk that is tangential to calling the tool.

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

Completeness4/5

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

With no output schema, the description correctly compensates by describing the return values (asset_id, revision, open_url) and covers the auth requirement and failure mode. It is slightly undercut by naming parameters absent from the schema, which leaves a small ambiguity about what the call actually accepts.

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

Parameters3/5

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

Schema coverage is 100% for the single 'handle' parameter, so the baseline is 3. The description adds placement logic but does so by referencing 'project_id' and 'same_project_as', which do not exist in the provided schema — that mismatched parameter vocabulary can mislead an agent rather than clarify.

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

Purpose5/5

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

States a specific verb and resource: it saves a finished set straight into the user's appdesigns library, with no link to open and nothing to press. It names the upstream siblings (finish_project/update_project, create_design/update_design) that must precede it, so an agent can place it precisely in the workflow.

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

Usage Guidelines5/5

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

Explicitly states the triggering condition ('when the user is signed in and a set you made is ready ... once the previews look right') and names the exact prerequisite tools. It also states the when-not path: a call without sign-in fails and must be followed by an authentication step.

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 libraryA
Read-onlyIdempotent
Inspect

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoHow many to return, best first.
queryYesWords for what the piece shows, such as "heart", "sparkle", "3d cube", "apple pay", "christmas".
categoryNoKeep one category, such as sf-symbols, emoji, 3d, decorative, seasonal, badges or shapes.

TDQS

A4.4/5.0
Behavior5/5

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

Annotations already declare readOnly/idempotent/non-destructive, so the bar is low, and the description still adds real behavioral detail: result shape (path plus one ordered image, left-to-right then down), the no-match fallback (lists categories), and corpus scale (a few thousand pieces). 'Read-only' is redundant with readOnlyHint 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.

Conciseness4/5

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

Front-loaded with the use condition and tightly packed, with each clause carrying information. It is one long run-on construction with parenthetical asides, which slightly hurts scannability, but nothing is wasted.

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

Completeness5/5

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

There is no output schema, and the description compensates by explaining the return contents, ordering of the preview image, and the empty-result behavior. Combined with annotation coverage and a fully documented schema, an agent has everything needed to select and call it correctly.

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

Parameters3/5

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

Schema description coverage is 100% and all three parameters carry their own descriptions with examples, so the schema does the heavy lifting. The description reinforces the category fallback behavior but adds no syntax or format meaning for query, limit, or category beyond what the schema already states.

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

Purpose5/5

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

States a specific verb+resource (search the appdesigns library) and enumerates the content domain in concrete terms (SF Symbols, emoji, 3D shapes, glows and blobs, badges, payment and social marks). It also distinguishes itself from siblings by naming create_design and edit_asset as the consumers of the returned path rather than competitors.

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

Usage Guidelines4/5

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

Opens with an explicit use condition: 'Use this when a design or a saved asset needs a ready-made piece rather than art you draw.' That cleanly separates it from authoring tools. It does not name a specific alternative tool for the draw-it-yourself case, so it stops short of full when-not/alternatives routing.

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
textsYesEvery text layer that has words, translated. Keep names and brands as written; match the source's tone and length where the language allows.
handleNoInstead 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_idNoThe asset_id list_projects returned.
languageYesApp Store Connect's code for the language, such as de-DE, fr-FR, ja, es-MX or pt-BR.

TDQS

A4.5/5.0
Behavior5/5

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

Far exceeds the annotations (which only say it is a non-destructive, non-idempotent write). It discloses that the original is untouched, where the copy lands (same project for asset_id, a new set with its own handle for handle), that the result is a preview of every screen plus warnings, and the exact sign-in requirements per agent for the asset_id path.

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

Conciseness3/5

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

The use case is front-loaded, but it is a single dense paragraph packed with parentheticals, including verbose per-agent sign-in commands (Claude Code /mcp flow, Codex command line). The sign-in detail is useful but makes the description hard to scan; it could be structured more tightly.

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

Completeness5/5

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

For a mutation tool with no output schema, it covers preconditions (sign-in per input mode), what is created and where, what is returned (screen previews and warnings), and the follow-up remedy (edit_asset). 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.

Parameters4/5

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

Schema coverage is 100%, so the baseline is 3, but the description adds real workflow meaning: texts must cover every text layer listed by get_asset, translations are done by the model, and line breaks should be checked and fixed with edit_asset. The asset_id/handle distinction is also framed in terms of sign-in behavior rather than just repeating the schema.

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

Purpose5/5

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

States a specific verb and resource: it makes a copy of a screenshot set/listing asset in another language (App Store / Google Play localization), and it distinguishes the two input modes (saved asset_id vs. conversation-made handle). An agent can tell this apart from make_screenshot_set or edit_asset without opening any schema.

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

Usage Guidelines4/5

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

Gives explicit when-to-use ('when the user wants a screenshot set or listing asset in another language'), routes the agent to asset_id vs. handle based on whether the user saved it, and states 'one call per language'. It does not explicitly exclude or compare against siblings like make_screenshot_set, so it stops short of a 5.

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

update_designChange a listing art designAInspect

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).

ParametersJSON Schema
NameRequiredDescriptionDefault
changesYesApplied in order. Positions count from 0 at the bottom.
design_handleYesThe design_handle create_design returned.

TDQS

A4.6/5.0
Behavior4/5

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

Annotations cover mutation/safety flags (readOnly=false, destructive=false, idempotent=false), so the bar is lower. The description still adds real behavior: it discloses the return value (new preview images and warnings), the side effect that the original open_url now opens the new version, and the lifecycle rule that edits apply only pre-save. It does not mention permission/auth requirements, which keeps it short of a 5.

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

Conciseness4/5

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

Purpose and the 'send only what changes' contract are front-loaded, and every sentence carries substantive information. The final sentence about edit_asset/editor lifecycle is dense and harder to parse, costing a point on structure rather than on length.

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

Completeness5/5

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

There is no output schema, and the description compensates by explaining that it returns preview images and warnings and that the prior open_url resolves to the new version. Combined with the lifecycle and alternative-path guidance, an agent has everything needed to invoke it correctly.

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

Parameters4/5

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

Schema description coverage is 100%, so the baseline is 3. The description nonetheless adds patch semantics not obvious from the schema alone ('Send only what changes') and summarizes the op vocabulary, helping the agent understand that changes is an ordered partial-update list rather than a full replacement.

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

Purpose5/5

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

States a specific verb (changes a design) and enumerates the concrete operations (set/add/remove/move layers, replace variant background/loop/title, add/remove variant), and anchors the resource as 'a design create_design made, before the user saves it.' It clearly distinguishes itself from create_design (the origin) and edit_asset (the alternate path for saved assets).

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

Usage Guidelines5/5

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

Explicitly scopes when to use it (drafts not yet saved by the user) and names the alternatives with their selection conditions: designs changed via edit_asset stay there, and user-saved designs change in the editor or via edit_asset by asset_id. 'Send only what changes' also gives the patch-style invocation contract.

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 projectA
Idempotent
Inspect

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
deviceNoA device id from list_devices that suits the set's canvas.
screensNoOnly the screens and captions that change.
frame_colorNoA colour id of the device from list_devices.
project_handleYesThe project_handle create_project returned.
background_colorNo#RRGGBB.

TDQS

A4.4/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=false, idempotentHint=true and destructiveHint=false, so the safety profile is covered. The description still adds real value beyond that: it discloses that uploaded screenshots are left untouched, that new previews and warnings are returned, and that the open_url from finish_project resolves to the new version. It does not state auth requirements for update_project itself, which keeps it short of a 5.

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

Conciseness4/5

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

The mutation scope is front-loaded in the first sentence, followed by the routing rules. It is dense and every clause carries information, though the multi-clause edit_asset routing sentence is heavier than it needs to be and could be split.

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

Completeness5/5

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

No output schema exists, and the description compensates by stating the return (new previews and warnings) and the downstream consequence for finish_project's open_url. Combined with full schema coverage and the edit_asset fallback path, an agent has everything needed to call this correctly and to know when to stop.

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

Parameters3/5

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

Schema description coverage is 100%, so the baseline is 3. The description maps its mutable fields onto the parameters (screen_name, headline, background_color, frame_color, device) but adds no syntax, format or default information beyond what the schema already documents in detail (e.g. the #RRGGBB pattern and headline length guidance live in the schema).

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

Purpose5/5

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

States a specific verb and resource ('Changes a screenshot set create_project made') and enumerates exactly what is mutable: screen name, headline, background colour, frame colour, device. It explicitly distinguishes itself from create_project (which made the set) and from edit_asset (which handles everything else), so an agent can route without opening any schema.

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

Usage Guidelines5/5

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

Gives explicit when-to-use and when-not-to-use: use this only before the user saves; for anything more (device placement, size, fold, text styles, pieces, another canvas) use edit_asset with the same project_handle; a set already saved must be changed via edit_asset by asset_id. Alternatives and the conditions that select them are named outright.

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. 11 tool updates
    • Changedcreate_design10 fields changed
      • changedInput schema / properties / app_store_url / description
        Previous 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."
      • changedInput schema / properties / asset / description
        Previous 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)."
      • changedInput schema / properties / asset / enum
        Previous 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"
        +]
      • addedInput schema / properties / screenshots_from
        Added 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"
        +}
      • addedInput schema / properties / variants / items / properties / layers / items / properties / fold
        Added 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"
        +}
      • addedInput schema / properties / variants / items / properties / layers / items / properties / frame_color
        Added value: +{
        +  "description": "phone: a colour id of the device from list_devices; default its first.",
        +  "maxLength": 40,
        +  "type": "string"
        +}
      • addedInput schema / properties / variants / items / properties / layers / items / properties / height
        Added value: +{
        +  "description": "phone only: its height as a share of the canvas height, instead of width.",
        +  "exclusiveMinimum": 0,
        +  "maximum": 3,
        +  "type": "number"
        +}
      • addedInput schema / properties / variants / items / properties / layers / items / properties / orientation
        Added 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"
        +}
      • addedInput schema / properties / variants / items / properties / layers / items / properties / phone
        Added 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"
        +}
      • addedInput schema / properties / variants / items / properties / layers / items / properties / screenshot
        Added 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"
        +}
    • Changedcreate_project3 fields changed
      • changedInput schema / properties / canvas_size / description
        Previous 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)."
      • addedInput schema / properties / fold
        Added 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"
        +}
      • addedInput schema / properties / orientation
        Added 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"
        +}
    • Changededit_asset9 fields changed
      • addedInput schema / properties / changes / items / properties / canvas
        Added 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"
        +}
      • changedInput schema / properties / changes / items / properties / layer / description
        Previous 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."
      • changedInput schema / properties / changes / items / properties / op / description
        Previous 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."
      • changedInput schema / properties / changes / items / properties / op / enum
        Previous 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"
        +]
      • changedInput schema / properties / changes / items / properties / screen / description
        Previous 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."
      • changedInput schema / properties / changes / items / required
        Previous value: -[
        -  "op",
        -  "screen"
        -]New value: +[
        +  "op"
        +]
      • addedInput schema / properties / handle
        Added 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"
        +}
      • changedInput schema / properties / revision / description
        Previous 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."
      • changedInput schema / required
        Previous value: -[
        -  "asset_id",
        -  "revision",
        -  "changes"
        -]New value: +[
        +  "revision",
        +  "changes"
        +]
    • Changedexport_asset2 fields changed
      • addedInput schema / properties / handle
        Added 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"
        +}
      • removedInput schema / required
        Removed value: -[
        -  "asset_id"
        -]
    • Changedget_asset2 fields changed
      • addedInput schema / properties / handle
        Added 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"
        +}
      • removedInput schema / required
        Removed value: -[
        -  "asset_id"
        -]
    • Changedget_design_guide2 fields changed
      • changedInput schema / properties / asset / description
        Previous 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."
      • changedInput schema / properties / asset / enum
        Previous 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"
        +]
    • Changedget_export1 field changed
      • addedInput schema / properties / handle
        Added 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"
        +}
    • Changedmake_screenshot_set2 fields changed
      • changedInput schema / properties / canvas_size / description
        Previous 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."
      • addedInput schema / properties / orientation
        Added 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"
        +}
    • Addedreplace_screenshots
    • Addedsave_to_account
    • Changedtranslate_asset2 fields changed
      • addedInput schema / properties / handle
        Added 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"
        +}
      • changedInput schema / required
        Previous value: -[
        -  "asset_id",
        -  "language",
        -  "texts"
        -]New value: +[
        +  "language",
        +  "texts"
        +]
  2. 1 tool update
    • Changedcreate_design1 field changed
      • changedInput schema / properties / variants / items / properties / layers / items / properties / svg / description
        Previous 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."
  3. 12 tool updates
    • Addedcreate_design
    • Changedcreate_project2 fields changed
      • addedInput schema / properties / project_id
        Added 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"
        +}
      • addedInput schema / properties / same_project_as
        Added 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"
        +}
    • Addededit_asset
    • Addedexport_asset
    • Addedget_asset
    • Addedget_design_guide
    • Addedget_export
    • Addedlist_projects
    • Addedsearch_library
    • Addedtranslate_asset
    • Addedupdate_design
    • Addedupdate_project
  4. 1 tool update
    • Addedmake_screenshot_set
  5. 1 tool update
    • Changedcreate_project1 field changed
      • changedInput schema / properties / canvas_size / description
        Previous 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)."
  6. 4 tool updates
    • First observedcreate_project
    • First observedfinish_project
    • First observedget_workflow
    • First observedlist_devices

Related MCP Connectors

Related MCP Servers

  • A
    license
    A
    quality
    C
    maintenance
    Turn raw app screenshots into App Store & Google Play marketing screenshots from Cursor, Claude, or any MCP client.
    8
    6
    35 npm
    MIT
  • A
    license
    Not graded
    quality
    C
    maintenance
    Enables 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.
    MIT
  • A
    license
    A
    quality
    A
    maintenance
    An 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.
    6
    708 npm
    25
    MIT
Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.