scratch-mcp
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
No arguments | |||
Instructions
Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.
This server publishes no instructions, or was last inspected before Glama recorded them.
Capabilities
Features and capabilities supported by this server
Protocol revision2025-11-25
| Capability | Details |
|---|---|
| tools | {
"listChanged": true
} |
| logging | {} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| open_projectA | Load an .sb3 file from disk into memory for editing. |
| save_projectA | Write the open project back to an .sb3 file (defaults to the path it was opened from). If the TurboWarp Desktop userscript is installed, the editor reloads the file automatically. |
| project_infoA | Summarize the open project: targets, extensions, monitors and meta. |
| scratch_loginA | Authenticate with a scratch.mit.edu account so the server can open your projects from the website and (with your confirmation) save edits back and publish them. Credentials default to the SCRATCH_USER / SCRATCH_PASS environment variables if omitted. The session is kept in memory for this server process only. |
| open_scratch_projectA | Download a project from scratch.mit.edu by id and hold it open in memory for editing — the same in-memory project the other editing tools act on. Shared projects open without login; your own unshared projects need |
| push_to_scratchA | Save the open project back to scratch.mit.edu, overwriting the online project's contents (uploads its costumes/sounds, then writes project.json). Requires login and ownership of the project. This edits the live project, so it always asks the user to confirm first (set |
| share_projectA | Publish a project on scratch.mit.edu so it becomes publicly visible (PUT /proxy/projects//share). Requires login and ownership. Publishing is public and outward-facing, so it always asks the user to confirm first (set |
| list_spritesA | List every sprite with its position, size and media. |
| get_targetB | Full details for one target (a sprite or the stage), including variables and lists. |
| get_target_jsonA | A target's complete raw project.json entry — |
| list_blocksA | The catalog of standard Scratch block opcodes you can use in a target's |
| get_block_schemaA | The full schema for one block opcode: its shape, every input (with the sb3 shadow encoding to use, e.g. a text input is |
| enable_extensionA | Register an extension on the project so its blocks load and show in the palette — required before using any |
| patch_targetA | Apply an RFC 6902 JSON Patch to a target's raw JSON — the way to edit a sprite's scripts ( |
| set_spriteC | Update one or more properties of a sprite (position, size, direction, visibility, …). |
| add_spriteA | Add a new, empty sprite. Add at least one costume before opening it in the editor. |
| remove_spriteA | Delete a sprite and any assets only it used. |
| rename_targetB | Rename a sprite (or the stage). |
| set_stageC | Update stage-level properties: tempo, video state/transparency, volume. |
| set_variableA | Create or update a variable on a target by name. |
| delete_variableA | Delete a variable from a target by name. |
| set_listC | Create or replace a list on a target by name. |
| delete_listC | Delete a list from a target by name. |
| add_broadcastA | Add a broadcast message to the project (no-op if it already exists). |
| list_commentsA | List a target's workspace comments — the yellow sticky notes shown in the editor. Each has an |
| add_commentA | Add a workspace comment to a target. With no |
| set_commentA | Update an existing comment on a target by id: its |
| remove_commentA | Delete a workspace comment from a target by id. If it was attached to a block, the block's |
| add_costumeB | Add a costume to a sprite (or the stage) from an image file on disk. |
| remove_costumeB | Remove a costume from a target by name. |
| add_soundB | Add a sound to a sprite (or the stage) from an audio file on disk. |
| remove_soundC | Remove a sound from a target by name. |
| reloadA | Tell connected TurboWarp Desktop userscripts to load an .sb3 from disk (defaults to the open project). Use after editing on disk without going through |
| run_projectB | Press the green flag in connected TurboWarp Desktop userscripts. |
| stop_projectC | Stop running in connected TurboWarp Desktop userscripts. |
| vm_loadA | Load the open project into a headless Scratch VM (TurboWarp, JIT) for running and testing — no browser needed. Reflects the current in-memory edits; call again after editing to pick up changes. Returns a state snapshot. |
| vm_green_flagA | Press the green flag in the headless runtime (clears bubbles, the pending question and errors, then starts scripts). Does not advance time on its own — call |
| vm_runA | Advance the headless VM, then return a state snapshot. By default it runs in real time until every script finishes (so waits, timers and glides behave) or the budget elapses. Returns sprite positions, variables, lists, monitors, say/think bubbles, any pending question, running-thread count and errors. Also returns |
| vm_stopA | Stop every running script in the headless VM. |
| vm_stateA | A structured snapshot of the headless VM right now: every target with its position/size/direction/costume/visibility, variables and lists, visible monitors, say/think bubbles, the pending question, running-thread count and errors. Assert against these rather than a screenshot. |
| vm_inputA | Feed input into the headless VM the way the editor would: key presses, mouse position/clicks, and answers to |
| screenshotA | Capture a PNG of the live stage from a connected TurboWarp Desktop editor (via the live-reload bridge + userscript). This is the real renderer, so load and run the project there first ( |
| screenshot_jpegA | Same capture as |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
No prompts | |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
No resources | |
TDQS
Scored across 43 tools
Tools are organized by clear resource categories — project I/O, sprite/target editing, block schemas, comments, assets, VM execution, and screenshots — so an agent can usually tell them apart. The main ambiguity is intentional duplication like screenshot vs screenshot_jpeg and the separate live vs headless run/stop tool pairs, though prefixes help a lot.
The naming is overwhelmingly snake_case verb-first and predictable: open_, save_, list_, get_, set_, add_, remove_, delete_, and the vm_* family. Minor deviations like project_info, scratch_login, and vm_green_flag break the pattern slightly, and delete vs remove is used inconsistently across similar resources.
43 tools is well above the 25+ threshold for a coherent MCP surface, and while each tool has a real purpose, the set feels heavy for agent selection. Several groups (the VM runtime tools, comment tools, asset tools, and screenshot variants) could plausibly be consolidated without losing much capability.
The surface covers the full editing lifecycle for sprites, scripts, variables, lists, comments, costumes, sounds, and project saving with both local and online workflows. Notable gaps include no way to create a brand-new project, list existing online projects, or remove broadcasts, but patch_target provides a low-level workaround for most of these.