About AppScreen
AppScreen is an MCP server for app teams and agents to turn app captures into store-ready screenshots. It supports device frames, export sizes, and languages, with tools for rendering and checking job status.
Key features
- 01Render screenshots from layouts and image files
- 02Support store export sizes and languages
- 03Apply device frames
- 04Check asynchronous render status
Use cases
- 01Prepare App Store and Play Store listing images
- 02Create localized screenshot sets
- 03Track a queued screenshot export
MCP support
The server exposes screenshot rendering and render-status tools to MCP clients. It accepts image file paths from the local server environment.
Configuration
Local server config is the same for every client. Copy it into your client’s MCP config file.
npx -y @appscreen/mcpAPPSCREEN_API_KEYSecretOptional MCP key (mcm_live_…) from https://appscreen.co/account/keys. Omit for 5 free anonymous renders.APPSCREEN_BASE_URLOverride the API base URL. Defaults to https://api.appscreen.co.Local servers need a runtime on your machine (e.g. Node.js 18+). Config file locations differ by client; see your client’s docs.
Tools
2Saved tool list · updated 2w ago
| Parameter | Type | Required | Description |
|---|---|---|---|
| files | array | No | Low-level uploads + manual screensMeta binding. PREFER inline paths instead: put screenshot.path / screenshot.pathsByLang on each screen, bg.path on an image background, and path on image objects — the server assembles the upload + binding for you. Use this top-level files[] only if you're hand-managing screensMeta. |
| langs | array | Yes | Locales (catalog.langs). |
| sizes | array | Yes | Target canvas sizes (catalog.sizes[].id). |
| layout | string | No | One of catalog.layouts (default = `default`). |
| rounded | boolean | No | |
| screens | array | Yes | |
| screensMeta | array | No | |
| cornerRadius | string | No | |
| idempotencyKey | string | No |
Details
From the project README@appscreen/mcp
MCP server for AppScreen — generate App Store / Play Store screenshots from any MCP-capable agent (Claude Desktop, Claude Code, Cursor, Codex, etc.).
Install
# Latest, no install — recommended for end users
npx -y @appscreen/mcp
Configure (Claude Desktop)
~/Library/Application Support/Claude/claude_desktop_config.json:
{
"mcpServers": {
"appscreen": {
"command": "npx",
"args": ["-y", "@appscreen/mcp"],
"env": {
"APPSCREEN_API_KEY": "mcm_live_…"
}
}
}
}
Omit APPSCREEN_API_KEY for anonymous use (5 lifetime renders, then sign-up required).
Configure (other clients)
-
Claude Code:
claude mcp add appscreen -- npx -y @appscreen/mcp -
Cursor:
.cursor/mcp.json— same JSON shape as above. -
Codex:
codex mcp add appscreen -- npx -y @appscreen/mcp, or add to~/.codex/config.toml:[mcp_servers.appscreen] command = "npx" args = ["-y", "@appscreen/mcp"] env = { APPSCREEN_API_KEY = "mcm_live_…" }
Tools
render_screenshots— Accepts screens (layout JSON) and image files. Returns ajobId(keyed/async) or a download link (anon/inline). Free anon use capped at 5 lifetime.get_render_status— Polls ajobId. Returns status + signed download URL when done.
Pass images by path, not base64
The server runs locally, so give it a file path — it reads the bytes off disk. Do not base64-encode real screenshots into the call: an LLM emitting an 18k–90k-char base64 string drops a character partway down and the PNG renders black below it.
"files": [
{ "name": "1.png", "path": "~/app/screenshots/home.png" }, // ✅ preferred
{ "name": "2.png", "path": "/abs/path/settings.png" }
]
// base64 is accepted only for tiny synthetic test images:
// { "name": "x.png", "base64": "iVBORw0KG..." }
Bundle download URLs are signed and expire after ~1h. Re-poll to refresh.
Quota
Signed-in usage is metered in credits: 1 credit = 1 exported image (screens × sizes × languages). A failed export is refunded; auto-translate is free. An MCP key spends the credits of the workspace it was created in.
| Plan | Credits / month | Notes |
|---|---|---|
| Free | 50 | Any one size per export, English, 10 screens per export. 3 renders / hour. |
| Starter — $4 / mo | 400 | All 5 sizes, any 3 languages per export, auto-translate. 3 renders / hour. |
| Pro — $8 / mo | 2,500 | All 15 languages, 200 screens per export. Full-rate MCP. |
| Team — $29 / mo | 8,000 pooled | 3 seats included. Full-rate MCP. |
One-time credit packs work on every plan, including Free: 100 for $5, 400 for $15, 1,500 for $39, valid 12 months. Anonymous use (no key) is not metered in credits — it is capped at 5 renders, lifetime.
Every tool response includes _meta.quota = {used, cap, tier, resetAt}, plus balance (credits left) and, on a render submit, cost when the API reports them. For a signed-in caller used and cap count credits (cap − used = balance) and tier is the plan id; for an anonymous caller they count the 5 lifetime renders and tier is anon-mcp. When less than half is left the text content carries a short notice ("N credits left …"); below 20%, or at zero, the response also includes _meta.upgradeUrl.
An export the workspace can't cover fails with HTTP 402 insufficient_credits — the error text gives the cost and the balance. Full details: https://appscreen.co/pricing.
Environment
| Var | Purpose |
|---|---|
APPSCREEN_API_KEY | Optional. MCP key (mcm_live_…) from https://appscreen.co/account/keys. Works on every plan, Free included. Not the same as the programmatic ask_live_… API key. |
APPSCREEN_BASE_URL | Override API URL. Defaults to https://api.appscreen.co. |
APPSCREEN_MCP_CLIENT | Override client identifier (auto-detected from MCP initialize). |
License
MIT
Comments
New to MCP?
From what the protocol is to installing your first server, these answers cover most first questions.
An open protocol that defines how AI applications connect to external tools and data in a uniform way. Clients talk to the model; MCP servers provide tools, resources and prompt templates. They exchange standard messages, so one server can be reused by many clients.