# Screenery > A package registry for product screenshots. CI pushes screenshots on every > build; each one gets a stable public URL that updates itself on release: > https://cdn.screenery.dev/{org}/{project}/{asset}@latest.png Screenery is onboarded by an agent. Add the MCP server to your agent host, then say: "Add the Screenery MCP server and set up self-updating screenshots for this repo." ## Add the MCP server ### Claude Code ``` claude mcp add screenery -- npx -y screenery mcp ``` ### Codex (~/.codex/config.toml) ``` [mcp_servers.screenery] command = "npx" args = ["-y", "screenery", "mcp"] ``` ### Cursor (.cursor/mcp.json) ``` { "mcpServers": { "screenery": { "command": "npx", "args": [ "-y", "screenery", "mcp" ] } } } ``` ### VS Code ``` code --add-mcp '{"name":"screenery","command":"npx","args":["-y","screenery","mcp"]}' ``` ### Any MCP host ``` { "mcpServers": { "screenery": { "command": "npx", "args": [ "-y", "screenery", "mcp" ] } } } ``` ### No install ``` https://app.screenery.dev/mcp ``` The server's instructions carry the whole onboarding runbook; every tool result names the next tool. The one thing a person does is approve a sign-in code once, in the console at https://app.screenery.dev/device. ## Read more - https://app.screenery.dev/llms-full.txt — the full onboarding guide, the URL grammar, the MCP server's runbook, and the MCP matrix, in one file - https://app.screenery.dev/skills.txt — skills written for Screenery jobs. Each one is a Markdown file you fetch and write to `.claude/skills/`; the MCP server points at the one that fits a repository but cannot install it. - https://github.com/jfreal/screenery — source - https://app.screenery.dev/ — the console (sign in with GitHub) ## Example A README embeds a screenshot with that same shape. The names are the ones you publish. `@latest` follows the repository's default branch unless the project has `manual_promotion` on: ``` ![{org}/{project}/{asset}@latest](https://cdn.screenery.dev/{org}/{project}/{asset}@latest.png) ```