Docs · connect your agent
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
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.
Add the server over HTTP transport with your key in the Authorization header.
claude mcp add --transport http shots \
https://shotsmcp.com/api/mcp \
--header "Authorization: Bearer smk_..."Drop the server into your client’s config. The shape is the same everywhere — an HTTP server URL and a bearer header.
{
"mcpServers": {
"shots": {
"type": "http",
"url": "https://shotsmcp.com/api/mcp",
"headers": {
"Authorization": "Bearer smk_..."
}
}
}
}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.
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
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.
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.
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.
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.
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.
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.
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.
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.
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.
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
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.
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.
No finding is advice. Each one ships three parts, so the agent can act without guessing:
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.