Turn your app's screens into editable App Store and Google Play screenshot sets, from your agent.
Maintain this server? Claim it
Call this server's tools from your browser. Nothing to install.
Requests go through mcptry because browsers can't call most MCP servers directly. Header values are sent to the server for that request only and are never stored or logged.
Tool list from our last check. Connect live to refresh it.
Design a finished App Store / Google Play screenshot set from uploaded screenshots. Step 2 of 3. Returns immediately with a review link while the set is designed in the background (about 1–2 minutes) — then call get_screenshot_set to wait for it. The result is three art directions sharing one set of headlines, each fully editable in the LaunchShots editor. Write app_description from the real source: the README, store listing, or the app's own copy — what it does, who it's for, and what makes it different. Specific beats generic; the headlines are only as sharp as this. Either pass set_id from prepare_screenshot_upload (preferred), or pass the screenshots inline as base64 if you cannot run shell commands (keep each under ~1 MB). Calling again with the same set_id after a failure retries it; nothing is charged for a failed run.
The app’s name as it appears in the store.
ios for the App Store, android for Google Play.
What the app does, who it is for and what sets it apart — 2–6 specific sentences drawn from the README, store listing or product copy.
The set_id from prepare_screenshot_upload, once its screenshots are uploaded.
Store language to write the headlines in, e.g. en-US, de-DE, ja, pt-BR. Defaults to en-US.
Optional art direction, e.g. "dark and premium", "playful, uses our brand orange #FF6B00".
Only if you cannot upload with prepare_screenshot_upload: the screenshots inline, each under ~1 MB.
Also produce the matching iPad / Android tablet set. Counts as a second generation; needs an API key.
This tool isn't marked read-only, so it may change something on the server or in an account you connected.
Design a finished App Store / Google Play screenshot set from uploaded screenshots. Step 2 of 3. Returns immediately with a review link while the set is designed in the background (about 1–2 minutes) — then call get_screenshot_set to wait for it. The result is three art directions sharing one set of headlines, each fully editable in the LaunchShots editor. Write app_description from the real source: the README, store listing, or the app's own copy — what it does, who it's for, and what makes it different. Specific beats generic; the headlines are only as sharp as this. Either pass set_id from prepare_screenshot_upload (preferred), or pass the screenshots inline as base64 if you cannot run shell commands (keep each under ~1 MB). Calling again with the same set_id after a failure retries it; nothing is charged for a failed run.
| Argument | Type | Description |
|---|---|---|
| set_id | string | The set_id from prepare_screenshot_upload, once its screenshots are uploaded. |
| app_name* | string | The app’s name as it appears in the store. |
| language | string | Store language to write the headlines in, e.g. en-US, de-DE, ja, pt-BR. Defaults to en-US. |
| platform* | string | ios for the App Store, android for Google Play. |
| style_note | string | Optional art direction, e.g. "dark and premium", "playful, uses our brand orange #FF6B00". |
| screenshots | array | Only if you cannot upload with prepare_screenshot_upload: the screenshots inline, each under ~1 MB. |
| include_tablet | boolean | Also produce the matching iPad / Android tablet set. Counts as a second generation; needs an API key. |
| app_description* | string | What the app does, who it is for and what sets it apart — 2–6 specific sentences drawn from the README, store listing or product copy. |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"app_name",
"app_description",
"platform"
],
"properties": {
"set_id": {
"type": "string",
"maxLength": 80,
"description": "The set_id from prepare_screenshot_upload, once its screenshots are uploaded."
},
"app_name": {
"type": "string",
"maxLength": 120,
"minLength": 1,
"description": "The app’s name as it appears in the store."
},
"language": {
"type": "string",
"maxLength": 32,
"description": "Store language to write the headlines in, e.g. en-US, de-DE, ja, pt-BR. Defaults to en-US."
},
"platform": {
"enum": [
"ios",
"android"
],
"type": "string",
"description": "ios for the App Store, android for Google Play."
},
"style_note": {
"type": "string",
"maxLength": 500,
"description": "Optional art direction, e.g. \"dark and premium\", \"playful, uses our brand orange #FF6B00\"."
},
"screenshots": {
"type": "array",
"items": {
"type": "object",
"required": [
"data_base64"
],
"properties": {
"data_base64": {
"type": "string",
"maxLength": 2000004,
"description": "The image file, base64-encoded (no data: prefix)."
}
}
},
"maxItems": 10,
"minItems": 1,
"description": "Only if you cannot upload with prepare_screenshot_upload: the screenshots inline, each under ~1 MB."
},
"include_tablet": {
"type": "boolean",
"description": "Also produce the matching iPad / Android tablet set. Counts as a second generation; needs an API key."
},
"app_description": {
"type": "string",
"maxLength": 4000,
"minLength": 1,
"description": "What the app does, who it is for and what sets it apart — 2–6 specific sentences drawn from the README, store listing or product copy."
}
}
}Show which LaunchShots account this connection uses and how many generations it has left. Without an API key, explains the free tier and how to connect an account.
No arguments.
{
"type": "object",
"properties": {}
}Check on a screenshot set, waiting up to wait_seconds for it to finish. Step 3 of 3. When it is ready this returns the review link, the headline written for every screen and the three directions. Share the link with the user: they choose a direction and the set opens in the LaunchShots editor (free signup if they are not signed in). If it is still generating, call again — a set usually takes 1–2 minutes.
| Argument | Type | Description |
|---|---|---|
| set_id* | string | The set_id (ls_set_…). |
| wait_seconds | integer | How long to wait for a set that is still generating (0–50, default 45). |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"set_id"
],
"properties": {
"set_id": {
"type": "string",
"maxLength": 80,
"description": "The set_id (ls_set_…)."
},
"wait_seconds": {
"type": "integer",
"maximum": 50,
"minimum": 0,
"description": "How long to wait for a set that is still generating (0–50, default 45)."
}
}
}List the most recently edited projects in this API key's LaunchShots account, with a link to open each in the editor. Requires an API key.
| Argument | Type | Description |
|---|---|---|
| limit | integer | How many to return (default 10). |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"limit": {
"type": "integer",
"maximum": 25,
"minimum": 1,
"description": "How many to return (default 10)."
}
}
}Start a screenshot set and get one upload URL per screenshot. Step 1 of 3. Pick the app's key screens — one per core feature, in roughly the order a new user would care about them — captured with realistic content. Avoid empty states, onboarding walls, permission dialogs, debug banners and lorem ipsum: the headlines are written from what is on screen. Upload each file with an HTTP PUT of the raw bytes to its URL (the response includes ready-to-run curl commands). URLs are valid for 2 hours; PUT to the same slot again to replace a file. Then call generate_screenshot_set with the returned set_id.
| Argument | Type | Description |
|---|---|---|
| screenshot_count* | integer | How many screenshots you will upload (1–10; 3–8 makes the best set). |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"screenshot_count"
],
"properties": {
"screenshot_count": {
"type": "integer",
"maximum": 10,
"minimum": 1,
"description": "How many screenshots you will upload (1–10; 3–8 makes the best set)."
}
}
}