StoreStage Remote MCP

Let an AI agent work on the same screenshot projects

StoreStage Pro exposes a structured automation surface over the Model Context Protocol (MCP). The editor and your agent share the same project, scene, validation, and entitlement rules — so an agent can only do what you could already do by hand in the studio.

What MCP actually gives an agent

MCP is an open protocol that lets AI clients like Claude, Cursor, and Codex call a defined set of tools on a remote server, instead of guessing at your product through screen scraping or a generic HTTP API. StoreStage runs a remote, OAuth-protected MCP server at https://mcp.storestage.studio/mcp. Your client authenticates as you, then calls the tools listed below — nothing more. The full catalog is 23 tools; the ones a client sees depend on the scopes you grant it, and the App Store Connect tools need their own scope.

Every tool an agent can call

Six groups, 23 tools in the full catalog. Reads never return screenshot pixels or file bytes. Editing a project's scene is always preview-then-apply; creating a project or attaching an asset is a one-shot write with its own quota or revision check. Rendering and exporting only read the project's current state — they never modify it.

Inspect

  • account.get_status

    Signed-in plan, MCP scopes, and feature flags.

  • themes.search

    Search the public theme catalog by name, device, or family; includes layout kind ("connected" | "panel").

  • themes.get

    Public catalog metadata for one theme including layout kind, plus its slots: screenshot slots, which panels have a headline, body and labels, and the layer ids you can move or hide.

  • themes.get_preview_image

    A link to a rendered placeholder-layout image of a theme (panel layout, device slots, colors — no real copy or screenshots), for comparing themes before picking one.

  • projects.list

    List cloud projects on the signed-in Pro account.

  • projects.get

    A redacted project manifest: copy, theme pins, asset IDs, revision.

  • sets.list

    List screenshot sets in a cloud project, including each set's locale, themeKind, and template layer ids for updateLayerOverride.

  • outputs.get

    Copy and asset IDs for one output. No screenshot pixels.

Create & edit

  • projects.create

    Create a cloud project. Name, brand colors, and a system font can be set in the same call.

  • projects.draft_from_brief

    Create a populated project draft from a brief in one high-level call: selects a theme, formats copy, binds screenshots, and returns a staged changeSetId for review.

  • changes.preview

    Preview a typed operation list against a project. Returns a diff and an immutable changeSetId. Nothing is persisted yet.

  • changes.apply

    Apply a previously previewed change set if the project's revision has not moved.

  • sets.translate

    Stage an AI translation of a screenshot set into a target App Store locale. Duplicates the set, translates copy (headlines, body, eyebrows), and returns a preview change set ready for changes.apply. Requires Pro.

Assets

  • assets.create_upload

    Create a short-lived signed upload URL and an assetId.

  • assets.attach

    Bind an uploaded file to a slot: a logo, a screenshot slide, a custom-image layer, or a custom font — see the bind shapes below.

Render

  • renders.create_preview

    Start an async preview render job and get back the studio's own Apple output sizes.

  • renders.get

    Poll a preview job by ID.

Export

  • exports.create

    Start an async PNG or ZIP export job. An iPhone ZIP carries both Apple display classes.

  • exports.get

    Poll an export job by ID.

  • exports.download

    Get a short-lived signed download URL for a finished export.

App Store Connect

  • app_store_connect.get_status

    Whether App Store Connect API credentials are configured for your account. Never returns private keys.

  • app_store_connect.list_apps

    Apps, versions, and localizations from App Store Connect for the configured account.

  • app_store_connect.upload_screenshots

    Upload a rendered export to an editable app version. An iPhone upload fills every Apple display set its size needs (create the job with exports.create kind zip), and replacing deletes the existing screenshots in every targeted set. A person must approve every upload in StoreStage first: the agent only receives an approval link.

Set-scoped operations — changeTheme, updateSet, reorderSlides, updateOutputCopy, layer operations, and screenshot/custom-image assets.attach binds — accept an optional setId. When omitted, they act on the device's currently active set. Passing setId directly lets you target any set in the project without needing a preceding selectSet:

Direct set targeting in changes.preview

[
  {
    "type": "updateOutputCopy",
    "payload": {
      "device": "iphone",
      "setId": "<target setId>",
      "index": 0,
      "patch": { "headline": "New Headline" }
    }
  }
]

To change several outputs at once, updateOutputCopy accepts a list of indexes ([0, 1, 2]) or "all" in place of a single index. Each output becomes its own operation and counts against the 30-operation limit. "all" skips outputs the patch cannot change (for example a panel without a label slot) and lists them in a warning; a list fails on the first such output.

You can also target specific sets directly in assets.attach by including setId in the bind payload without needing to switch the active set first:

assets.attach — targeted bind

{
  "projectId": "<projectId>",
  "expectedRevision": <the project's current revision>,
  "ticket": "<ticket from assets.create_upload>",
  "bind": { "target": "screenshot", "device": "iphone", "index": 0, "setId": "<target setId>" }
}

When setId is omitted, operations continue to act on the active set as before. You can still use selectSet in changes.preview when you want to switch which set is active in the studio.

Fast drafting with projects.draft_from_brief

Instead of executing multiple sequential tool calls to create a project, choose a theme, format copy per slide, and bind screenshots, you can call projects.draft_from_brief in one step. It produces a populated project draft and stages a reviewable changeSetId:

projects.draft_from_brief

{
  "name": "HabitPulse",
  "description": "Daily habit tracker. Track your streaks, visualize weekly completion stats, and share milestones with accountability partners.",
  "clientRequestId": "req-habitpulse-001"
}

Theme layout models: connected vs. panel

Themes in the StoreStage catalog advertise a kind property that defines their visual layout model:

  • Connected ("connected"): The theme is a continuous panoramic strip where artwork and composition span across panel seams. Changing one panel's copy length or layer placement affects the visual balance of the entire strip. StoreStage emits a connected_strip_rhythm warning during preview when copy or layers in a connected set are modified so agents can preserve overall balance.
  • Panel ("panel"): Panels are visually independent. Each panel has its own standalone background and composition, allowing copy and layers to be edited on one panel without affecting neighboring panels.

Locale sets & AI translation (Pro)

StoreStage Pro accounts can organize screenshot sets by BCP 47 locale (e.g. "en-US", "de-DE", "ar-SA"). Sets carry an optional locale property, enabling multi-language App Store screenshot localization with full support for Left-to-Right and Right-to-Left (RTL) typography, auto font-shrink scaling, and Arabic script fallbacks.

The sets.translate tool stages an AI translation of any set directly into a target locale:

sets.translate example

{
  "projectId": "<projectId>",
  "sourceSetId": "<source setId>",
  "targetLocale": "de-DE",
  "targetSetName": "iPhone - German",
  "clientRequestId": "trans-de-001"
}

Like scene edits, sets.translate returns a preview change set with a changeSetId and diff. Review the staged translated copy and apply with changes.apply.

Designed for reviewable changes

  • OAuth connection. Do not paste a StoreStage API key into chat — clients authorize in a browser tab.
  • Preview, then apply. Editing a project's scene uses typed change sets checked against the project's current revision, so a stale agent cannot silently overwrite newer work. Attaching an asset carries the same revision guard; rendering and exporting only read the current state and never modify it.
  • Assets stay out of tool messages. Files move through short-lived signed upload and download URLs, never as base64 in a tool call.
  • One authorization model. The UI, automation API, and MCP tools enforce the same account permissions and Pro entitlements.

Connect your AI client

Remote MCP is included with Pro. Every client below points at the same endpoint — https://mcp.storestage.studio/mcp — and supports OAuth Dynamic Client Registration, so you never need to create or paste a client ID by hand.

Recommended setup

Install the StoreStage plugin

The plugin adds the Remote MCP connection and StoreStage workflow guidance together. It is available from the same marketplace repository for Codex and Claude Code.

Claude Code plugin

Install the StoreStage plugin at user scope to get the MCP server and its guided screenshot workflows in every local Claude Code project.

Install with Claude Code

claude plugin marketplace add bahadirarslan/storestage-plugins
claude plugin install storestage@storestage-plugins --scope user

Start a new Claude Code session, then run /mcp to complete StoreStage OAuth. Claude's current plugin manifest does not expose a custom marketplace icon field, but the approved StoreStage brand assets remain bundled with the package.

View plugin source on GitHub

Cursor

Add a remote server entry to your global or project MCP config. Cursor detects that the server requires OAuth and opens a browser tab for you automatically.

~/.cursor/mcp.json

{
  "mcpServers": {
    "storestage": {
      "url": "https://mcp.storestage.studio/mcp"
    }
  }
}

Use .cursor/mcp.json inside a project instead of ~/.cursor/mcp.json to scope the connection to that project only.

Codex plugin

Install the StoreStage marketplace and plugin once. The package includes the branded Codex listing, Remote MCP connection, and StoreStage workflow guidance.

Install with Codex

codex plugin marketplace add bahadirarslan/storestage-plugins
codex plugin add storestage@storestage-plugins

Start a new Codex task after installation so the plugin and MCP tools load, then complete the browser-based StoreStage OAuth flow.

If your Codex release supports Remote MCP but does not yet include plugins, connect StoreStage directly instead:

Direct MCP fallback

codex mcp add storestage --url https://mcp.storestage.studio/mcp
codex mcp login storestage
View plugin source on GitHub

Claude connector

For claude.ai or Claude Desktop without the Code plugin, open Settings → Connectors → Add custom connector, paste the server URL, and sign in to StoreStage in the browser tab.

MCP server URL

https://mcp.storestage.studio/mcp

Other MCP clients

Any client that speaks MCP's Streamable HTTP transport with OAuth handles the connection the same way, but the config file's shape is not standardized — here is the exact key each of these expects:

VS Code — .vscode/mcp.json

{
  "servers": {
    "storestage": {
      "type": "http",
      "url": "https://mcp.storestage.studio/mcp"
    }
  }
}

Windsurf — ~/.codeium/windsurf/mcp_config.json

{
  "mcpServers": {
    "storestage": {
      "serverUrl": "https://mcp.storestage.studio/mcp"
    }
  }
}

Cline — ~/.cline/mcp.json

{
  "mcpServers": {
    "storestage": {
      "type": "streamableHttp",
      "url": "https://mcp.storestage.studio/mcp"
    }
  }
}

Zed — settings.json

{
  "context_servers": {
    "storestage": {
      "url": "https://mcp.storestage.studio/mcp"
    }
  }
}

Any other MCP client not listed here almost certainly uses one of these four shapes — check its docs for which one.