Skip to main content
Glama
Aventra-Repository

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: ScratchJr Desktop and the server dependencies are installed; scratchjr is registered with Codex and Claude Code; Claude Desktop's configuration is written. Claude Code's connection check passed. Restart Claude or start a new Codex session to load the tools. 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

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/, and scripts/

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

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

Installation Setup:

1. Install and initialize ScratchJr Desktop

  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 automatically looks for the versioned executable under %LOCALAPPDATA%\ScratchJr\app-*\ScratchJr.exe. For a custom installation or redirected Documents folder, configure SCRATCHJR_EXE or SCRATCHJR_DATABASE as described below.

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. Replace the path if you copied the project elsewhere. The brackets in this folder name require -LiteralPath:

Set-Location -LiteralPath 'C:\Users\SkieHackerYT\Desktop\[MCP SERVER]'
npm.cmd ci

4. Register the server with Claude and Codex

From the same project folder, run:

npm.cmd run setup

Setup merges the scratchjr entry into Claude Desktop's configuration and registers a user-level server with Claude Code and Codex when their CLIs are available. Existing configuration files are backed up next to their originals. Generated configuration snippets are in config/.

Client

Configuration or verification

Claude Desktop

%APPDATA%\Claude\claude_desktop_config.json; fully quit and reopen Claude Desktop

Claude Code

User-level registration; verify with claude.cmd mcp get scratchjr, then start a new session

Codex

%USERPROFILE%\.codex\config.toml; verify with codex mcp get scratchjr --json, then start a new session

If a CLI is unavailable, setup prints a warning for that client. Install the missing CLI and rerun setup, or merge the corresponding snippet from config/ into the client's configuration. Codex's generated configuration uses a 120-second tool timeout for longer editor operations. Keep the server folder at its configured location so the clients can find it.

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\Desktop\[MCP SERVER]\.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\\Desktop\\[MCP SERVER]\\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 server path. Keep the doubled backslashes required by JSON. You can also copy this server entry from config/claude-desktop.json.

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\Desktop\[MCP SERVER]\.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

Save and close any ScratchJr window opened through its ordinary shortcut, then run:

npm.cmd run doctor -- --launch

This launches ScratchJr with the local connection enabled and reports the detected app settings and projects. To check an already connected app without launching it, use npm.cmd run doctor.

In Cursor or Antigravity, 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.

If the tools do not appear, check that scratchjr is enabled, the JSON is valid, and both absolute paths exist. Confirm npm.cmd ci completed in the server folder, then restart the editor and start a new Agent chat. In Cursor, connection details are available in Output > MCP Logs; in Antigravity, inspect the server entry in Manage MCP Servers. Follow the editor'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.

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

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