Docs · connect your agent

Point your agent at shots-mcp.

The whole engine is a set of tools plus exhaustive feedback. Connect over MCP or the REST API, hand it your app, and let it run the loop to a store-ready set. This page is the map.

Connect

One endpoint. One API key.

Everything runs through a single MCP endpoint, authorized by an API key with the smk_ prefix — mint one on your account page. The same key authorizes the REST API.

Claude Code

Add the server over HTTP transport with your key in the Authorization header.

TERMINAL · claude mcp addshell
claude mcp add --transport http shots \
  https://shotsmcp.com/api/mcp \
  --header "Authorization: Bearer smk_..."

Any MCP client

Drop the server into your client’s config. The shape is the same everywhere — an HTTP server URL and a bearer header.

CONFIG · mcp.jsonshell
{
  "mcpServers": {
    "shots": {
      "type": "http",
      "url": "https://shotsmcp.com/api/mcp",
      "headers": {
        "Authorization": "Bearer smk_..."
      }
    }
  }
}

REST API

Every MCP tool is a thin wrapper over the same REST endpoints. If you’re building your own agent, call the API directly — the key and the routes are identical.

TERMINAL · curlshell
curl https://shotsmcp.com/api/apps \
  -H "Authorization: Bearer smk_..." \
  -H "Content-Type: application/json" \
  -d '{"name":"Nightjar","one_liner":"a sleep tracker for night owls"}'

The loop

Nine tools, in order. The agent drives.

You never call these by hand. The server’s instructions teach the agent the loop and the iteration economics — patches are free, so it keeps refining until the critic clears it.

  1. 01INTAKE

    answer_intake

    The agent answers eight questions about the app — audience, outcome, proof, world. The response returns the questions still outstanding until the brief is complete.

  2. 02TERRITORY

    get_brief

    It reads back a creative territory: mood vocabulary, a sanctioned craft voice, a prop world, two or three theme directions to offer you, and the moves banned for this app.

  3. 03PLAN

    set_design_plan

    It commits a design plan — signature concept, palette mode, seam plan, layout systems. This is the contract critique later scores the render against.

  4. 04GENERATE

    generate_assets

    Backgrounds, props, device frames, and chips are generated to the app’s world. Deltas go through edit_asset — edit-with-reference, never a fresh re-roll.

  5. 05COMPOSE

    create_set · patch_set

    Layers are placed on the doc per the layout grammar — one idea per slide, an oversized cropped phone, a floating call-out, real proof. Patches are surgical and free.

  6. 06LINT

    lint_set

    A DOM walk plus pixel verification catches collisions, clipping, weak contrast, timid scale, and duplicate text — returned as machine-readable facts with layer ids and coordinates.

  7. 07CRITIQUE

    critique_set

    A multi-vote critic scores the render against the design plan and returns the roadmap to 9.5: which caps bind, what unlocks them, and a fix for every finding.

  8. 08PATCH

    patch_set

    The agent applies the findings’ fixes, then re-lints and re-critiques. Patches don’t spend the generation budget, so it iterates until two clean passes in a row.

  9. 09EXPORT

    export_set

    What clears the bar renders at every App Store device size with real frames, zipped to a URL — ready to drop into App Store Connect.

How feedback works

A complete roadmap. Not a grade.

Critique’s job isn’t to judge — it’s to hand the agent everything it needs to reach 9.5 on the next pass, with nothing left to guess.

CAPS

Every score cap is explained

A defect-free set is a 7.5 — the bar is 9 and up. Critique names each binding cap with the number that unlocks it, so the agent knows exactly what to change:

capped at 7.5 by timid scale — largest element 31% vs the 40% bar; missing dynamism: spanning, pop-out — recipes attached.

FINDINGS

Findings carry executable fixes

No finding is advice. Each one ships three parts, so the agent can act without guessing:

what
the gate, severity, and pixel coordinates of the problem
how
a concrete patch op or tool call that resolves it
why
a one-paragraph doctrine lesson, so the next set avoids it
DO_NOT_TOUCH

What works is preserved

Every pass returns a next_pass_plan with a do_not_touch list, carried verbatim. Slides and seams that already clear the bar are fenced off, so iterating one weak slide never regresses a strong one.