shots
Hosted MCP server for generating App Store screenshots, app icons, ASO listing copy, and localization for mobile apps.
Что умеет
- Shots: General command dispatch for Shots. Pass a command name and optional args. Call `help.schema` for a command's full JSON Schema, `help.examples` for recipes, or `help.search` to find commands. A
- Shots Batch: Execute up to 10 independent Shots commands in one roundtrip. Results are keyed by caller-provided id.
- Generate Screenshot: Generate one App Store screenshot for 3 generation credits. For small targeted changes to an existing screenshot, use `shots` command `screenshots.revise` instead. Pass a complete
Какие данные видит
Нужен ли аккаунт
Не нужен: сервер работает без входа
Hosted MCP server for generating App Store screenshots, app icons, ASO listing copy, and localization for mobile apps. Works with Codex, Claude Code, Cursor, Gemini CLI, and all MCP-compatible AI coding agents. Generates professional app marketing assets directly from your codebase using AI.
Как подключить
Как подключить shots к Claude
Адрес сервера, который нужно вставить в настройках Claude:
https://shots--shots.run.tools
- Откройте Claude (сайт claude.ai или приложение для компьютера).
- Перейдите в Настройки → Коннекторы (в английском интерфейсе: Settings → Connectors).
- Нажмите Добавить пользовательский коннектор (Add custom connector).
- Вставьте адрес сервера, скопированный ниже, в поле URL удалённого MCP-сервера и нажмите Добавить.
- В чате нажмите + → Коннекторы и включите новый коннектор.
Пользовательские коннекторы доступны на тарифах Free, Pro, Max, Team и Enterprise. На Free можно добавить только один. В Team и Enterprise коннектор сначала добавляет владелец организации в Настройки организации → Коннекторы.
Авторизация
После нажатия Добавить откроется окно входа в сервис. Войдите под своим аккаунтом и подтвердите доступ. Пароль Claude не видит.
Как подключить shots к ChatGPT
Адрес сервера, который нужно вставить в настройках ChatGPT:
https://shots--shots.run.tools
- Откройте ChatGPT в браузере (chatgpt.com). Нужен тариф Plus, Pro, Business, Enterprise или Edu.
- Один раз включите режим разработчика: Настройки → Приложения → Дополнительные настройки → Режим разработчика (Settings → Apps → Advanced settings → Developer mode).
- Откройте Настройки → Коннекторы и нажмите Создать (Create).
- Заполните форму: Название (любое), Описание (одна фраза, что делает сервис), URL MCP-сервера (скопируйте ниже).
- В поле Аутентификация выберите OAuth, если сервис требует вход, иначе Нет. Нажмите Создать.
- В новом чате откройте + → Приложения/Коннекторы и включите коннектор.
Название раздела у OpenAI менялось (Connectors → Apps/Plugins). Если пункт называется иначе, ищите «режим разработчика» в настройках. В рабочих пространствах Business/Enterprise администратор должен разрешить пользовательские коннекторы.
Авторизация
При первом использовании ChatGPT откроет окно входа в сервис. Войдите и подтвердите доступ.
Как подключить shots к Cursor
Адрес сервера, который нужно вставить в настройках Cursor:
https://shots--shots.run.tools
Быстрый способ: нажмите кнопку Открыть в Cursor ниже, Cursor сам предложит добавить сервер.
Вручную:
- В Cursor откройте Settings → Cursor Settings → MCP и нажмите Add new global MCP server.
- Вставьте JSON, скопированный ниже, в открывшийся файл
~/.cursor/mcp.json(для одного проекта:.cursor/mcp.jsonв корне проекта). - Сохраните файл. Сервер появится в списке MCP; при необходимости пройдите авторизацию по кнопке рядом с ним.
Авторизация
Если сервис требует вход, рядом с сервером в списке MCP появится кнопка авторизации.
Список инструментов сервера (6)
Технические названия из tools/list. Нужны только разработчикам.
| shots | General command dispatch for Shots. Pass a command name and optional args. Call `help.schema` for a command's full JSON Schema, `help.examples` for recipes, or `help.search` to find commands. Available commands: | Command | Risk | Params | Description | |---|---|---|---| | `apps.get` | none | appId | App context (metadata, listings, jobs) | | `apps.import` | medium | [appId], [appStoreUrl], [appStoreId], [country], [locale] | Import app from App Store (creates R2 media) | | `apps.list` | none | — | List user's apps | | `apps.update_listing` | low | appId, [locale], [title], [subtitle], [description], [keywords[]], [whatsNew] | Save locale-specific App Store listing copy | | `apps.update_research` | low | appId, research | Write/replace app research markdown | | `apps.upsert` | low | [appId], [name], [appStoreId], [bundleId], [appStoreUrl], [country], [primaryLocale], [developer], [genres[]], [copyright], [description], [ratingAverage], [ratingCount], [version], [releaseNotes] | Create or update app record | | `media.import_url` | medium | appId, kind=app_store_screenshot|app_screenshot|reference|icon|icon_moodboard, sourceUrl, [locale], [filename] | Upload image from URL to R2 | | `screenshots.delete` | low | mediaId | Delete screenshot and remove it from listing selections | | `screenshots.get` | none | mediaId | Fetch one screenshot | | `screenshots.list` | none | [appId], [locale], [limit] | List screenshots with stable IDs | | `screenshots.listing` | none | appId, [platform], [locale] | List screenshots selected for an app's store page (defaults to English/en-US) | | `screenshots.promote` | low | mediaId | Promote screenshot to App Store listing | | `screenshots.revise` | high | mediaId, feedback, [referenceMediaIds[]] | Revise screenshot (1 generation credit) | | `screenshots.translate` | high | mediaId, locale, [textMappings] | Translate screenshot (1 generation credit) | | `screenshots.unpromote` | low | mediaId | Remove from listing | | `icons.delete` | low | mediaId | Delete an app icon candidate | | `icons.get` | none | mediaId | Fetch one app icon | | `icons.list` | none | appId | List generated and imported app icons | | `icons.set_current` | low | mediaId | Set an app icon as the current selected icon | | `gallery.browse` | none | [search], [category], [style], [color], [device], [tone], [font], [tag], [screenType], [sort=recent|popular|name], [page], [perPage], [limit], [groupLimit] | Browse gallery apps with Typesense filters and facets | | `gallery.categories` | none | — | List all gallery categories with app counts | | `gallery.ensure_app` | medium | input, [country], [screenshotLimit] | Find or import an App Store app into the public inspiration gallery and return its public page URL and screenshots | | `gallery.favorites` | none | [limit] | List user's favorited gallery screenshots | | `gallery.get_app` | none | [slug], [galleryAppId], [appStoreId], [screenshotLimit] | Get one public gallery app, its public page URL, and inspiration screenshots | | `gallery.search_apps` | none | query, [category], [style], [color], [device], [tone], [font], [tag], [screenType], [sort=recent|popular|name], [page], [perPage], [limit] | Text search for apps in gallery | | `gallery.search` | none | query, [category], [style], [color], [device], [tone], [font], [tag], [screenType], [sort=recent|popular|name], [page], [perPage], [limit] | Search gallery screenshots by text query | | `gallery.search_similar` | none | query, [category], [style], [color], [device], [tone], [font], [tag], [screenType], [sort=recent|popular|name], [page], [perPage], [limit] | Search public gallery screenshots by visual style or concept text | | `gallery.submit_app` | medium | input, [country] | Submit app to gallery from an App Store URL or numeric ID and return its public gallery page URL — prefer gallery.ensure_app for inspiration workflows | | `gallery.toggle_favorite` | low | galleryScreenshotId | Favorite or unfavorite a gallery screenshot | | `jobs.get` | none | jobId | Check generation job status | | `jobs.list` | none | appId, [status], [limit] | List recent generation jobs for an app | | `usage.get` | none | — | Check plan, usage, billing state | | `appstore.lookup` | none | [appStoreUrl], [appId], [country], [locale] | Look up public App Store metadata | | `search.app_images` | none | appId, query, [kind=app_store_screenshot|app_screenshot|reference|icon|icon_moodboard], [limit] | Search media descriptions for uploaded screenshots and references | | `feedback.report` | low | category=user_feedback|feature_request|bug|quality_issue|unsupported_workflow|user_frustration|user_delight|other, title, details, [sentiment=negative|neutral|positive|mixed], [severity=low|medium|high], [tags[]], [appId], [mediaId], [jobId], [relatedTool], [relatedCommand], [userQuote], [agentContext] | Report user feedback, product ideas, unsupported workflows, tool/infrastructure bugs, or quality problems to the Shots team | | `help.examples` | none | [command], [tag], [limit] | Show examples defined by each command | | `help.schema` | none | command | Show the full JSON Schema for one command's args | | `help.search` | none | query, [limit] | Search available command names, descriptions, args, and tags | |
| shots_batch | Execute up to 10 independent Shots commands in one roundtrip. Results are keyed by caller-provided id. |
| generate_screenshot | Generate one App Store screenshot for 3 generation credits. For small targeted changes to an existing screenshot, use `shots` command `screenshots.revise` instead. Pass a complete plain-text or markdown prompt — the server appends dimensions, constraints, and reference metadata. When using public gallery inspiration, pass `galleryInspirationScreenshotId`; it is style-only and uses medium generation quality. Call this tool again for each additional screenshot. |
| generate_icon_moodboard | Generate a 2048x2048 moodboard with ~20 numbered app icon concepts. Use this as a brainstorming step — the user picks favorites by number, then generate individual icons. Costs 5 generation credits. |
| generate_icon | Generate one 1024x1024 app icon source artwork. Provide style direction (style, symbol, background) to control the output. Costs 3 generation credits. |
| billing | Manage billing: create a checkout URL, buy generation credit top-ups, or open the billing portal. |