ScratchJr Desktop MCP Server
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@ScratchJr Desktop MCP Servercreate a new project with a cat character and a "hello" speech bubble"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
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 |
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 |
This integration controls ScratchJr Desktop. The tablet version and Scratch 3 use different integrations.
Installation Setup:
1. Install and initialize ScratchJr Desktop
Open the ScratchJr Desktop download page and select the Windows installer. This is the community desktop port.
Run the installer, then launch ScratchJr Desktop.
Create a small project, return to the project library to save it, and close ScratchJr.
Confirm the database exists at
C:\Users\SkieHackerYT\Documents\ScratchJR\scratchjr.sqllite. On another PC, replaceSkieHackerYTwith 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\_AssetsCreate it if it does not already exist:
New-Item -ItemType Directory -Path 'C:\Users\SkieHackerYT\Documents\ScratchJr\_Assets' -ForceKeep 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 --versionOpen 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 ci4. Register the server with Claude and Codex
From the same project folder, run:
npm.cmd run setupSetup 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 |
|
Claude Code | User-level registration; verify with |
Codex |
|
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.
Open your project in Cursor.
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 |
|
Project |
|
Add the configuration below. If the file already contains servers, merge only the
scratchjrentry into its existingmcpServersobject.
{
"mcpServers": {
"scratchjr": {
"command": "C:\\Program Files\\nodejs\\node.exe",
"args": [
"C:\\Users\\SkieHackerYT\\Desktop\\[MCP SERVER]\\src\\server.js"
]
}
}
}Save the file and restart Cursor. Open Customize > MCPs and enable
scratchjrif needed.Start an Agent chat and ask it to call
scratchjr_connect, thenscratchjr_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
Open Antigravity IDE and its Agent side panel.
Click … > MCP Servers > Manage MCP Servers > View raw config.
In the opened
mcp_config.json, merge the samescratchjrconfiguration shown above intomcpServers. Preserve any other server entries.Save the file, then refresh the MCP server list or restart Antigravity. Ensure
scratchjris enabled.Start a new Agent conversation and ask it to call
scratchjr_connect, thenscratchjr_list_projects.
Current Antigravity documentation lists these configuration locations:
Scope | Configuration file on this PC |
Global |
|
Workspace |
|
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 -- --launchThis 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:
Open Claude Desktop, Claude Code, Codex, Cursor, or Antigravity and start a new Agent conversation after registration.
Ask the assistant to call
scratchjr_connectand checkscratchjr_status.Describe the story, animation, or game you want. Include characters, scenes, dialogue, and what should happen when a character is clicked.
Have the assistant inspect available assets and blocks, create the project, run it, and check a screenshot. For custom artwork, register the SVG from
_Assetsbefore using it in the project.Test the project in ScratchJr using the green flag and character clicks.
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 |
| Connect, launch, or inspect connection status |
| Discover installed characters, backgrounds, and sounds |
| Read block names, allowed arguments, and units |
| Find projects and inspect their actual data |
| Build a complete project with pages, characters, text, and scripts |
| Batch edits while preserving unrelated objects |
| Open and persist projects |
| Start green-flag scripts, stop, or reset |
| Exercise click interactions |
| Create a custom character or background from static SVG geometry |
| Return an actual editor screenshot to the assistant |
| 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 demonpm 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 |
| Auto-detected versioned ScratchJr executable |
|
|
|
|
| This server's |
| This server's |
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 toolsscratchjr_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.
| Name | Required | Description | Default |
|---|---|---|---|
| svg | Yes | ||
| kind | Yes | ||
| name | Yes | ||
| width | Yes | ||
| height | Yes |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
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.
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.
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.
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.
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.
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_referenceBRead-only
Get supported blocks, values, units and ScratchJr project-building guidance.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| objectId | Yes |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| project | Yes |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| projectId | Yes | Project ID from list_projects or create_project | |
| operations | Yes | ||
| expectedRevision | Yes |
TDQS
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.
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.
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.
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.
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.
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_projectARead-only
Export a JSON backup of a project and referenced custom media. This is not the tablet .sjr sharing format.
| Name | Required | Description | Default |
|---|---|---|---|
| projectId | Yes | Project ID from list_projects or create_project |
TDQS
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.
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.
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.
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.
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.
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_projectARead-only
Read project data, page/object IDs and revision. Includes unsaved editor state when open. Call before editing.
| Name | Required | Description | Default |
|---|---|---|---|
| projectId | Yes | Project ID from list_projects or create_project |
TDQS
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.
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.
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.
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.
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.
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_assetsARead-only
List real installed character, background and sound assets. Use exact md5 filenames in projects.
| Name | Required | Description | Default |
|---|---|---|---|
| kind | No | all | |
| search | No |
TDQS
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.
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.
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.
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.
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.
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_projectsARead-only
List saved ScratchJr projects.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| projectId | Yes | Project ID from list_projects or create_project |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| projectId | No | Project ID from list_projects or create_project |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
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.
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.
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.
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.
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.
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_screenshotARead-only
Capture the real ScratchJr window and return an image for visual verification, plus its saved file path.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
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.
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.
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.
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.
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.
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_statusARead-only
Check the live ScratchJr connection without launching the app.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| reset | No |
TDQS
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.
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.
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.
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.
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.
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.
17 tool updates
v1.0.0- First observed
scratchjr_add_svg_asset - First observed
scratchjr_backup - First observed
scratchjr_block_reference - First observed
scratchjr_click_character - First observed
scratchjr_connect - First observed
scratchjr_create_project - First observed
scratchjr_edit_project - First observed
scratchjr_export_project - First observed
scratchjr_get_project - First observed
scratchjr_list_assets - First observed
scratchjr_list_projects - First observed
scratchjr_open_project - First observed
scratchjr_run_project - First observed
scratchjr_save_project - First observed
scratchjr_screenshot - First observed
scratchjr_status - First observed
scratchjr_stop_project
TDQS
Scored across 17 tools
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.
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.
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).
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
Related MCP Connectors
LLM chat, text tools, image generation, editing, batch image jobs, and asynchronous video generation
- MorphedOAuthapp.morphed
Create AI images and videos, manage projects and credits, and use workspace campaign context.
- ApricotOAuthtools.apricot
Manage SysML2 projects and files directly through your coding agent.
Create and manage AI agents that collaborate and solve problems through natural language interacti…
Related MCP Servers
- AlicenseNot gradedqualityCmaintenanceEnables AI agents to programmatically edit Scratch .sb3 projects and preview changes live in TurboWarp Desktop via MCP tools and a live-reload bridge.1Mozilla Public 2.0
- AlicenseNot gradedqualityDmaintenanceEnables AI agents to create, compile, and run Scratch projects by editing plain text and using a live editor loop.16 npm1Mozilla Public 2.0
- AlicenseAqualityDmaintenanceConnects AI assistants to live Purl Studio projects, enabling reading objects, modifying scripts, and setting properties.263 npmMIT
- FlicenseNot gradedqualityCmaintenanceEnables 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.-