Skip to main content
Glama
unom-technology

ScratchJr Desktop MCP Server

Title: ScratchJr Desktop MCP Server

Description:

Create, edit, run, and inspect real ScratchJr Desktop projects through an MCP client such as Claude, Codex, Cursor, or Google Antigravity. This server controls the installed application through a local Electron connection and saves through ScratchJr's own database interface.

Use natural-language requests to build interactive stories, animations, and simple games with characters, backgrounds, text, sounds, and programming blocks. The server also provides screenshots, custom SVG artwork, and automatic database backups.

Already set up on this PC: Scratch.JR [ AI-Assisted ] v1.0.2 is built and installed, and the server dependencies are in place. The scratchjr entry is registered with Claude Desktop, Claude Code, and Codex, all three pointing at C:\Users\SkieHackerYT\Documents\Gitlab\ScratchJR-MCP\src\server.js. Google Antigravity is registered too, in %USERPROFILE%\.gemini\config\mcp_config.json. Restart Claude, start a new Codex session, and refresh Antigravity's MCP server list to load the tools. Cursor is not installed on this PC; section 5 covers it when it is. The installation steps below are for setting up another PC or reinstalling this project.

Related MCP server: scratch-mcp

Requirements:

Requirement

Details

Operating system

Windows with PowerShell; this integration was tested on Windows

ScratchJr

Either the bundled build in desktop/, Scratch.JR [ AI-Assisted ] v1.0.2, or a stock ScratchJr Desktop community port, tested with version 1.3.2

Node.js and npm

Node.js 22 or newer; tested with Node 24. npm is used to install server dependencies

AI client

Claude Desktop, Claude Code, Codex, Cursor, or Google Antigravity with local MCP support; run the client on the same Windows PC as ScratchJr

CLI registration

Install the Claude Code or Codex CLI and make it available on PATH if you want the setup script to register that client automatically. Claude Desktop setup does not require these CLIs

Project files

This repository, including package.json, package-lock.json, src/, scripts/, install.cmd, and desktop/ for the bundled build

Internet access

Needed to download software, install npm dependencies, and use your AI client

Local storage

Write access to ScratchJr's Documents folder and this server's backups/ and artifacts/ folders

Disk space for the bundled build

Around 1 GB once built: 0.4 GB of dependencies under desktop/node_modules, 0.5 GB of build output under desktop/out including a 124 MB installer, plus roughly another 0.5 GB used temporarily while packaging. Not needed if you use a stock ScratchJr install

This integration controls ScratchJr Desktop. The tablet version and Scratch 3 use different integrations.

Bundled desktop app: Scratch.JR [ AI-Assisted ] v1.0.2

desktop/ holds a full copy of the ScratchJr Desktop community port with the MCP bridge built into it. The stock app only exposes the local connection this server needs when the server launches the app itself, so a window that a child already had open could not be driven, and the server had to ask for the app to be closed and reopened. The modified build opens that connection on 127.0.0.1:9223 as it starts, so the server attaches to whichever window is already running.

The build also reports its identity through scratchjr_status, which returns build and buildVersion alongside the ScratchJr data version.

It installs to %LOCALAPPDATA%\ScratchJR-AI-Assisted\app-1.0.2\ScratchJr.exe. Projects still live in Documents\ScratchJR\scratchjr.sqllite, the same file the stock app uses, so existing projects carry over untouched.

See Installation Setup below for how to build and install it. desktop/UPSTREAM.md records the upstream commit this copy came from and every modification made to it, so the changes can be re-applied to a newer upstream release.

Using the stock app instead

The server still works with an unmodified ScratchJr Desktop installation. It looks for the modified build first and falls back to %LOCALAPPDATA%\ScratchJr\app-*\ScratchJr.exe, so nothing needs to be uninstalled. With the stock app, the server must launch ScratchJr itself; if the app is already open, it will ask you to save and close it first.

Renaming the build

Product name, version, installer name, and debug port live in desktop/src/branding.js, and nothing else hardcodes them. Note that MIT's trademark policy, in desktop/TRADEMARKS, expects a build with added features to drop the ScratchJr marks and use its own name; that matters if you publish the installer rather than build it for yourself.

Built-in assistant

The app has its own chat panel beside the editor, so a child can ask for a story without Claude Desktop, Codex or any other editor installed. You supply the model - a hosted one with your own API key, or LM Studio or Ollama running on the same computer; the app supplies the tools.

+---------------------------+---------------+
|  Scratch.JR editor        |  Assistant    |  <- AI-Assist tab
|                           |  chat         |     on the edge
+---------------------------+---------------+

The panel is a side bar on the right, like the chat panel in a code editor. The AI-Assist tab on the right-hand edge folds it away and brings it back, and the editor takes the whole window whenever it is shut. The border between the two can be dragged to set the width.

Opening the panel widens the window by the panel's width and closing it gives that width back, so the editor is never the one that pays for the chat. ScratchJr's own layout stops working below 766px wide, so the window will not let itself be made small enough to reach that; a maximised window is left where it is. Which side the panel was left on, and how wide, is remembered between runs.

The panel drives the same MCP tools an external editor would. Internally it starts the server in src/server.js as a child process and that server drives the editor back through the debugging port, so one implementation of every tool serves both routes and they cannot drift apart.

Choosing a provider

Open File > Settings. Four providers are offered, all speaking the OpenAI chat completions shape. Two are hosted and need an account; two run on this computer and need neither key nor internet connection:

Provider

Endpoint

Needs

Where to get it

DeepSeek

api.deepseek.com/v1

An API key, paid per message

platform.deepseek.com/api_keys

OpenRouter

openrouter.ai/api/v1

An API key, paid per message

openrouter.ai/keys

LM Studio

127.0.0.1:1234/v1

The app running, with its local server started

lmstudio.ai

Ollama

127.0.0.1:11434/v1

The app installed; it serves in the background

ollama.com

A key, a model and a server address are remembered separately for each provider, so switching between them does not disturb the settings of the one left behind.

The hosted providers

Model is a drop-down of the models worth picking, with the id the provider actually accepts:

Provider

Choice

Model id

DeepSeek

Flash - fast, everyday chat

deepseek-flash

DeepSeek

V4 Pro - thinks before answering

deepseek-v4-pro

OpenRouter

DeepSeek Flash (latest)

~deepseek/deepseek-flash-latest

OpenRouter

DeepSeek Pro (latest)

~deepseek/deepseek-pro-latest

OpenRouter

V4.1 Flash / V4 Pro, pinned

deepseek/deepseek-v4.1-flash, deepseek/deepseek-v4-pro

The OpenRouter latest slugs follow DeepSeek as new versions land, so they do not need changing here. The last entry in the drop-down, Something else, opens a box for any other id the provider accepts, such as openai/gpt-4o-mini on OpenRouter.

Picking a thinking model turns the thinking on in the request, and the panel shows that thinking in a folded block of its own while it arrives.

LM Studio and Ollama

Nothing leaves the computer and nothing is charged, but the model has to be running first:

  • LM Studio - open it, go to the Developer tab and start the local server.

  • Ollama - install it and pull a model, for example ollama pull qwen3:8b. It then serves in the background.

Model is not a written list here, because it is whatever has been downloaded. Refresh asks the server what it has and fills the drop-down; Test says whether the server is answering at all. If neither reaches it, Server address takes another port, or the address of another machine on the same network.

The assistant builds projects by calling tools, so pick a model that supports tool use - Ollama tags those at ollama.com/search?c=tools. A model that cannot call tools will talk about the story without building it. Smaller models also run out of room in a long conversation sooner; New chat clears it.

A local thinking model, such as one of the qwen3 or r1 family, writes its thinking into the reply between <think> tags rather than sending it separately. The panel pulls that back out and shows it in the same folded block the hosted providers use, so the reply reads the same either way.

Settings are stored in ai-settings.json inside the app's userData folder, which survives updates. API keys are written there in plain text, so treat that file the way you would treat the keys themselves.

Logs

Everything the app does is written to a plain text file: startup, the window, every message sent, every tool call and how long it took, every error, and what was installed. One file per day, in a Logs folder beside the app itself:

%LOCALAPPDATA%\ScratchJR-AI-Assisted\Logs\9-23-2026_Log.txt

Lines read:

[ 9-23-2026 08:58:24 ] [ INFO ] - Starting the MCP tool server {"node":"node.exe","server":"...\mcp\src\server.js"}
[ 9-23-2026 08:58:28 ] [ INFO ] - Tool call finished {"tool":"scratchjr_status","ms":3225,"isError":false}
[ 9-23-2026 08:59:02 ] [ WARN ] - No usable Node.js found {"needs":22}

Status is INFO, WARN or ERROR. The folder sits next to the app rather than inside the versioned folder, so an update does not take the logs with it; if that folder cannot be written - an install somewhere locked down - the app falls back to a Logs folder in its userData directory instead of failing. The API key is never written, in any line, including inside error text. Logs older than 30 days are deleted at startup.

When something is missing

The assistant needs Node.js 22 or newer for its tool server. If there is none, or the one installed is too old, the app asks before doing anything about it:

Something is missing - The assistant needs Node.js to run the ScratchJr tools, and it is not installed on this computer. Install a copy for this app only? [ Install now ] [ Not now ]

Not now installs nothing and says so in the panel; the question comes back next time a message is sent. Install now downloads about 36 MB into the app's own folder, which needs no administrator rights and leaves any other Node.js alone.

If the tool server itself cannot be found, the app says which setting points at it rather than failing halfway through a story.

Cost and the round limit

Every message is a paid request on your own account, and a single story usually costs several requests because the assistant calls tools and reads the results. Tool rounds per message under Advanced caps how many times it may do that before it has to stop and report back. Twelve suits most stories; lower it to spend less, raise it for longer builds.

Node.js installs itself

The assistant runs the tool server with Node 22 or newer. You do not have to install it: the first time you send a message, the app checks for a suitable Node and, finding none, downloads one.

It takes the portable zip rather than the official installer, and unpacks it into the app's own folder under userData. That means no administrator rights, no UAC prompt, no change to the machine's PATH, and no interference with any Node already installed for other work. Uninstalling the app removes it too. The download is about 36 MB and happens once.

A Node that is already installed and new enough is used as it is and never replaced. One that is too old is left alone as well; the app fetches its own copy alongside it.

Advanced > Node.js path shows which Node will be used and offers an Install now button to do the download before you need it. Leave the box blank to keep detecting automatically, or point it at a specific node.exe.

The editor itself works without Node; only the assistant needs it.

What the panel shows

Replies stream in as they are written, so there is something to watch from the first second rather than a blank panel until the whole answer lands. While a message is running, a strip under the heading says what is happening now - waiting for the model, thinking, writing the reply, or which tool is running - with the seconds counted and the round out of the tool budget.

A thinking model's working arrives in a folded Thinking block, which closes itself once the answer starts.

Each tool call appears as a collapsible row with how long it took: click it to see the arguments and the result the model received. Screenshots taken by scratchjr_screenshot are shown inline. A failed call opens itself and is marked in red, so a wrong turn is visible rather than buried.

New chat clears the conversation and starts the model fresh. Stop interrupts a run that is going nowhere; it takes effect after the tool call in flight finishes.

Attaching a document

The paperclip beside the message box takes a .md, .txt or .pdf file, and files can be dropped onto the panel instead. A PDF's text is pulled out on this machine; nothing is uploaded and nothing is sent anywhere until the message it is attached to is sent.

Each attached file shows as a chip with how much text it holds and an x to take it off again. A document longer than 20,000 characters is cut there, and both the panel and the model are told it was cut, so a long plan costs a bounded amount. Attachments go with one message: after that they are part of the conversation and do not need attaching again.

Only those three kinds are accepted. Anything else, including a scanned PDF with no text layer, is refused with a line saying why.

About

File > About lists the credits:

Installation Setup:

There are two ways to install. Both finish with the same MCP registration, so the client sections further down apply either way.

Path

What you get

When to use it

One-click

Builds and installs Scratch.JR [ AI-Assisted ] v1.0.2 from desktop/, then registers the MCP server

The normal choice. The app opens the MCP connection by itself, so nothing has to be closed and reopened

Manual

Uses a stock ScratchJr Desktop download and sets the server up step by step

You want the unmodified app, or the one-click build failed and you are working through it

Paths in this document are for this PC, where the project lives at C:\Users\SkieHackerYT\Documents\Gitlab\ScratchJR-MCP. On another machine, replace that folder and the Windows account name throughout.

One-click install

Double-click install.cmd in the project folder, or run:

Set-Location 'C:\Users\SkieHackerYT\Documents\Gitlab\ScratchJR-MCP'
npm.cmd run one-click

It runs these steps in order and stops at the first failure with a message naming the step:

  1. Installs this server's dependencies.

  2. Installs the desktop app's dependencies in desktop\ — around 900 packages, and the slowest step.

  3. Downloads the Electron 1.8.2 runtime. npm 11 defers that package's install script, so it is fetched explicitly.

  4. Builds desktop\out\make\squirrel.windows\x64\Scratch.JR [ AI-Assisted ]-1.0.2 Setup.exe.

  5. Runs that installer, which installs to %LOCALAPPDATA%\ScratchJR-AI-Assisted\app-1.0.2\ and starts the app.

  6. Registers the server with Claude Desktop, Claude Code, and Codex.

Expect fifteen to twenty minutes the first time, most of it in steps 2 and 4. Windows SmartScreen may warn about the installer: it is unsigned because it is built on your machine rather than downloaded from a signed release.

Afterwards, restart Claude and start a new Codex session. Cursor and Antigravity still need the manual configuration in sections 5 and 6.

To repeat a single stage instead of the whole run:

npm.cmd run app:install   # desktop app dependencies only
npm.cmd run app:make      # build the installer only
npm.cmd run app:start     # run the app from source without installing it
npm.cmd run setup         # client registration only

1. Install and initialize ScratchJr Desktop

Skip this if you used the one-click install, which already put an app in place.

  1. Open the ScratchJr Desktop download page and select the Windows installer. This is the community desktop port.

  2. Run the installer, then launch ScratchJr Desktop.

  3. Create a small project, return to the project library to save it, and close ScratchJr.

  4. Confirm the database exists at C:\Users\SkieHackerYT\Documents\ScratchJR\scratchjr.sqllite. On another PC, replace SkieHackerYT with that Windows account's name. The desktop port stores its projects in this Documents folder. See the desktop project's storage documentation.

The server looks for the modified build first, at %LOCALAPPDATA%\ScratchJR-AI-Assisted\app-*\ScratchJr.exe, and falls back to a stock install at %LOCALAPPDATA%\ScratchJr\app-*\ScratchJr.exe. Both can be installed at the same time. For a custom installation or a redirected Documents folder, set SCRATCHJR_EXE or SCRATCHJR_DATABASE as described below.

Both builds read and write the same scratchjr.sqllite. Run only one of them at a time: each holds the database in memory and writes its copy back when it closes, so whichever closes last overwrites the other's work.

2. Prepare the local assets folder

Use this folder to organize custom source artwork:

C:\Users\SkieHackerYT\Documents\ScratchJr\_Assets

Create it if it does not already exist:

New-Item -ItemType Directory -Path 'C:\Users\SkieHackerYT\Documents\ScratchJr\_Assets' -Force

Keep custom SVG characters and backgrounds here. This is a source-artwork folder: the MCP server does not automatically scan or import its files. To use an SVG, read it using the AI client's file-access tools, or paste its contents into the chat, and ask the assistant to register it with scratchjr_add_svg_asset. That tool accepts SVG markup, a name, a kind (character or background), width, and height. Use static SVG geometry; backgrounds should be 480 by 360 pixels. Use the returned md5 filename when creating a character or choosing a background.

Registered artwork is saved inside ScratchJr's database and can be discovered with scratchjr_list_assets. Simply placing PNG, JPG, audio, or SVG files in _Assets does not make them available to ScratchJr.

3. Install the MCP server dependencies

Install Node.js 22 or newer with npm, then open PowerShell and verify both commands:

node --version
npm.cmd --version

Open this project's folder and install the locked dependencies:

Set-Location 'C:\Users\SkieHackerYT\Documents\Gitlab\ScratchJR-MCP'
npm.cmd ci

4. Register the server with Claude Desktop, Claude Code, and Codex

From the same project folder, run:

npm.cmd run setup

Setup writes the scratchjr entry into Claude Desktop's configuration file and registers a user-level server with Claude Code and Codex through their CLIs. Every file it touches is backed up next to the original first. It is safe to run repeatedly: an entry that already points at this folder is left alone.

If a scratchjr entry exists but points somewhere else — most often because the project was moved, leaving the old path holding some other server — setup replaces it and prints the path it replaced. This is worth knowing, because a stale entry shows up as a connection error rather than as a missing server, which is easy to misread as the tools themselves being broken.

Client

Where the entry goes

How to verify

Claude Desktop

%APPDATA%\Claude\claude_desktop_config.json

Fully quit and reopen Claude Desktop, then look for scratchjr under the tools icon

Claude Code

User scope, in %USERPROFILE%\.claude.json

claude.cmd mcp get scratchjr, then start a new session

Codex

%USERPROFILE%\.codex\config.toml

codex mcp get scratchjr --json, then start a new session

Setup also writes ready-made snippets into config/:

If the Codex CLI is not installed, setup cannot reach Codex and says so. Open %USERPROFILE%\.codex\config.toml, replace any existing [mcp_servers.scratchjr] section with the contents of config/codex.toml, and leave every other section as it is:

[mcp_servers.scratchjr]
command = "C:\\Program Files\\nodejs\\node.exe"
args = ["C:\\Users\\SkieHackerYT\\Documents\\Gitlab\\ScratchJR-MCP\\src\\server.js"]
startup_timeout_sec = 30
tool_timeout_sec = 120

The timeouts matter. Building a project and taking a screenshot can take longer than Codex's default tool timeout allows.

The same applies to the Claude Code CLI. Without it, Claude Desktop is still configured, and Claude Code can be registered by hand:

claude.cmd mcp add --scope user scratchjr -- 'C:\Program Files\nodejs\node.exe' 'C:\Users\SkieHackerYT\Documents\Gitlab\ScratchJR-MCP\src\server.js'

Keep the project folder where it is after registering. Moving it breaks every entry, and setup has to be run again from the new location.

5. Add the server to Cursor

Complete steps 1–3 first. npm.cmd run setup configures Claude and Codex; Cursor and Antigravity require the manual configuration below.

  1. Open your project in Cursor.

  2. Create or open one of these configuration files. Choose the global file to use ScratchJr across all projects, or the project file for this workspace only.

Scope

Configuration file on this PC

Global

C:\Users\SkieHackerYT\.cursor\mcp.json

Project

C:\Users\SkieHackerYT\Documents\Gitlab\ScratchJR-MCP\.cursor\mcp.json

  1. Add the configuration below. If the file already contains servers, merge only the scratchjr entry into its existing mcpServers object.

{
  "mcpServers": {
    "scratchjr": {
      "command": "C:\\Program Files\\nodejs\\node.exe",
      "args": [
        "C:\\Users\\SkieHackerYT\\Documents\\Gitlab\\ScratchJR-MCP\\src\\server.js"
      ]
    }
  }
}
  1. Save the file and restart Cursor. Open Customize > MCPs and enable scratchjr if needed.

  2. Start an Agent chat and ask it to call scratchjr_connect, then scratchjr_list_projects.

Cursor supports both configuration locations; a project entry takes precedence over a global entry with the same name. See the official Cursor MCP instructions.

The JSON uses this PC's paths. On another machine, adjust the Node executable and the server path. Keep the doubled backslashes required by JSON. You can also copy this entry from config/claude-desktop.json, which setup regenerates with the current path on every run.

6. Add the server to Google Antigravity

  1. Open Antigravity IDE and its Agent side panel.

  2. Click … > MCP Servers > Manage MCP Servers > View raw config.

  3. In the opened mcp_config.json, merge the same scratchjr configuration shown above into mcpServers. Preserve any other server entries.

  4. Save the file, then refresh the MCP server list or restart Antigravity. Ensure scratchjr is enabled.

  5. Start a new Agent conversation and ask it to call scratchjr_connect, then scratchjr_list_projects.

Current Antigravity documentation lists these configuration locations:

Scope

Configuration file on this PC

Global

C:\Users\SkieHackerYT\.gemini\config\mcp_config.json

Workspace

C:\Users\SkieHackerYT\Documents\Gitlab\ScratchJR-MCP\.agents\mcp_config.json

Prefer the file opened by View raw config for your installed IDE version. Antigravity 2.0 exposes server management under Settings > Customizations > Installed MCP Servers. See the official Antigravity MCP instructions.

Both editors launch src/server.js directly using Node and stdio. No MCP URL or separate npm start terminal is needed. Port 9223 is the app's internal debugging connection, not an HTTP MCP endpoint.

7. Verify the ScratchJr connection

Run the built-in check from the project folder:

npm.cmd run doctor

It reports the executable and database the server chose, along with the projects ScratchJr currently holds. With the modified build this works against a window that is already open. If nothing is running, use npm.cmd run doctor -- --launch to start the app first. With a stock install, save and close any ScratchJr window opened from its ordinary shortcut before using --launch.

A healthy result names the executable and lists your projects:

{
  "config": {
    "executable": "C:\\Users\\SkieHackerYT\\AppData\\Local\\ScratchJR-AI-Assisted\\app-1.0.2\\ScratchJr.exe",
    "database": "C:\\Users\\SkieHackerYT\\Documents\\ScratchJR\\scratchjr.sqllite"
  },
  "app": { "ready": true, "projects": [ { "ID": 1, "NAME": "Project 1" } ] }
}

Then, in any registered client, try:

Use the scratchjr tools to create a dancing dog in a park. Build the project, run it, inspect a screenshot, then stop, reset, and save it.

scratchjr_status reports which build answered, as build and buildVersion. That is the quickest way to tell the modified app from a stock one.

If the tools do not appear:

  • Check that scratchjr is enabled in the client and that its JSON or TOML is valid.

  • Confirm both absolute paths in the entry exist, especially after moving the project folder. Rerun npm.cmd run setup to repair them.

  • Confirm npm.cmd ci completed in the server folder, then restart the client and start a new Agent chat.

  • In Cursor, connection details are under Output > MCP Logs; in Antigravity, inspect the server entry in Manage MCP Servers.

  • Follow the client's tool-approval prompts when shown.

Procedure:

  1. Open Claude Desktop, Claude Code, Codex, Cursor, or Antigravity and start a new Agent conversation after registration.

  2. Ask the assistant to call scratchjr_connect and check scratchjr_status.

  3. Describe the story, animation, or game you want. Include characters, scenes, dialogue, and what should happen when a character is clicked.

  4. Have the assistant inspect available assets and blocks, create the project, run it, and check a screenshot. For custom artwork, register the SVG from _Assets before using it in the project.

  5. Test the project in ScratchJr using the green flag and character clicks.

  6. Ask for any changes, then stop/reset and save the project. It remains available in ScratchJr's project library.

Example request:

Use ScratchJr to create an interactive ocean adventure with three characters and two scenes. Make the characters talk and move when clicked. Build it, run it, check a screenshot, and save it.

Example custom-artwork request, after providing the SVG contents or granting the client access to the file:

Register my star SVG from C:\Users\SkieHackerYT\Documents\ScratchJr_Assets as a character. Create a space scene where clicking the star makes it spin. Test and save it.

On this PC, MCP Demo - Park Friends (Ready) is already in the ScratchJr library. Press the green flag to animate Tic and the dog. Click the dog to visit the stars; click the star to return. To edit it, try:

Open MCP Demo - Park Friends (Ready). Make the dog hop three times when I click it, then switch to the space scene. Test and save the changes.

Connection behavior

The configured MCP client starts src/server.js using MCP's standard stdio transport. No API keys or model subscriptions are embedded in the server; the connected assistant interprets your request and calls the tools.

The first application tool connects to ScratchJr on 127.0.0.1:9223, or automatically launches the installed app with that local debugging port. It does not modify the installed application.

If ScratchJr is already running from its ordinary shortcut without the connection enabled, save your work and close it once. Then ask the assistant to connect again. The server does not force-close an existing editor session. You can normally leave the connected app open while using either client. Avoid simultaneous manual edits while an assistant is changing a project.

With the build in desktop/, that close-and-reopen step is not needed: the app opens the connection itself as it starts, so the server attaches to a window that is already on screen.

A freshly started ScratchJr sits on the splash screen, which waits for a child to press Start and has none of the project code loaded yet. Connecting moves the app to its project library so the first tool call succeeds. If a child is looking at the splash screen when an assistant connects, that is why the screen changes.

Tool reference

Tool

Action

scratchjr_connect / scratchjr_status

Connect, launch, or inspect connection status

scratchjr_list_assets

Discover installed characters, backgrounds, and sounds

scratchjr_block_reference

Read block names, allowed arguments, and units

scratchjr_list_projects / scratchjr_get_project

Find projects and inspect their actual data

scratchjr_create_project

Build a complete project with pages, characters, text, and scripts

scratchjr_edit_project

Batch edits while preserving unrelated objects

scratchjr_open_project / scratchjr_save_project

Open and persist projects

scratchjr_run_project / scratchjr_stop_project

Start green-flag scripts, stop, or reset

scratchjr_click_character

Exercise click interactions

scratchjr_add_svg_asset

Create a custom character or background from static SVG geometry

scratchjr_screenshot

Return an actual editor screenshot to the assistant

scratchjr_backup / scratchjr_export_project

Back up the database or export project JSON and media

Also includes the scratchjr://guide resource and create-scratchjr-project prompt.

ScratchJr supports up to four pages, motion, speech, sounds, repeat loops, click/collision events, colored messages, and page transitions. It does not support Scratch 3 features such as variables, keyboard controls, scores, or arithmetic. The assistant should implement your idea using those available blocks and explain any remaining limitations.

Development checks

npm.cmd test                 # Six automated model/protocol tests; does not launch the app
npm.cmd run doctor          # Inspect connection and list projects
npm.cmd run doctor -- --launch
npm.cmd run test:live        # Creates a new demo in the real ScratchJr library
npm.cmd run test:extended    # Adds a custom star and second page to the latest test demo

npm start runs the MCP protocol server and waits for client input; it is not a web page. Clients use the absolute Node executable and server path, so their current directory does not matter.

Optional environment settings

Variable

Default

SCRATCHJR_EXE

Auto-detected versioned ScratchJr executable

SCRATCHJR_DEBUG_PORT

9223

SCRATCHJR_DATABASE

~/Documents/ScratchJR/scratchjr.sqllite

SCRATCHJR_BACKUP_DIR

This server's backups/ folder

SCRATCHJR_OUTPUT_DIR

This server's artifacts/ folder

The modified desktop app in desktop/ reads two more, which only affect the app itself:

Variable

Effect

SCRATCHJR_DEBUG_PORT

Port the app opens for the MCP connection. Set it to 0 to start the app with no MCP listener at all

SCRATCHJR_DOCUMENTS

Overrides the Documents root the app reads and writes. Useful for trying a build without touching real projects

SCRATCHJR_DEVTOOLS

Set to 1 to open DevTools in a source run. DevTools takes the single debugger slot, so the MCP server cannot attach while it is open

If you customize settings, use the same values in every client. In the Cursor and Antigravity JSON, place environment settings in an env object alongside command and args within the scratchjr entry. If Windows Documents is redirected, set SCRATCHJR_DATABASE to the app's actual database path.

Project input

examples/park-friends.json is a complete scratchjr_create_project argument. Character asset and page background values must be exact filenames returned by scratchjr_list_assets.

Coordinates use a 480×360 stage with the origin at the top left. One motion step is 24 pixels. wait: 10 means one second. right and left rotate; forward and back move horizontally. Each script is an array of {op, value?, body?} objects; a repeat block holds its enclosed blocks in body.

To change existing work, call get_project, then edit_project with its revision, page/object IDs, and a batch of operations. set_scripts changes only code. set_character replaces that entire character's configuration. The server rejects a stale revision so two assistants do not silently overwrite one another's changes.

Persistence and recovery

Project writes use the running application's in-memory database, then explicitly flush to disk. Creating, editing, and adding artwork make timestamped full database backups first. Cross-process locking serializes tool operations between Claude and Codex. There is no arbitrary JavaScript or SQL execution tool.

backups/ contains complete .sqllite snapshots. To restore manually, save and close ScratchJr, preserve a copy of the current database, replace Documents\ScratchJR\scratchjr.sqllite with the selected snapshot, and reopen ScratchJr. Restoring a full database restores all projects to that snapshot's state.

artifacts/ contains screenshots, JSON exports, and live-test-result.json. The JSON export includes referenced custom media and is intended for inspection/backup; it is not a tablet-importable .sjr archive. Automated import and recorded-audio creation are not implemented. Existing recorded sounds can be used in scripts.

Tested against ScratchJr Desktop 1.3.2 on Windows, Node 24, MCP SDK 1.30.0, the installed Codex CLI, and Claude Code. Claude Desktop's configuration is installed, but its UI was not used for testing. Cursor and Antigravity instructions follow their official MCP documentation; connections from those editors have not been tested here. Other desktop builds may need an adapter.

Verification completed on this PC: stdio handshake and tool/resource/prompt discovery; native project creation; visible rendering; measured movement after green-flag execution; edits and stale-revision rejection; custom SVG rendering; click-driven navigation between two pages; screenshots; disk persistence; and SQLite integrity. Original Project 1 was compared with the pre-test backup and was unchanged.

Implementation references: ScratchJr Desktop source, MCP TypeScript SDK, and Claude Desktop MCP configuration. Codex and Claude Code registration use their installed CLI commands. This is an independent integration, not an official ScratchJr release.

Created by: Kerneil Rommel S. Gocotano

Available Tools

17 tools
scratchjr_add_svg_assetA

Add a custom character or background using static SVG geometry. Use SVG with a matching viewBox; backgrounds should be 480×360. Returns an md5 asset name usable in projects.

ParametersJSON Schema
NameRequiredDescriptionDefault
svgYes
kindYes
nameYes
widthYes
heightYes

TDQS

A4.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations only say the operation is not read-only and not destructive, so the description carries the behavioral burden. It usefully discloses the return value ('md5 asset name usable in projects') and the SVG/dimension constraints, while avoiding any contradiction with the annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three short sentences that front-load the purpose and put the most important constraints and return behavior right after. No filler or repetition of schema details.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

There is no output schema and no parameter descriptions, yet the tool still communicates key requirements and the return shape. It is minimally viable, but gaps remain around the name parameter and how width/height should be determined for characters versus the 480×360 background convention.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, and the description helps with svg (matching viewBox), kind (character/background), and width/height (background 480×360). However, the required 'name' parameter is never explained and character width/height semantics are left implicit, so compensation is only partial.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb ('Add') and a concrete resource ('custom character or background') with a qualifier ('static SVG geometry'). This cleanly separates it from sibling project-management tools and list_assets, so an agent can tell what the tool does at a glance.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives direct usage context: it is the tool for adding SVG-based custom characters/backgrounds, and it imposes concrete format rules ('SVG with a matching viewBox; backgrounds should be 480×360'). It does not explicitly name alternatives or exclusions, but no sibling offers the same add-asset action.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

scratchjr_backupA

Save current work and make a full timestamped database backup.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations only indicate non-read-only, non-destructive behavior. The description adds useful context by stating that it saves current work and creates a full timestamped database backup, implying persistence and uniqueness. It does not detail backup location or completion behavior, but for a zero-parameter tool this is reasonably transparent.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single, compact sentence conveys the full action without filler. Both clauses—'save current work' and 'make a full timestamped database backup'—contribute meaningful information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a zero-parameter action with no output schema, the description fully covers what the tool does and the scope of its effect. No additional context is needed for an agent to invoke it correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool has zero parameters, so the schema provides full coverage by definition. The baseline of 4 applies because there are no parameter semantics to explain.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses concrete verbs ('Save', 'make') and a specific resource ('full timestamped database backup'). It is clearly distinct from siblings like scratchjr_save_project or scratchjr_export_project by emphasizing a full database backup rather than a single project.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives no guidance on when to use this tool instead of alternatives such as scratchjr_save_project or scratchjr_export_project. It does not mention preconditions, recommended timing, or situations where a backup is necessary.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

scratchjr_block_referenceB
Read-only

Get supported blocks, values, units and ScratchJr project-building guidance.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

B3.4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already establish readOnlyHint=true and destructiveHint=false, and the description's 'Get' wording is consistent. The description adds that the tool returns a catalog of blocks, values, units, and guidance, but it does not disclose output format, structure, or any other behavioral traits. Given the annotations cover safety, this is adequate but not rich.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, front-loaded sentence that lists the key resources without excessive wording. The phrase 'project-building guidance' is slightly vague but does not add bloat or hinder quick parsing.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a zero-parameter, read-only reference tool, this description is largely complete: it identifies the kind of information returned and is consistent with annotations. The main gap is the vagueness of 'guidance,' but an AI agent can still understand the tool's purpose and safe invocation without additional detail.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema has zero properties, so there are no parameters requiring semantic explanation. The description does not need to compensate for schema gaps, and the baseline for a no-parameter tool is appropriately high.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb ('Get') and names concrete resources: 'supported blocks, values, units and ScratchJr project-building guidance.' This distinguishes it from action-oriented siblings like create_project, run_project, or backup, though it does not explicitly call out a sibling comparison.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no guidance on when to use this tool versus alternatives such as scratchjr_status, scratchjr_list_assets, or scratchjr_get_project. An agent must infer that this is a reference/lookup tool from the description, but no explicit context or exclusions are given.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

scratchjr_click_characterA

Trigger a character click event to test an interactive project. Character must be on the current page.

ParametersJSON Schema
NameRequiredDescriptionDefault
objectIdYes

TDQS

A3.6/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already indicate this is not read-only and not destructive, and the description adds a useful precondition about the character being on the current page. It does not disclose potential side effects of the click event, such as triggering project scripts that modify state, but for a simple event trigger this is a reasonable level of transparency.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two short sentences convey the action, purpose, and a critical prerequisite without any filler. The most important information appears first, and every word earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a single-parameter tool, the description covers the core action and the main precondition. It omits expected return behavior, error handling when the character is not on the page, and how to identify the objectId, so it is adequate but not fully self-sufficient.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, and the description does not explain what objectId refers to or how to obtain it. The parameter name and tool name make it inferable that objectId identifies the character, but the description adds no meaning beyond the raw schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific action ('Trigger a character click event') and a concrete resource ('character'), making the tool's function immediately obvious. It also clarifies the intended use case ('to test an interactive project'), and the sibling list contains no other click/event tool, so it is effectively distinguished.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies when to use the tool ('to test an interactive project') and gives a key precondition ('Character must be on the current page'). However, it offers no explicit comparison to alternatives or exclusions, leaving the agent to infer the usage context from the sibling names.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

scratchjr_connectA

Connect to ScratchJr Desktop or launch it with a localhost-only control port. Does not force-close existing sessions.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations provide only basic hints, so the description adds useful behavioral context: it does not force-close existing sessions and uses a localhost-only port. This is meaningful beyond the structured annotations and there is no contradiction.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two short sentences with no redundancy. The core connection/launch behavior is front-loaded and the important safety clarification follows immediately.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple setup tool with no parameters or output schema, the description covers the essential behavior and key caveat. It could explicitly mention whether this must be called before other ScratchJr tools, but the sibling set and the non-closing statement make that reasonably inferable.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool has zero parameters and schema description coverage is 100%, so there is nothing for the description to add. Baseline 4 is appropriate for a parameterless tool.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a clear action ('Connect to ScratchJr Desktop or launch it') with a specific resource and a scope qualifier ('localhost-only control port'). It also clarifies what it does not do, distinguishing it from other tools like scratchjr_status.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies when the tool is useful (when a connection is needed, possibly launching Desktop) and includes a safety note about existing sessions, but it does not explicitly state when to prefer it over siblings or any prerequisites/ordering. Usage is implied rather than fully guided.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

scratchjr_create_projectA

Create, persist and open a complete native ScratchJr project with up to four pages. Characters, backgrounds, text and block scripts are built automatically. Returns the new ID and data.

ParametersJSON Schema
NameRequiredDescriptionDefault
projectYes

TDQS

A3.8/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description goes beyond the readOnly=false/destructive=false annotations by disclosing that the project is persisted and opened, not just created in memory, and that construction of characters/backgrounds/text/scripts is automatic. It also states the return value (new ID and data), though it omits failure conditions or prerequisites like connectivity.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences front-load the action, resource, constraint, and return value. Every clause adds information, and there is no filler, repetition of schema structure, or redundant restating of annotations.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a complex tool with a deeply nested schema and no output schema, the description supplies the missing high-level context: single-call creation, persistence, opening, automatic assembly, the four-page cap, and the returned ID/data. It omits explicit prerequisites such as connecting first or ensuring asset IDs exist, though the schema's asset description already points to scratchjr_list_assets.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With 0% schema_description_coverage, the description carries some burden, and it helps by framing `project` as high-level content that the tool assembles into a native project with up to four pages. It does not walk through required fields or nested block semantics, but the schema itself is unusually detailed with defaults, enums, and constraints, so most operational meaning is available there.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names a specific action (create/persist/open), a clear resource (a complete native ScratchJr project), and key constraints ('up to four pages', auto-built characters/backgrounds/text/scripts). This makes it distinguishable from siblings like scratchjr_edit_project or scratchjr_list_projects, though it never explicitly names them.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The verb 'Create' and 'Returns the new ID' imply this should be used when building a new project rather than editing or opening an existing one. However, the description gives no explicit when-not-to-use guidance or alternatives, leaving the agent to infer the boundary against scratchjr_edit_project, scratchjr_save_project, and scratchjr_open_project.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

scratchjr_edit_projectA

Apply a batch of edits to an existing project and reopen it. Supply the revision from get_project. set_character replaces the whole character; use set_scripts to change only code.

ParametersJSON Schema
NameRequiredDescriptionDefault
projectIdYesProject ID from list_projects or create_project
operationsYes
expectedRevisionYes

TDQS

A3.6/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=false and destructiveHint=false, so the description doesn't need to restate mutation. The description adds useful behavioral context: the tool reopens the project after editing, and set_character replaces the whole character. However, it doesn't disclose that edits are batched atomically, whether a failed operation rolls back, or that expectedRevision is an optimistic concurrency guard. With annotations covering the basic safety profile, a 3 is appropriate.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three sentences with no filler. The key action ('Apply a batch of edits') is front-loaded, the revision requirement is stated early, and the set_character/set_scripts distinction is a valuable disambiguation. It could be slightly more structured by listing operation types, but it earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a complex tool with a large operations schema and no output schema, the description is adequate but not complete. It covers the core workflow (get revision, batch edit, reopen) and the most important sibling distinction, but it doesn't mention the available operation actions, the optimistic concurrency semantics of expectedRevision, or what happens on failure. An agent would need to dig into the schema to understand the full operation set, which is a gap for a tool this complex.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is only 33% (projectId and asset have descriptions, but expectedRevision and operations do not). The description compensates partially by explaining expectedRevision ('Supply the revision from get_project') and by clarifying the set_character vs set_scripts distinction. However, it doesn't explain the structure of operations (the oneOf variants) or that operations is a batch array, leaving the agent to parse the large schema. Baseline 3 is fair because the description adds some meaning but doesn't fully compensate for the coverage gap.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb ('Apply a batch of edits') and resource ('existing project'), and clarifies it reopens the project. It also distinguishes set_character from set_scripts. However, it doesn't enumerate the full set of operations (rename, add_page, set_background, add_character, add_text, set_text, remove_object) that the schema supports, so an agent might not realize the full scope of what 'batch of edits' includes.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives clear context: use this to apply edits to an existing project, supply the revision from get_project, and use set_scripts instead of set_character when changing only code. It doesn't explicitly state when NOT to use this tool (e.g., for creating a new project, use create_project), but the sibling list and the 'existing project' phrasing imply that boundary.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

scratchjr_export_projectA
Read-only

Export a JSON backup of a project and referenced custom media. This is not the tablet .sjr sharing format.

ParametersJSON Schema
NameRequiredDescriptionDefault
projectIdYesProject ID from list_projects or create_project

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and destructiveHint=false, so the safety profile is covered. The description adds value beyond annotations by disclosing the output format (JSON backup) and that referenced custom media is included, which is behaviorally relevant.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two short sentences with no filler. The core action and output are front-loaded, and the format clarification earns its place by preventing confusion with the .sjr format.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple single-parameter read-only export tool, the description is complete: it states the output format, scope, and key constraint. The schema documents the only required parameter, and annotations cover safety, so nothing critical is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, and the projectId parameter is already well documented as coming from list_projects or create_project. The tool description itself adds no additional meaning about the parameter, so the baseline score of 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb ('Export') and identifies the exact output: 'a JSON backup of a project and referenced custom media.' It also distinguishes itself from the tablet .sjr sharing format, which helps differentiate it from sibling backup/export tools.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description makes it clear when this tool is appropriate: when a JSON backup including custom media is needed. The explicit 'not the tablet .sjr sharing format' provides a useful exclusion, though it does not name a specific alternative sibling to use instead.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

scratchjr_get_projectA
Read-only

Read project data, page/object IDs and revision. Includes unsaved editor state when open. Call before editing.

ParametersJSON Schema
NameRequiredDescriptionDefault
projectIdYesProject ID from list_projects or create_project

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already provide readOnlyHint=true and destructiveHint=false. The description adds genuine value beyond those annotations by disclosing that the read includes unsaved editor state when open — a behavioral trait the agent needs to know. No contradiction with annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three short sentences, each earning its place: purpose and scope first, then the unsaved-state nuance, then the usage trigger. No redundancy, no filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a single-parameter read tool with safety annotations in place and no output schema, the description compensates by naming the returned content (project data, page/object IDs, revision). Minor ambiguity remains around what 'when open' means, but the tool is simple enough that this is adequate.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%; projectId is fully documented ('Project ID from list_projects or create_project'). The description adds no parameter-level detail, but with full schema coverage the baseline of 3 applies and nothing more is demanded.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb ('Read') and resource ('project data, page/object IDs and revision'), with the distinct behavioral note about unsaved editor state. It's clearly differentiable from siblings like list_projects or edit_project by content, though it never names a sibling explicitly.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

'Call before editing' provides a clear trigger condition for when this tool should be invoked. It gives solid context but stops short of explicit when-not-to-use guidance or naming alternatives such as edit_project/save_project.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

scratchjr_list_assetsA
Read-only

List real installed character, background and sound assets. Use exact md5 filenames in projects.

ParametersJSON Schema
NameRequiredDescriptionDefault
kindNoall
searchNo

TDQS

A3.8/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and destructiveHint=false, so the agent knows this is safe. The description adds the qualifier 'real installed' to differentiate from hypothetical or virtual assets, but it does not disclose output structure, pagination, or any other behavioral nuance. With annotations covering safety, the bar is lower, yet the description adds only minimal extra context.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two crisp sentences. The first states the core purpose; the second provides a key usage hint. No filler or repetition. The information is front-loaded and every word earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The tool is simple with two optional parameters and no output schema. The description tells what it lists and hints that md5 filenames are returned, but it does not explicitly describe the return format or explain the 'search' parameter. For a low-complexity tool this is adequate but not fully complete; the agent still has to infer some behavior from the parameter names.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, meaning the description does not explain either parameter. The schema itself provides enum values for 'kind' and a maxLength for 'search', but the description does not clarify what 'search' does or how 'kind' interacts with the listing. Since coverage is low, the description must compensate, and it fails to do so.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool lists installed assets (characters, backgrounds, sounds). It distinguishes from siblings like scratchjr_add_svg_asset by focusing on listing rather than adding. The purpose is unambiguous and specific.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides a practical usage hint: 'Use exact md5 filenames in projects.' This tells the agent why to call the tool (to get md5 filenames for project references). It does not explicitly contrast with alternatives, but for a listing tool the use case is straightforward and no conflicting sibling exists.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

scratchjr_list_projectsA
Read-only

List saved ScratchJr projects.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A3.5/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description aligns with the annotations: readOnlyHint is true and destructiveHint is false, and 'List' is non-mutating. It adds no extra behavioral detail beyond the annotation, such as return shape or side-effect confirmation, which is acceptable for a no-arg read-only operation but not enriching.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single, front-loaded sentence states exactly what the tool does with no filler or redundancy. Every word earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The zero-parameter schema and read-only annotations cover invocation safety, and the description makes the purpose unambiguous. It does not describe the shape of the returned project list, which would improve completeness given the absence of an output schema.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

There are no parameters, so there is no semantics for a description to clarify beyond the empty schema. The no-parameter baseline applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States the specific verb 'List' and resource 'saved ScratchJr projects', clearly orienting an agent to a read-only enumeration action. It does not explicitly contrast with scratchjr_list_assets or say whether all projects are returned.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No when-to-use or exclusion guidance is provided; an agent must infer when to choose this over scratchjr_list_assets or scratchjr_get_project. This leaves usage context to the tool name and sibling names.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

scratchjr_open_projectB

Save the current project and open the requested project in the real editor.

ParametersJSON Schema
NameRequiredDescriptionDefault
projectIdYesProject ID from list_projects or create_project

TDQS

B3.3/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description discloses one meaningful behavioral side effect beyond the annotations: it saves the current project before opening another. However, it does not explain what happens on failure, whether unsaved changes are silently overwritten, or why 'real editor' matters. Since readOnlyHint is false, the safety profile is already known from annotations, and the description adds only modest context.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single sentence that front-loads the key action (saving the current project) and states the main operation without filler. Every phrase carries useful information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a one-parameter tool with a documented schema this is minimally adequate, but it omits any mention of return value/behavior, connection prerequisites (despite scratchjr_connect existing), or what distinguishes opening in the real editor from other project operations.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema already documents projectId as 'Project ID from list_projects or create_project' with full coverage. The description adds no further parameter semantics beyond 'requested project,' so the baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses specific verbs and resources: 'Save the current project' and 'open the requested project in the real editor.' It clearly identifies the tool's function, but it does not explicitly contrast it with sibling tools like scratchjr_edit_project or scratchjr_get_project, so it stops short of full sibling differentiation.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no guidance on when to use this tool versus alternatives such as scratchjr_edit_project, scratchjr_get_project, or scratchjr_run_project. The intended use is only implied by the name and description, with no exclusions, prerequisites, or conditions stated.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

scratchjr_run_projectA

Run green-flag scripts in the current project, optionally opening a specified project.

ParametersJSON Schema
NameRequiredDescriptionDefault
projectIdNoProject ID from list_projects or create_project

TDQS

A4.2/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already establish that the tool is not read-only and not destructive. The description adds the useful detail that providing projectId triggers an open-then-run sequence. However, it does not disclose whether currently running scripts are stopped or whether execution is synchronous, leaving some behavioral ambiguity.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single front-loaded sentence that states the primary action first and then the parameter-dependent behavior. There is no filler, no repetition of the tool name, and every word earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a tool with one optional parameter and annotations providing the safety profile, the description gives enough information for an agent to invoke it correctly. It covers the current-project vs specified-project distinction, though it does not explain what happens if no current project exists or whether the run blocks.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema describes projectId as a project ID, but the description adds the key meaning that it is optional and selects which project to open before running. With 100% schema description coverage, this is above the baseline of 3 because it clarifies the parameter's role in the overall operation.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names a specific action ('Run green-flag scripts') and a resource ('current project' or 'specified project'), which clearly distinguishes it from sibling tools like open_project and stop_project. It is a precise verb+resource statement, not a tautology.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description clearly states the context: run in the current project, or open and run a specified project when projectId is provided. It does not explicitly name alternatives or state when not to use the tool, but the selection context is clear enough for an agent.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

scratchjr_save_projectA

Save the open project, regenerate its thumbnail and flush all data to disk.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Adds behavioral detail beyond annotations by mentioning thumbnail regeneration and durability ('flush all data to disk'). It aligns with readOnlyHint=false and destructiveHint=false, and gives the agent a realistic sense of the side effects of saving.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

One compact sentence with no filler. All three key behaviors—save, regenerate thumbnail, flush—are front-loaded and necessary.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a zero-parameter save operation, the description is complete: it identifies the resource and the persistence behavior. No output schema is present, but no return-value documentation is essential for a straightforward save command.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool has zero parameters and the empty schema is fully covered, so there is nothing for the description to add about arguments. The baseline of 4 for no parameters is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Clearly states the action (save), the target resource (open project), and key side effects (regenerate thumbnail, flush to disk). The behavior is unambiguous and distinct from siblings like screenshot, export, or backup.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description makes the invocation context clear: use this when the open project should be persisted to disk. It does not explicitly name alternative tools such as export or backup, but the operation's purpose is specific enough to avoid major confusion.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

scratchjr_screenshotA
Read-only

Capture the real ScratchJr window and return an image for visual verification, plus its saved file path.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations indicate readOnlyHint=true, so no contradiction; the description adds value by clarifying that this captures the actual window and saves a file whose path is returned. It does not disclose details like window focus behavior or failure states, but for a non-mutating capture tool this is reasonably transparent.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single focused sentence that front-loads the action and purpose. Every phrase earns its place, with no redundant or vague wording.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a zero-parameter capture tool, the description adequately states input (none), what it does, and what it returns (image and file path). It does not mention prerequisites such as the app being open, but this is inferable from sibling tools and does not undermine correct invocation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

There are zero parameters, so the schema carries no burden. The baseline of 4 is appropriate because the description does not need to clarify any parameter details.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description identifies a specific action ('Capture the real ScratchJr window'), a clear resource, and a concrete purpose ('for visual verification'). It also states the return value (image and saved file path), making it easy to distinguish from siblings like status or get_project.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies when to use this tool ('for visual verification') but does not explicitly state when to prefer it over alternatives or mention prerequisites such as needing the ScratchJr app to be running/connected. Usage guidance is present but only implied.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

scratchjr_statusA
Read-only

Check the live ScratchJr connection without launching the app.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already mark readOnlyHint=true and destructiveHint=false, covering the safety profile. The description adds behavioral value by stating the tool does not launch the app and provides a 'live' status check, which is extra context beyond what annotations convey. This is useful and not contradictory.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single 10-word sentence that is fully front-loaded with the main action ('Check') and includes only essential qualifiers. There is no fluff, and every word contributes to conveying the tool's purpose and key behavioral characteristic.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple status-check tool with no parameters, annotations, or output schema, the description communicates purpose and a key side-effect detail. However, it does not describe the return value (e.g., what the status looks like—boolean, string, or details), which would be helpful for an agent to interpret the result. This is a minor but real gap.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool has zero parameters and the schema coverage is 100%, so the description does not need to explain parameters. Per the calibration baseline, a 4 is appropriate for zero-parameter tools—the description correctly omits parameter details and focuses on the tool's action.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb ('Check') and resource ('live ScratchJr connection') and adds the qualifier 'without launching the app,' which clearly differentiates it from sibling scratchjr_connect. An agent can immediately understand the tool's scope and how it differs from other connection-related operations.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The phrase 'without launching the app' implies this is a safe, lightweight check that can be performed anytime, but there is no explicit 'when to use' or 'use this instead of' guidance. The distinction from scratchjr_connect is implied rather than stated, so the usage context is present but not fully explicit.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

scratchjr_stop_projectA

Stop scripts; optionally reset characters to their starting positions.

ParametersJSON Schema
NameRequiredDescriptionDefault
resetNo

TDQS

A3.8/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description discloses the main behaviors: stopping scripts and optionally resetting characters. It adds this context to the minimal annotations (readOnlyHint=false, destructiveHint=false), but it does not explain side effects such as whether the project remains open or whether any project data is changed.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is one short sentence, front-loads the primary action, and then adds the optional parameter context. No words are wasted.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a single-boolean-parameter tool with no output schema, the description covers the essential behavior and parameter effect. It could be slightly more explicit about the scope ('all scripts in the current project') but is otherwise sufficient for correct invocation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With 0% schema description coverage, the description carries the burden for the 'reset' parameter. It clearly links 'reset' to resetting characters to their starting positions, which is meaningful beyond the bare schema default of false.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a clear action ('Stop scripts') and a distinct optional behavior ('reset characters to their starting positions'), which differentiates it from siblings like scratchjr_run_project and scratchjr_click_character. The resource scope is implied by the project name and the action is concrete.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description does not state when to use this tool or compare it with alternatives such as scratchjr_run_project or scratchjr_status. It gives no explicit conditions, prerequisites, or exclusions, leaving the agent to infer usage from the tool name.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 17 tool updatesv1.0.0
    • First observedscratchjr_add_svg_asset
    • First observedscratchjr_backup
    • First observedscratchjr_block_reference
    • First observedscratchjr_click_character
    • First observedscratchjr_connect
    • First observedscratchjr_create_project
    • First observedscratchjr_edit_project
    • First observedscratchjr_export_project
    • First observedscratchjr_get_project
    • First observedscratchjr_list_assets
    • First observedscratchjr_list_projects
    • First observedscratchjr_open_project
    • First observedscratchjr_run_project
    • First observedscratchjr_save_project
    • First observedscratchjr_screenshot
    • First observedscratchjr_status
    • First observedscratchjr_stop_project

TDQS

A3.9/5.0

Scored across 17 tools

Disambiguation5/5

Each tool targets a distinct operation: connection status, launching, asset listing, block documentation, project listing, screenshot, project CRUD, execution control, event triggering, backup, export, and SVG import. There is no overlap between tools; even get_project, open_project, and save_project serve clearly separate read, open, and persist functions.

Naming Consistency4/5

Most tools follow the verb_noun pattern (list_assets, get_project, create_project, edit_project, run_project, stop_project, click_character, export_project, add_svg_asset). A few deviations exist (status, connect, block_reference, screenshot, backup) that are still intuitive but break the strict convention. Overall the pattern is recognizable and readable.

Tool Count4/5

With 17 tools, the server is slightly above the typical well-scoped range of 3–15, but each tool covers a distinct functional area of the ScratchJr desktop integration. The count feels justified given the breadth of operations (asset management, project lifecycle, execution control, backup/export, custom assets).

Completeness4/5

The tool surface covers the full project lifecycle: create, read, edit, open, save, run, stop, and backup, plus asset listing and import. Minor gaps include no explicit delete-project operation and no direct asset removal, but these are rarely needed for typical automation and agents can work around them. Overall the surface is comprehensive for the intended use case.

Maintenance

ActivityMaintained
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    A
    quality
    D
    maintenance
    Connects AI assistants to live Purl Studio projects, enabling reading objects, modifying scripts, and setting properties.
    26
    3 npm
    MIT
  • F
    license
    Not graded
    quality
    C
    maintenance
    Enables AI assistants to directly manage Roblox Studio projects by creating, reading, updating, and deleting scripts, listing instances, executing Luau code, and inspecting properties. It works through natural language, making Studio operations accessible to AI.
    -