Skip to main content
Glama

pack_sprite_sheet

Pack frames or sprites into one sheet (texture atlas) plus a JSON atlas in the frames-hash format Phaser and PixiJS load (TexturePacker JSON Hash). Without columns it packs tightly like voidless.dev/tools (shelf packing, tallest first); with columns it lays a uniform grid in the given order. Images up to 2048x2048, 256 frames, 32 MB of input per call. Free: no credits.

Tool call template

Replace each placeholder with a value matching the input schema. Only required parameters are included; add optional parameters as needed.

{
  "id": 1,
  "jsonrpc": "2.0",
  "method": "tools/call",
  "params": {
    "arguments": {
      "frames": "<frames>"
    },
    "name": "pack_sprite_sheet"
  }
}

Input Schema

NameRequiredDescriptionDefault
nameNoBase file name: <name>.png / <name>.jsonatlas
saveNoAlso save the result to your Voidless library (free, private) and return its asset id and cdn.voidless.dev URL, for passing to the next tool without base64
namesNoAtlas key per frame; default frame_000, frame_001…
framesYesFrames in order, each an image (https URL, library image key, data: URI or base64). An animated GIF counts as all its frames.
columnsNoLay out a grid with this many columns
paddingNoPixels around and between frames
px_per_unitNoWith sprite_scales: px per world unit in the base image (get_asset)
power_of_twoNoRound the sheet size up to 16, 32, 64…
world_heightNoWith sprite_scales: the sprite's world height (get_asset)
sprite_scalesNoOptional world scale: each frame's sprite_scale (get_asset), in frame order. The atlas then carries each frame's px per world unit and feet pivot, so a game draws every frame at one size

Schema Changelog

Changes observed during successful MCP inspections.

  1. First observed

TDQS

A4.4/5.0
Behavior4/5

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

Annotations already declare readOnly=false, destructive=false, idempotent=false and openWorld=true; the description adds real value on top by disclosing hard limits (2048x2048 images, 256 frames, 32 MB input per call), the packing algorithm used, and that calls are free with no credits. It does not describe the response payload shape (base64 vs URL) beyond what the save parameter's schema text implies.

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

Conciseness5/5

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

Three sentences, each front-loaded with the most decision-relevant information: what it produces, how the two packing modes differ, then the operating limits. No filler or restatement of the tool name.

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

Completeness4/5

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

For a 10-parameter tool with no output schema, the description covers output format, mode behavior, size limits and cost, which is most of what an agent needs. The gap is the return payload: it never says whether the caller gets base64 data, URLs, or both when save is false, leaving the agent to infer from the save parameter's schema text.

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

Parameters4/5

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

Schema coverage is 100%, so a 3 is the baseline; the description earns an extra point by explaining the semantic effect of columns (tight shelf packing vs uniform grid order) and that sprite_scales causes the atlas to carry px-per-world-unit and feet pivots. Other parameters (padding, power_of_two, px_per_unit) are left entirely to the schema.

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

Purpose5/5

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

States a specific verb and resource ('Pack frames or sprites into one sheet (texture atlas)') and names the exact output artifact: a JSON atlas in TexturePacker JSON Hash format loadable by Phaser and PixiJS. This is unmistakable against siblings such as slice_sprite_sheet (the inverse operation) or animate_sprite.

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

Usage Guidelines4/5

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

Gives concrete mode-selection guidance: omit columns for tight shelf packing (tallest first), supply columns for a uniform grid in the given order. It does not name alternatives or exclusions (e.g. when to use slice_sprite_sheet instead, or when save=true is preferable to inline output), so it stops short of full when/when-not coverage.

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

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.

Resources