spriteloom-mcp
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., "@spriteloom-mcpgenerate a 64x64 pixel-art sprite of a knight with a red shield"
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.
spriteloom-mcp
Give Claude, Codex, and other MCP clients local tools to create and edit pixel-art sprites. This repository contains a small stdio MCP server and an agent skill. The model runs in the separate spriteloom-mlx engine. Aseprite is optional.
Based on SpriteLoom, created by Valentyn Karachevtsev (vkarach). The original project supplies the sprite workflow, prompts, image processing, protocol, and Aseprite extension. This independent integration adds agent tools and client setup. See NOTICE and the Apache 2.0 license.
Install
First set up the engine on Apple Silicon:
git clone https://github.com/AlexPascu007/spriteloom-mlx.git
cd spriteloom-mlx
./setup-mlx.sh
cd ..
git clone https://github.com/AlexPascu007/spriteloom-mcp.git
cd spriteloom-mcp
uv venv --python 3.12
uv pip install -e .Keep the two repositories in the same parent directory, or set
SPRITELOOM_ENGINE_ROOT to the absolute engine path. The MCP environment
contains no model runtime. The engine uses its own Python environment.
Preview the client changes, then apply them:
.venv/bin/python scripts/install-agent-integration.py --all --engine-root ../spriteloom-mlx
.venv/bin/python scripts/install-agent-integration.py --all --engine-root ../spriteloom-mlx --applyThe installer supports Codex, Claude Code, and Claude Desktop on macOS.
It preserves other configuration entries and makes backups before changes.
Use --replace to update an existing SpriteLoom entry. Restart the clients
after installation. The skill is installed for Codex and Claude Code.
Claude Desktop receives the MCP tools; see MCP.md for skill use
and manual configuration.
For another MCP client, use the absolute path to .venv/bin/python as the
command, with the absolute path to mcp_entry.py as its only argument.
Set SPRITELOOM_ENGINE_ROOT in the server environment.
Related MCP server: pixelsmith
Tools
Tool | Purpose |
| Check service state without loading the model |
| Create a sprite from text |
| Edit an existing sprite by instruction |
| Redraw a mask and save a complete sprite |
| Generate a requested view of a subject |
| List saved runs and their metadata |
| Release the managed engine when it is idle |
Image tools return PNG previews, absolute output paths, seeds, and metadata.
Each run has its own folder under ~/spriteloom-output. Source files remain
unchanged. Default output is 64 by 64 pixels with one variant. Output sides
can be 1–512 pixels; variants can be 1–8. Larger work takes more time.
Editing preserves the source palette by default. Set preserve_palette=false
for new colors. Inpaint masks use white for the area to redraw and black for
the area to preserve. The complete output keeps every pixel outside the mask.
View changes depend on model quality; they do not produce an animation.
Service behavior
The first image request starts the headless engine. Multiple MCP clients
share one engine and one model allocation. Requests run in sequence.
The engine stops after ten idle minutes by default. Status checks do not
reset this timer. stop_service can stop only a managed, idle engine.
It does not stop an independently launched engine.
The default connection is local, at 127.0.0.1:8765. Standard output carries
only MCP messages. Engine logs go to ~/.cache/spriteloom-mcp.
No cloud image API or API key is needed.
Environment settings:
SPRITELOOM_ENGINE_ROOT: engine checkout with its.venvand model cache.SPRITELOOM_OUTPUT_DIR: output directory; legacySPRITELOOM_OUTalso works.SPRITELOOM_PORT: local engine port.SPRITELOOM_IDLE_SECONDS: idle shutdown delay;0disables it.SPRITELOOM_URL: explicit WebSocket connection to an existing engine. This mode does not start or stop the engine. Use a trusted connection.
Development
uv pip install -e '.[dev]'
.venv/bin/python -m pytest -qThis server uses the official Python MCP SDK, pinned to 1.30.0.
Its design follows patterns from the official
filesystem server
and GitHub MCP server: a separate
stdio process, clear tool schemas, tool annotations, and explicit client setup.
See VALIDATION.md for local test results and model limits.
Version 0.2 replaces the earlier spriteloom_generate, spriteloom_edit, and
spriteloom_inpaint names with the names above. Inpaint now returns a complete
edited sprite; set overlay_path to save a separate transparent patch. Update saved prompts after upgrading.
Model weights and Aseprite binaries are not distributed in this repository.
Available Tools
7 toolsedit_spriteEdit spriteB
Edit an existing sprite with an instruction. The source dimensions are used when width or height is omitted. preserve_palette keeps the source palette unless set to false. The source file is never changed.
| Name | Required | Description | Default |
|---|---|---|---|
| seed | No | ||
| width | No | ||
| height | No | ||
| prompt | Yes | ||
| palette | No | ||
| variants | No | ||
| background | No | auto | |
| image_path | Yes | ||
| output_dir | No | ||
| preserve_palette | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare the non-read-only, non-destructive, non-idempotent profile, and the description genuinely adds to that: 'The source file is never changed' tells the agent edits are written to a new output rather than mutating input, and the preserve_palette default is disclosed. It does not cover where output lands or how variants interact.
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?
Four short sentences, each carrying distinct information, with the core action front-loaded. No filler, though the default-behavior notes could be consolidated.
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 10-parameter tool with zero schema descriptions and no output schema, the description is thin: it never says where results are written, how 'variants' produces multiple outputs, what 'background' modes do, or how 'palette' relates to 'preserve_palette'. An agent could call it but would be guessing on most options.
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 0% across 10 parameters, so the description carries the full burden, but it explains only two behaviors: width/height defaulting to source dimensions and preserve_palette defaulting true. Seed, palette, variants, background (the sole enum), output_dir, and prompt semantics are all left undocumented.
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 and resource: 'Edit an existing sprite with an instruction.' It clearly distinguishes the operation from generating or transforming a sprite, though it never names the siblings (generate_sprite, inpaint_sprite, rotate_sprite) that an agent would choose between.
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?
Usage is only implied: 'existing sprite' suggests this is the tool for modifying an already-created asset. There is no explicit statement of when to prefer it over inpaint_sprite or rotate_sprite, nor any prerequisites (e.g., the file must exist).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
generate_spriteGenerate spriteB
Generate one or more pixel-art sprites from a prompt. Width and height are 1..512 pixels. Each result is saved in a unique output directory and returned as a PNG preview.
| Name | Required | Description | Default |
|---|---|---|---|
| seed | No | ||
| width | No | ||
| height | No | ||
| prompt | Yes | ||
| palette | No | ||
| variants | No | ||
| background | No | auto | |
| output_dir | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false, destructiveHint=false, idempotentHint=false, and openWorldHint=false. The description usefully adds that output is written to a unique directory and surfaced as a PNG preview, but says nothing about latency, cost of variants, or how seeds affect reproducibility.
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, front-loaded with what the tool produces, followed by the one non-obvious constraint and the return behavior. Nothing is padded.
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?
With 8 parameters, 0% schema coverage, and no output schema, the description leaves most inputs (seed, palette, variants, background, output_dir) undocumented. The output preview note is helpful but the input surface is largely unexplained.
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% across 8 parameters, so the description must carry the load. It only restates width/height bounds (already in the schema) and ignores seed, palette, variants, background, and output_dir entirely.
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 and resource ("Generate ... pixel-art sprites from a prompt") and mentions it can produce multiple results. It's clearly the creation tool among siblings like edit_sprite, inpaint_sprite, and rotate_sprite, though it never names those alternatives 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?
"From a prompt" implies use this when creating from scratch rather than modifying an existing sprite, which is the only usage signal. There is no explicit when-to-use/when-not guidance relative to edit_sprite or inpaint_sprite.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
inpaint_spriteInpaint spriteB
Inpaint a selected region of an existing sprite. image_path and mask_path must have equal dimensions. The returned patch is clipped to the original binary mask, then composited with source pixels outside the mask preserved. Set overlay_path to save transparent patch PNGs as well as composite PNGs.
| Name | Required | Description | Default |
|---|---|---|---|
| seed | No | ||
| prompt | Yes | ||
| palette | No | ||
| variants | No | ||
| mask_path | Yes | ||
| background | No | auto | |
| image_path | Yes | ||
| output_dir | No | ||
| overlay_path | No | ||
| preserve_palette | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate this is a non-readonly, non-destructive, non-idempotent operation. Beyond that, the description usefully discloses compositing behavior: the patch is clipped to the binary mask, source pixels outside the mask are preserved, and overlay_path saves transparent patch and composite PNGs.
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 three sentences, front-loaded with the core action, and each sentence adds relevant information about constraints or output behavior. There is little wasted text.
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 10-parameter generation tool with no output schema and 0% schema description coverage, the description covers the central operation and compositing behavior but leaves many parameters undocumented. It is minimally viable but incomplete for reliable invocation across all options.
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% across 10 parameters. The description only addresses image_path, mask_path, and overlay_path, leaving prompt, seed, variants, palette, background, output_dir, and preserve_palette unexplained.
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 and resource: inpainting a selected region of an existing sprite. It is clear what the tool does, though it does not explicitly distinguish itself from sibling tools like edit_sprite or generate_sprite.
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?
Usage is implied by the operation: use this when you have an image and a mask selecting the region to regenerate. However, the description does not explicitly say when to use this versus edit_sprite or generate_sprite, nor does it state when not to use it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_generationsList SpriteLoom generationsBRead-onlyIdempotent
List recent MCP-owned generation metadata. Only metadata files with the SpriteLoom MCP ownership marker are read; arbitrary directories and files are ignored.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| output_dir | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, destructiveHint=false and openWorldHint=false, so safety is covered. The description adds genuinely new context that only ownership-marked metadata files are read and other files are ignored, but says nothing about result ordering, pagination, or what happens with an empty result.
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 tight sentences with the core purpose front-loaded and the filtering constraint second. Nothing redundant or padded.
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 listing tool this is close, but with no output schema and 0% schema description coverage, the description should at least explain what output_dir changes and what the listing returns. The ownership-marker detail is helpful but leaves the listing's shape and the meaning of its only substantive parameter undocumented.
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 never mentions either parameter. Neither 'limit' (default 20, max 100) nor 'output_dir' (null default, semantics entirely unexplained) is clarified, so the agent gets no help on what output_dir actually scopes.
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 and resource ("List recent MCP-owned generation metadata") with a clear scope qualifier. It doesn't explicitly contrast itself with siblings like generate_sprite or spriteloom_status, but the read-only listing purpose is unambiguous.
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 statement of when to use this versus siblings (generate_sprite, edit_sprite, spriteloom_status) or when not to. The note about ignored arbitrary files is a scoping constraint on behavior, not usage guidance, so the agent must infer intent.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
rotate_spriteRotate sprite viewB
Re-view a sprite from a requested direction with SpriteLoom's instruction mode. Provide the subject and view explicitly. This uses the model; it does not rotate pixels. image_path is never changed.
| Name | Required | Description | Default |
|---|---|---|---|
| seed | No | ||
| view | Yes | ||
| palette | No | ||
| subject | Yes | ||
| symmetry | No | ||
| variants | No | ||
| background | No | auto | |
| image_path | Yes | ||
| output_dir | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare non-read-only, non-destructive behavior. The description adds useful context: the operation invokes the model, does not rotate pixels, and never changes image_path. It still omits where generated outputs are written and whether new files are created.
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 three short sentences, front-loaded with purpose and followed by key caveats. It wastes little space, though the instruction to provide subject and view could be more tightly integrated.
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 9-parameter tool with no output schema and zero schema descriptions, the description is too sparse. It clarifies the core operation but leaves most parameters and the output behavior undocumented, so an agent cannot fully understand the call from the definition.
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% across 9 parameters, so the description must compensate. It only mentions subject, view, and image_path, leaving seed, palette, symmetry, variants, background, and output_dir completely unexplained.
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 operation: re-viewing a sprite from a requested direction using SpriteLoom's instruction mode, and clarifies that it does not rotate pixels. It is distinguishable from generic generation, though it does not explicitly contrast with siblings such as edit_sprite or generate_sprite.
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?
Usage is implied: use this when you need a new directional view of a subject, and note that it is model-based rather than pixel manipulation. However, there are no explicit exclusions, prerequisites, or named alternatives to guide selection among the sibling sprite tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
spriteloom_statusSpriteLoom statusARead-onlyIdempotent
Read the local SpriteLoom service state. This never starts the model and returns state, backend, WebSocket URL, process ID, and ownership.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, destructiveHint=false and openWorldHint=false, so the safety profile is covered. The description still adds real value by asserting the call has no side effect on the model and by enumerating what is returned (state, backend, WebSocket URL, process ID, ownership).
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 zero filler, and the core purpose plus the key non-behavior ('never starts the model') are front-loaded.
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 with no output schema, the description covers the essential return fields and the no-side-effect guarantee. It stops short of describing the shape or possible values of those fields, but that is a minor gap for this complexity level.
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 takes zero parameters, so there is nothing for the description to disambiguate; baseline 4 applies. No misleading parameter hints are present.
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 ('Read') and resource ('local SpriteLoom service state'), and makes clear it is a pure read that never starts the model, which separates it from stop_service and the generation siblings. An agent can identify the tool without opening the schema.
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 'never starts the model' implies this is the safe way to inspect state before acting, but the description never explicitly says when to call it versus start/generate tools. Usage is inferable rather than stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
stop_serviceStop SpriteLoom serviceAIdempotent
Explicitly stop the shared headless SpriteLoom service. Generation tools share the service; it also stops after ten idle minutes by default.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already declare idempotent=true, destructive=false, and readOnly=false, so the safety profile is largely covered. The description adds useful behavioral context about the shared service and automatic idle timeout, though it does not state what happens to in-flight generation work.
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-loaded with the action and followed by the relevant shared-service context. There is no wasted text.
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 service-control tool with rich annotations, the description is nearly complete. The only meaningful gap is whether stopping interrupts active sprite-generation requests.
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 there are no parameter semantics to explain. The empty schema is sufficient, and baseline credit 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 states a specific verb and resource: 'Explicitly stop the shared headless SpriteLoom service.' It also clarifies scope by noting that generation tools share the service, which distinguishes this control action from the generation siblings.
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?
It gives clear usage context by contrasting explicit stopping with the default ten-minute idle shutdown. However, it does not name a specific alternative sibling such as status or explain situations where stopping would be inappropriate.
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.
7 tool updates
v0.2.0- First observed
edit_sprite - First observed
generate_sprite - First observed
inpaint_sprite - First observed
list_generations - First observed
rotate_sprite - First observed
spriteloom_status - First observed
stop_service
TDQS
Scored across 7 tools
Six of seven tools are cleanly separated by action: generate, edit, inpaint, rotate, list, stop, status. The main risk is edit_sprite vs rotate_sprite, since both take an existing image plus an instruction; the rotate description explicitly says it re-views rather than rotates pixels, which mitigates but does not eliminate the overlap.
Most tools follow a consistent verb_noun pattern (generate_sprite, edit_sprite, inpaint_sprite, rotate_sprite, list_generations, stop_service). spriteloom_status breaks the pattern by being noun-first with a vendor prefix, a minor deviation within an otherwise predictable set.
Seven tools is well-scoped for a sprite generation service: four generation/editing operations plus lifecycle and listing helpers. No tool appears redundant or superfluous.
Core lifecycle is covered: generate, modify (edit/inpaint/rotate), list, status, stop. Minor gaps exist — no delete/cleanup of generated outputs, no get-by-id detail fetch for a single generation, and no explicit service start — but these are workable around the filesystem.
Maintenance
Related MCP Connectors
MCP server for Pixapi: check live credit pricing and balance, then generate images and video.
Generate authentic pixel art - sprites, animations, and tilesets - from any MCP client
Generate AI images and videos from any compatible MCP client.
Generate, edit, style-match, turn, and animate game-ready pixel art at exact sizes.
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceMCP server for programmatically creating and editing Aseprite sprites, enabling AI agents to draw, manage layers and frames, and iterate until the desired result is achieved.120 npmMIT
- AlicenseNot gradedqualityBmaintenanceAn MCP server that lets AI agents create, edit, and animate pixel-art sprites, with PNG previews after every step and support for export to GIF/APNG/spritesheets.19,746 npmMIT
- FlicenseNot gradedqualityCmaintenanceEnables MCP clients to create and edit pixel art and animations through a local-first editor, sharing the same project, editing commands, and undo history with the GUI.-
- AlicenseNot gradedqualityCmaintenanceEnables agents to generate local SDXL pixel art assets from text prompts, run batch manifests, list generated assets, create spritesheets, and export Phaser atlas JSON through MCP tools.MIT