scratch-mcp
scratch-mcp
Сервер Model Context Protocol для редактирования проектов Scratch .sb3, построенный на scratch4js. Он держит один проект открытым в памяти, предоставляет поверхность редактирования библиотеки в виде инструментов MCP и сохраняет изменения на диск.
Также он включает мост live-reload на http://localhost:9060. Если установлен пользовательский скрипт TurboWarp Desktop, каждый вызов save_project перезагружает проект в редакторе вживую — поэтому изменения агента появляются немедленно.
Install
npx scratch-mcp # serves MCP over stdioRelated MCP server: scratch-mcp
Develop
MCP-сервер находится в корне репозитория; библиотеки, на которых он построен, являются пакетами рабочей области в packages/.
pnpm install
pnpm run build # builds scratch4js, s-api4js and the userscript
pnpm start # serves MCP over stdioНастройка MCP-клиента
{
"mcpServers": {
"scratch": {
"command": "node",
"args": ["/abs/path/to/ScratchMCP/src/index.js"]
}
}
}Установите значение SCRATCH_MCP_BRIDGE_PORT, чтобы изменить порт моста (по умолчанию 9060). Если порт занят, сервер все равно запускается; отключается только live reload.
Установка в виде MCP Bundle (.mcpb)
Для установки в один клик в Claude Desktop и других клиентах, поддерживающих MCPB, этот сервер упаковывается как MCP Bundle — единый файл .mcpb, содержащий сервер и автономный node_modules.
pnpm run mcpb # → dist/scratch-mcp-<version>.mcpbЗатем откройте .mcpb в вашем клиенте (в Claude Desktop перетащите его в Settings → Extensions). Бандл предоставляет один параметр — порт моста live-reload — и не требует никакой другой настройки. Сборка (scripts/build-mcpb.mjs) подключает пакеты рабочей области scratch4js и s-api4js как tarball и размещает git scratch-vm и его peer-зависимости в плоском node_modules, как требует MCPB. manifest.json — источник истины для бандла (его версия проставляется из package.json при сборке).
Инструменты
Проект
open_project { path }— загружает.sb3в память.save_project { path?, compressionLevel? }— сохраняет его обратно (и выполняет live-reload).project_info— цели, расширения, мониторы, метаданные.
Сайт Scratch (онлайн-проекты, через s-api4js)
scratch_login { username?, password? }— вход на scratch.mit.edu (по умолчанию$SCRATCH_USER/$SCRATCH_PASS). Сессия живет в памяти только для процесса сервера.open_scratch_project { projectId }— скачивает проект по идентификатору и открывает его для редактирования (открытые проекты не требуют входа; ваши собственные неопубликованные — требуют).push_to_scratch { projectId?, confirm? }— сохраняет открытый проект обратно на scratch.mit.edu, перезаписывая его онлайн (сначала загружает медиафайлы, затемproject.json).share_project { projectId?, confirm? }— публикует проект, делая его общедоступным.
push_to_scratchиshare_projectизменяют живой проект, поэтому они всегда сначала запрашивают подтверждение — через MCP elicitation-подсказку, если ваш клиент её поддерживает, либо через обязательно требованиеconfirm: true(которое агент должен устанавливать только после вашего согласия).
Чтение
list_sprites— показывает всех спрайтов с позицией/размером/медиа.get_target { name }— полные детали спрайта или"Stage".get_target_json { name, pointer? }— исходная записьproject.jsonдля цели (блоки, костюмы, звуки и т.д.) или поддерево по JSON Pointer. Прочитайте это перед созданиемpatch_target.
Справочник по блокам (чтобы агент знал, какие блоки существуют и как их заполнять)
list_blocks { category? }— каталог стандартных опкодов, каждый со своей категории, формой (hat / stack / c-block / cap / reporter / boolean) и именами своих входов и полей. Генерируется при запуске из установленногоscratch-vm, поэтому остаётся синхронизированным.get_block_schema { opcode, target? }— полная схема для одного опкода: каждый вход с его sb3 shadow-кодированием (например, текстовый вход —[1, [10, "hi"]), каждое поле с перечисленнымиoptionsдля выпадающих списков, и готовый к адаптации пример JSON-блока. Динамические пункты меню (спрайты, звуки, костюмы, сообщения и т.д.) заполняются из открытого проекта; передайтеtarget, чтобы перечислить костюмы и звуки конкретного спрайта. Охватываются и встроенные блоки расширений (pen_ *,music_ *,microbit_ *и т.д.), сгенерированные изgetInfo()каждого расширения.
Расширения
enable_extension { id, url? }— регистрирует расширение, чтобы его блоки загружались и отображались в палитре (требуется перед использованием любого блока<id>_…). Укажите толькоidдля встроенного (pen, music, videoSensing, text2speech, translate, makeymakey, microbit, ev3, boost, wedo2, gdxfor); добавьтеurlдля пользовательского/стороннего (TurboWarp) расширения.list_blocks { category: "<id>" }иget_block_schemaописывают встроенные блоки расширений;patch_targetпредупреждает, когда блок использует не включённое расширение. Пользовательские расширения не являются прозрачными — повторяйте существующий блок черезget_target_json.
Редактирование raw JSON (diff/patch)
patch_target { name, patch }— применяет RFC 6902 JSON Patch к raw JSON цели. Так вы редактируете скрипты (blocks) спрайта или любые поля, не покрытые более высокоуровневыми инструментами — для только созданного спрайта или существующего. Пути — это JSON Pointer вget_target_json; patch применяется атомарно (все или ничего), и результат содержит предупреждающиеwarningsдля неизвестных опкодов или входов. Правка массивовcostumes/soundsне перемещает байты ассетов — для этого используйтеadd_costume/remove_costume.
Спрайты и сцена
set_sprite { name, x?, y?, size?, direction?, visible?, draggable?, rotationStyle?, layerOrder?, volume? }add_sprite { name, ...props }/remove_sprite { name }/rename_target { name, newName }set_stage { tempo?, videoState?, videoTransparency?, volume? }
Переменные, списки, сообщения (target — имя спрайта или "Stage")
set_variable { target, name, value }/delete_variable { target, name }set_list { target, name, items }/delete_list { target, name }add_broadcast { name }
Костюмы и звуки
add_costume { target, name, path, dataFormat?, rotationCenterX?, rotationCenterY? }remove_costume { target, name }add_sound { target, name, path, data? }/remove_sound { target, name }
Запуск и тестирование (безголоввная TurboWarp VM, в процессе сервера)
vm_load— загружает открытый проект в безголовую VM (учитывает изменения в памяти).vm_green_flag— нажимает зелёный флаг (очищает пузыри, вопрос, ошибки).vm_run { seconds?, times?, untilIdle?, paced? }— продвигает VM, затем возвращает состояние и временную линиюevents(сказать/думать, сообщения, вопрос/ответ, ошибки) с последнего запуска.vm_state— мгновенный снимок: позиция/размер/направление/костюм/видимость каждого спрайта, переменные, списки, мониторы, пузыри «сказать/подумать», ожидающий вопрос, выполняемые потоки, ошибки.vm_input { keys?, mouse }, mouse?— подает клавиатурный/мышиный ввод и отвечает наask and wait.vm_stop— останавливает все скрипты.
Live reload и скриншоты (требуют мост + пользовательский скрипт)
reload { path? }— загружает.sb3из диска в редакторе.run_project/stop_project— зелёный флаг / стоп.screenshot— снимает живое игровое поле как PNG без потерь, для случаев, когда важны точно попадающиеся пиксели. Не принимает параметров.screenshot_jpeg { quality? }— то же изображение, перекодированное в сжатый JPEG (меньше, дешевле при чтении;quality1–100, по умолчанию 80).
Запуск и тестирование проекта
Инструменты vm_* встраивают TurboWarp's scratch-vm (JIT-сторс) в этот процесс — без браузера и без WebGL. Цикл: редактируйте → vm_load → vm_green_flag → vm_run → читайте vm_state → проверяйте. Возвращает структурированное состояние (значения переменных, позиции спрайтов, пузыри «сказать»), против которого агент может напрямую выполнять проверки — это намного лучше, чем анализировать пиксели, и достаточно детерминированно для CI.
Безголовая VM не имеет ни рендерера, ни аудио: метаданные костюмо (можно выполнять логику по имени/номеру костюма), но блоки с целиком на рендер (задевание цвета/спрайта/края, перо) и звук не работают. Чтобы увидеть настоящую отрендеренную сцену, запустите проект в TurboWarp Desktop и выполните screenshot.
События
Заметные события — say/think, broadcast, greenflag, stop, question/answer и error времени запуска/компиляции, каждое с { level, type, message , …fields } — отображаются двумя способами:
В результате
vm_run(events): упорядоченный временной ряд с предыдущегоvm_run. Это канал для агента — модель читает его прямо в результате инструмента и может проверять последовательность, а не только конечное состояние. Всегда включён.Как MCP-лог-уведомления (
notifications/message,logger: "scratch-vm"): клиентский/пользовательский канал для представления логов хоста. Выключен, пока клиент не повысит уровень логгирования черезlogging/setLevel—"info"для %активности,"debug"для добавления граница запуска и отмены пузырей,"warning"ить только ошибки. (Бильшие/меньшинство клиентов не передают уведомления обратно модели, поэтому существует каналvm_run.)
Повторяющиеся одинаковые пузыри say/think дедуплицируются, чтобы say в цикле не завалил ни один канал.
Как работает live reload
Мост — это обычный WebSocket + HTTP-сервер. Пользовательский скрипт подключается по WebSocket и обрабатывает JSON-запросы (loadSB3 / start / stop / screenshot). При loadSB3 он получает байты по GET /get.sb3?path=… и загружает их в VM в TurboWarp; save_project сначала записывает файл, а затем отправляет loadSB3, поэтому редактор всегда показывает последнее сохранение. Снимок возвращается как PNG, который сервер передаёт без изменений (screenshot) или перекодирует в сжатый JPEG (screenshot_jpeg).
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Servers
- FlicenseNot gradedqualityNot gradedmaintenanceEnables the generation, management, and validation of Apple Shortcuts (.shortcut files) by providing tools to search actions and build control flow blocks. It allows users to programmatically create and analyze shortcut structures for deployment on iOS and macOS devices.
- AlicenseNot gradedqualityAmaintenanceEnables AI agents to programmatically edit Scratch .sb3 projects and preview changes live in TurboWarp Desktop via MCP tools and a live-reload bridge.1Mozilla Public 2.0
- AlicenseNot gradedqualityBmaintenanceEnables AI agents to create, compile, and run Scratch projects by editing plain text and using a live editor loop.18Mozilla Public 2.0
- AlicenseAqualityAmaintenanceEnables AI agents to inspect, create, edit, debug, and playtest projects inside the Roblox editor via 29 lean tools, with push-based SSE transport, editor-safe script edits, and batched undoable writes.292MIT
Related MCP Connectors
Control Unreal Engine to browse assets, import content, and manage levels and sequences. Automate…
Browse, create, edit, and export SVGator animated SVG projects via your SVGator account.
Drive a live Cinevva game session: edit game files, import CC0 assets, preview changes.
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/AstroBlocksMod/ScratchMCP'
If you have feedback or need assistance with the MCP directory API, please join our Discord server