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 | |
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