LPC Character Generator — MCP
An MCP server that lets you create, preview, search, and export LPC pixel-art character spritesheets with engine-ready files and credits.
Search/list LPC items by query, category, body type, animation, type, completeness, and license.
Get item details: colors, variants, multi-color parts, animations, missing animations, and complete alternatives.
Generate character spritesheets from item lists (body, head, hair, clothes, etc.) with colors and variants.
Preview characters in chat as animated GIFs or stills, showing all 4 directions.
Randomly generate characters or batches of NPCs with seeds and fixed items.
Import/export generator site URLs and JSON clipboard links.
Export for Godot (.tres SpriteFrames), Unity (.meta, .controller, .anim), web (JSON atlas + demo), and site JSON.
Save to custom output directories, zip outputs, and split by animation, frame, or item.
Check animation completeness and license safety (e.g., CC0/OGA-BY for DRM stores) with warnings and replacements.
Manage cache and update item definitions from the official LPC repository.
Exports generated LPC character spritesheets for Unity, producing sliced PNG sprites, a Unity Animator Controller with one state per animation, and .anim files for use with SpriteRenderer and Animator.
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., "@LPC Character Generator — MCPGera um ferreiro moreno com avental de couro e martelo e exporta para Godot"
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.
LPC Character Generator — MCP
English · Português
An MCP server that builds LPC pixel-art character spritesheets — the same parts as the Universal LPC Spritesheet Character Generator — and exports them ready for Godot, Unity and the web (Phaser/PixiJS).
Ask in plain language ("make a tanned blacksmith with a leather apron and a hammer") and your assistant assembles the character, shows an animated preview in the chat and saves the files.


Every character above was generated by this MCP — themed ones (knight, viking, wizard, skeleton, orc, legionary, pirate, king...) and random ones.

The in-chat preview (preview_character) is an animated GIF — here a blacksmith hammering:

Installation

You need uv and Git. uv fetches the right Python and the package by itself — nothing to clone, no dependencies to install.
Install uv (once):
Windows:
powershell -c "irm https://astral.sh/uv/install.ps1 | iex"macOS/Linux:
curl -LsSf https://astral.sh/uv/install.sh | sh
Prepare the server (downloads the item definitions, ~10 s, only once):
uvx lpc-character-mcp --setupRegister it in your assistant (below). The command is always
uvx lpc-character-mcp.
To run the latest code straight from GitHub, replace uvx lpc-character-mcp with
uvx --from git+https://github.com/kyuza1/lpc-character-mcp lpc-character-mcp in any example.
Characters are saved to ~/lpc-characters (on Windows, C:\Users\<you>\lpc-characters).
Set LPC_OUTPUT_DIR to change it — for example, to your Godot/Unity sprites folder.
lpc-character-mcp --where prints every folder in use. Messages are in English; set
LPC_LANG=pt for Portuguese.
Claude Code
claude mcp add lpc --scope user -- uvx lpc-character-mcpClaude Desktop
One click: download lpc-character-mcp.mcpb from the
latest release and open it
(or drag it into Settings → Extensions). You can pick the output folder and language
during install.
Or add it by hand in Settings → Developer → Edit config (claude_desktop_config.json):
{
"mcpServers": {
"lpc": { "command": "uvx", "args": ["lpc-character-mcp"] }
}
}Codex (OpenAI)
codex mcp add lpc -- uvx lpc-character-mcpOr edit ~/.codex/config.toml (on Windows, %USERPROFILE%\.codex\config.toml):
[mcp_servers.lpc]
command = "uvx"
args = ["lpc-character-mcp"]
startup_timeout_sec = 60Check with codex mcp list. The same file is used by the Codex VS Code extension.
Antigravity (Google)
In the agent panel click … → MCP Servers → Manage MCP Servers →
View raw config and add to mcp_config.json (~/.gemini/config/mcp_config.json;
on Windows, %USERPROFILE%\.gemini\config\mcp_config.json):
{
"mcpServers": {
"lpc": { "command": "uvx", "args": ["lpc-character-mcp"] }
}
}Save and click Refresh on the MCP Servers page. In the Antigravity CLI, use /mcp.
Directories
Listed on Smithery,
Glama and the official MCP Registry
as io.github.kyuza1/lpc-character-mcp, which clients and directories that read the
registry pick up automatically.
Other MCP clients
Any client that runs stdio servers works with the same uvx lpc-character-mcp command.
Without uv (pip)
pip install lpc-character-mcp
lpc-character-mcp --setupThen register the lpc-character-mcp command (no arguments) in your assistant.
Tips
Free disk space:
lpc-character-mcp --clear-cachedeletes cached images (--clear-cache 30only those unused for 30 days).Update:
uvx lpc-character-mcp@latest --versionApp can't find
uvx: use the full path (where uvxon Windows,which uvxelsewhere).
Related MCP server: grok-game-mcp
Example requests
"Make a tanned blacksmith with a leather apron and a hammer, export for Godot"
"Show me an animated preview of him hammering"
"Generate 10 random villagers with seed 1, with Unity files"
"Open this link and generate the character: https://liberatedpixelcup.github.io/...#sex=male&body=..."
"Which aprons have an idle animation for the male body?"
Tools
Tool | What it does |
| Builds the PNG, the credits, the animation report and (optionally) engine files |
| In-chat preview: animated GIF with the 4 directions |
| Searches items with filters; complete items first |
| Colors, variants, multi-color parts and the animations available per body |
| Lists item categories |
| Rolls a random character |
| Generates many random NPCs at once |
| Reads / builds generator site links (including old links); |
| Pulls new items and palettes from the official repository |
| Deletes cached images (or only those unused for N days) |
Example items:
[
{"id": "body/body", "color": "bronze"},
{"id": "head/heads/human/heads_human_male"},
{"id": "hair/short/hair_plain", "color": "dark_brown"},
{"id": "torso/shirts/longsleeve/torso_clothes_longsleeve", "color": "white"},
{"id": "torso/aprons/torso_aprons_overalls", "variant": "leather"},
{"id": "legs/pants/legs_cuffed", "color": "white"},
{"id": "feet/boots/feet_boots_basic", "color": "brown"},
{"id": "tools/tool_hammer", "color": ["steel", "walnut"]}
]Colors
"color": "blonde"— one color (seecolorsinget_item)."color": ["steel", "walnut"]— multi-part items (head and handle, armor and belt...). Parts are listed incolor_partsfromget_item;nullkeeps a part's default.Head, ears, nose and other skin items without a color inherit the body color.
One item per type, like the site: asking for two hairstyles keeps the last one (and says so in
warnings).
Where to save
output_dir saves straight into a folder — e.g. your game's sprites folder:
"generate the blacksmith in C:/my-game/art/npcs and export for Godot". Otherwise files go
to LPC_OUTPUT_DIR or ~/lpc-characters.
Layout and parts
layout: "standard"(default) — same as the site: 832px wide, every animation always on the same row (walk at y=512, slash at y=768...). Oversized animations go below y=3456.layout: "compact"— only the requested animations, stacked.split— also saves pieces:"animation"(one PNG per animation),"frame"(one PNG per frame in<name>_frames/<animation>/<direction>_NN.png) and/or"item"(one sheet per item, for swapping outfits in-game). Accepts a list:["animation", "frame"].
Oversized animations
Big weapons and tools (swords, spears, hammer, axe, bow...) use 128 or 192px frames. They
are added automatically when their base animation is requested (asking for slash with
the hammer also produces tool_hammer).
Complete animations
Not every LPC item has art for all 15 animations (e.g. the apron has no idle, run,
jump...). In those animations the item simply disappears. To avoid surprises:
Every result warns you.
generate_characteralways returnsanimation_check:"animation_check": { "complete": false, "incomplete_items": { "torso/aprons/torso_aprons_apron": { "missing": ["climb", "idle", "jump", "sit", "emote", "run", ...], "complete_alternatives": ["torso/aprons/torso_aprons_overalls", ...] } }, "summary": "ATENÇÃO: nem todas as animações ficaram completas: Apron não tem ..." }The preview, batches and the web demo warn too.
prefer_complete: truereplaces each incomplete item with the closest item that has every animation, keeping the color (e.g. apron → overalls). Replacements are listed inreplaced. The assistant is told to ask you first.Search puts complete items first.
search_itemslists them first, showsmissing_animationsfor the others and acceptscomplete_only: true.get_itemshows what is missing and suggestscomplete_alternatives.Random characters only use complete items.
Not counted as missing: face, nose, beard, glasses and necklaces in climb (the character
faces away), expressions in hurt, weapons/tools/shields — which by nature only appear in
their own animations (listed in equipment_only_in) — and animations the body itself
lacks (listed in body_missing).
Licenses (Steam, App Store)
LPC art comes under several licenses. For stores with DRM (Steam, App Store...) only
CC0 and OGA-BY art is safe. Pass licenses: ["CC0", "OGA-BY"] to search_items,
random_character, generate_batch or generate_character to stick to them — every art
part of the chosen body must offer one of those licenses (stricter than the site, which
accepts an item if any part does). Every result also has license_check:
"license_check": {"drm_safe": true, "share_alike_required": false, "summary": "..."}Exporting to engines
Pass export to generate_character (you can combine them). Animations play in the same
frame order as the official generator (walk skips the standing frame, idle/sit/emote hold
frames...), and the site's extra animations are included: 1h_slash (one-handed slash) and
watering (with the watering can). zip: true packs everything into <name>.zip.
| Files | How to use |
|
| Generate with |
|
| Generate with |
|
| TexturePacker-style (hash) atlas with |
|
| Paste it into the generator site's Import from Clipboard (JSON) button to keep editing there. |
Art credits
Every generation writes <name>_credits.txt and <name>_credits.csv with authors,
licenses and links for only the art that was used, plus a ready-to-paste text for your
game's credits screen (credits.statement). The sprites are LPC art
(CC-BY-SA 3.0, OGA-BY 3.0, GPL 3.0 and others) — if you ship a game, include these credits.
Limitations
Some types have no complete version at all (capes, backpacks, dresses, skirts). With
prefer_completethey stay as they are andanimation_checksays so.The LPC muscular, child and pregnant bodies lack some animations (e.g. muscular has no
shootorclimb);animation_checkreports them inbody_missing.Godot 3 is not supported (Godot 4 only). Unity was tested on Unity 6.
Runs locally (stdio); it does not work with clients that only accept remote servers.
Development
git clone https://github.com/kyuza1/lpc-character-mcp.git
cd lpc-character-mcp
pip install -e ".[dev]"
python -m pytest -qFrom a clone, definitions, cache and output live inside the clone (lpc/, cache/,
output/). Tests run on GitHub Actions on Linux, Windows and macOS on every push and
every Monday (to catch changes in the official LPC repository). Releases are published to
PyPI automatically when a GitHub release is created. See CHANGELOG.md.
License
Code under MIT. The downloaded art belongs to the LPC artists and follows their licenses (see the generated credits files).
Available Tools
11 toolsclear_cacheA
Deletes cached images (they are downloaded again when needed). older_than_days: only delete images unused for more than N days (0 = all). dry_run: only report how much would be freed, without deleting.
| Name | Required | Description | Default |
|---|---|---|---|
| dry_run | No | ||
| older_than_days | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description must carry the behavioral burden. It does disclose a key recovery property (images are re-downloaded when needed) and the dry_run reporting mode, but omits whether the operation is destructive, whether it can be undone, permission requirements, and whether it blocks or is synchronous.
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 tight lines: a purpose statement followed by one line per parameter. Front-loaded and free of redundant filler; each sentence 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 two-parameter, annotation-less mutation tool, the description covers purpose, both parameter meanings, and the re-download behavior. The remaining gap is the absence of any permission, irreversibility, or scope caveats, which is a modest but real omission.
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%, so the description must compensate, and it does: it explains the exact semantics of both parameters, including the non-obvious note that 0 means all and that dry_run reports without deleting. It does not document the types or defaults, but the meaning of each parameter is fully clarified.
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 (Deletes) and resource (cached images), and adds the distinctive trait that they are downloaded again when needed. No sibling tool touches caching, so it is immediately differentiated from the list.
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 effect of each parameter is explained but there is no explicit when-to-use guidance, no mention of irreversibility, and no condition distinguishing when to prefer dry_run. Usage is implied from the parenthetical and parameter notes rather than stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
from_site_urlA
Reads a link from the LPC generator site (e.g. ...Character-Generator/#sex=male&body=Body_Color_light&...)
and returns {body_type, items} ready for generate_character (old links work too). Also
accepts the JSON from the site's "Export to Clipboard (JSON)" button.
Unrecognized parameters are listed in unresolved.
| Name | Required | Description | Default |
|---|---|---|---|
| url | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does disclose several important traits: legacy links are accepted, the clipboard-JSON format is accepted, and unrecognized parameters surface in an `unresolved` field. It does not say what happens on a malformed URL or whether any network fetch occurs, but disclosure is well above the annotation-less baseline.
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 does and what it returns; the inline URL example and legacy/clipboard caveats each carry real information. The truncated example URL is a little noisy but still illustrative rather than wasteful.
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 parsing tool with no output schema and no annotations, the description covers input formats, the returned structure, and the `unresolved` field, which is enough for an agent to call it correctly. Error handling for invalid input is the only notable omission.
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% (the lone `url` parameter is undocumented), so the description must compensate, and it largely does by explaining the two accepted input formats with a concrete URL example. It is slightly ambiguous whether the exported JSON is passed through the same `url` parameter, leaving a small 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?
States a specific verb and resource ("Reads a link from the LPC generator site") plus the exact output shape ({body_type, items}) and names generate_character as the consumer. It never explicitly contrasts itself with the inverse sibling to_site_url, so the differentiation is inferred from context rather than stated.
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 trigger conditions are clear: use it when you have a link from the LPC generator site or JSON from the site's Export to Clipboard button, and the result is "ready for generate_character". There is no explicit "when not to use this" or routing to an alternative tool, so it stops short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
generate_batchB
Generates many random characters at once (e.g. villagers for a town). Saves _01.png, _02.png... and the credits for each. body_types: bodies to pick from (default: male and female). fixed_items: items everyone gets (e.g. [{"id": "tools/tool_hammer"}]).
| Name | Required | Description | Default |
|---|---|---|---|
| seed | No | ||
| count | No | ||
| split | No | ||
| export | No | ||
| layout | No | standard | |
| prefix | No | npc | |
| licenses | No | ||
| animations | No | ||
| body_types | No | ||
| output_dir | No | ||
| fixed_items | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden, and it does disclose the file side effect and naming convention (<prefix>_01.png, <prefix>_02.png...) plus that credits are saved. However it omits permissions, whether existing files are overwritten, rate/scale limits, and the default output location implied by output_dir.
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?
Front-loaded with the core purpose in the first sentence, followed by output behavior and the two documented parameters. The inline JSON example for fixed_items is compact, though it edges toward schema duplication rather than description value.
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?
A batch-mutation tool with 11 parameters, no annotations, and no output schema leaves too much unexplained: nine parameters undocumented, no auth/permission notes, no overwrite behavior, and no locality of output described beyond the filename pattern.
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 11 parameters, yet the description documents only body_types and fixed_items (with an example). The other nine (seed, count, split, export, layout, prefix, licenses, animations, output_dir) get no meaning at all, so agents cannot reason about most inputs.
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 (generates many random characters at once) with a concrete framing example ('villagers for a town'), clearly distinguishing a batch operation from the single-character siblings. It stops short of explicitly naming the alternative tools like generate_character, so it is clear but not sibling-differentiated.
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 'many at once' framing implies batch use, and the villagers example hints at the scenario, but it never says when to prefer this over generate_character or how it relates to random_character. Usage is left to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
generate_characterA
Builds the character spritesheet and saves it as PNG.
Every result has animation_check: whether every item has every animation and, if not,
what is missing plus complete alternatives. TELL the user when complete=false.
prefer_complete=True swaps incomplete items for the closest item with every animation
(keeping the color when possible) and lists the swaps in replaced. Only use it with the
user's consent: it changes the look (e.g. apron becomes overalls).
output_dir: folder to save into (e.g. the game project's sprites folder). Inside a Godot
project the .tres gets the right res:// path; for Unity, save inside Assets/.
Default: LPC_OUTPUT_DIR or ~/lpc-characters.
items: list of {"id": "", "color": "" | ["<color 1>", "<color 2>"], "variant": ""}.
Include a body (body/body) and a head (e.g. head/heads/human/heads_human_male).
Skin items (head, ears, nose...) without a color inherit the body color.
Multi-part items (see color_parts in get_item) accept a list of colors.
body_type: male | female | muscular | pregnant | teen | child
animations: subset of walk, idle, slash, thrust, spellcast, shoot, hurt, run, jump... (default: all).
Oversized weapon/tool animations (e.g. slash_128, tool_hammer) are added automatically
when their base animation (slash, thrust...) is requested.
layout: "standard" = same layout as the site (832px wide, each animation always on the same
row; oversized animations below y=3456). It is what Godot/Unity/RPG Maker importers expect.
"compact" = only the requested animations, stacked.
split: also save pieces. True or "animation" = one PNG per animation (_anims/);
"frame" = one PNG per frame (_frames//_NN.png);
"item" = one sheet per item (_items/), for swapping outfits in-game.
Can be a list: ["animation", "frame"].
export: engine-ready files: "godot" (SpriteFrames .tres), "unity" (sliced sprites .meta,
.anim clips and an AnimatorController), "web" (JSON atlas for Phaser/PixiJS + demo page),
"site" (JSON for the generator site's "Import from Clipboard" button).
licenses: license families you accept (e.g. ["CC0", "OGA-BY"] for Steam). Items outside
them are listed in warnings. Every result has license_check (drm_safe,
share_alike_required) computed from the art actually used.
zip: also pack everything generated for this character into .zip.
Always writes _credits.txt and _credits.csv with authors and licenses of the art
used, including a ready-to-paste credits-screen statement (credits.statement).
| Name | Required | Description | Default |
|---|---|---|---|
| zip | No | ||
| items | Yes | ||
| split | No | ||
| export | No | ||
| layout | No | standard | |
| filename | No | character.png | |
| licenses | No | ||
| body_type | No | male | |
| animations | No | ||
| output_dir | No | ||
| prefer_complete | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full behavioral burden and does so richly: it discloses animation_check, license_check, warnings, replaced swaps, the consent requirement for prefer_complete, automatic oversized animation inclusion, and the credits files always written. This gives the agent a clear picture of side effects, outputs, and safety considerations.
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 long but front-loaded with the core purpose, then proceeds through parameter explanations efficiently. Each sentence adds useful detail, though the dense parameter-by-parameter format could be more visually structured. Length is justified by the tool's complexity and the absence of schema descriptions.
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 11-parameter generation tool with no annotations and no output schema, the description is remarkably complete. It explains behavior, output artifacts, validation checks, warnings, and parameter semantics well enough that an agent can invoke it correctly without additional context.
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%, so the description must explain all 11 parameters, and it does so for nearly every one: items structure, body_type values, animations subset, layout modes, split modes, export targets, licenses filtering, zip packaging, output_dir defaults, and prefer_complete behavior. Only filename is not explicitly described, which is a minor omission given the overall compensation.
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 opens with a specific verb and resource: 'Builds the character spritesheet and saves it as PNG.' This clearly separates it from preview-only or batch tools by specifying that it writes a PNG artifact. An agent can understand the core operation 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 description gives extensive guidance for individual parameters, including when to use prefer_complete only with user consent and when to use standard vs. compact layout. However, it never explicitly compares this tool to siblings like preview_character, random_character, or generate_batch, so tool-selection guidance is only implied.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_itemC
Item details: supported bodies, animations with art per body, missing animations and complete alternatives, colors or variants, multi-color parts and oversized animations.
| Name | Required | Description | Default |
|---|---|---|---|
| item_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral burden. It implies a read via 'details', but says nothing about error behavior for unknown IDs, whether the result is cached, or the cost/latency of the per-body animation expansion it advertises.
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?
It is a single compact sentence with no filler, so it is not bloated. However, it is structured as a comma list of payload fields rather than a front-loaded statement of action and purpose, which weakens its utility as a first-glance summary.
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 no output schema, the enumeration of returned data (bodies, animations, variants, multi-color parts) is genuinely useful and partially compensates. But the required input is undocumented and no usage context is supplied, leaving material gaps for a one-required-param tool.
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% for the single item_id parameter, and the description never explains its expected format or origin. The only semantic content is about the return payload, not the input, so the agent gets no help on how to construct the required argument.
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 reads as a fragment listing return contents ('Item details: supported bodies, animations...') rather than stating a verb+resource cleanly. It is inferable that this fetches details for one item, but it does not distinguish itself from search_items or list_categories, so an agent must guess the scope.
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 guidance is given. There is no statement of when to call get_item versus search_items or list_categories, and no mention of prerequisites such as needing a valid item_id. The agent is left to infer usage entirely.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_categoriesA
Lists item categories (e.g. body, hair, torso/shirts) with how many items each has.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden; it does disclose the return content ('how many items each has'), which is useful since there is no output schema. It says nothing about whether this is a pure read, permission needs, or result size, which are minor for a zero-parameter listing tool but not fully covered.
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 with zero filler; the resource comes first and the examples and return content follow 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?
With no annotations, no output schema, and no parameters, the description needs to convey purpose and return shape, which it does by naming categories and their item counts. An agent has enough to call it correctly, though a hint about ordering or scale is absent.
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 the baseline is 4; there is nothing for the description to disambiguate.
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 ('Lists item categories') and goes further by giving concrete examples (body, hair, torso/shirts), so an agent knows exactly what domain it covers. It does not explicitly contrast with siblings like get_item or search_items, keeping it short of a 5.
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: call this to discover what categories exist before searching or fetching items. There is no explicit when-to-use statement, no exclusion, and no named alternative among the many sibling tools, so it lands at minimum-viable.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
preview_characterA
Shows the character in the chat without saving files: the 4 directions side by side. animated=True (default) returns an animated GIF of the animation; False, a still image. animation: walk, idle, slash, run..., 1h_slash, watering, or an oversized one (tool_hammer, slash_128...). Use it to check the look before generate_character.
| Name | Required | Description | Default |
|---|---|---|---|
| items | Yes | ||
| animated | No | ||
| animation | No | walk | |
| body_type | No | male |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the burden and does well: it discloses that no files are saved (non-persistent), and that the return type varies (animated GIF vs still image) based on the animated flag. It does not cover auth requirements, rate limits, or error behavior, and never explains what the required items input must contain.
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?
Front-loads what the tool does and keeps to four tight lines with no filler; each sentence carries information. Slightly terse in places (e.g., the items obligation), but nothing is 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?
No output schema and no annotations, so the description must fully carry the behavior. It adequately covers the animated/animation semantics and the non-saving nature, but omits any explanation of the required items argument or body_type, leaving real gaps for a 4-parameter tool.
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%, so the description must compensate. It explains animated (True=GIF, False=still) and enumerates animation values (walk, idle, slash, run, 1h_slash, watering, oversized options), but says nothing about the required items parameter or body_type, leaving half the parameters 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?
Specific verb (shows/preview) plus resource (the character) with explicit scope: the 4 directions side by side, rendered in chat and not saved to files. It distinguishes itself from the siblings by naming generate_character as the follow-up and implying this is a non-persistent look-see versus random_character/generate_character.
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?
"Use it to check the look before generate_character" gives a clear usage context and names the alternative tool the agent should follow with. It does not state explicit when-not-to-use conditions, but the preview-before-generate framing is unambiguous.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
random_characterA
Rolls a random character (skin, head, hair, clothes, shoes and sometimes a beard, hat or
vest), using only items that have every animation. Does not render: returns
{items, body_type, url} to review and pass to generate_character. fixed_items are always
added (e.g. a weapon). Use seed to repeat the same roll. licenses limits the roll to
those license families (e.g. ["CC0", "OGA-BY"]).
| Name | Required | Description | Default |
|---|---|---|---|
| seed | No | ||
| licenses | No | ||
| body_type | No | male | |
| fixed_items | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does well: it discloses that no rendering occurs, that returned items are filtered to those with complete animations, that fixed_items are unconditionally merged in, and that seed makes rolls reproducible. Only permissions/rate/error behavior is absent, which is a minor gap for a pure randomizer.
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?
Dense but front-loaded: the core action and the no-render contract come first, then parameter notes. Every sentence carries information, though the parenthetical slot list is longer than strictly 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?
There is no output schema, yet the description spells out the return shape ({items, body_type, url}), which is exactly what an agent needs to chain into generate_character. Combined with the animation-completeness and fixed_items behavior, it is nearly complete; only body_type's semantics are 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 coverage is 0%, so the description must compensate. It explains fixed_items (always added, e.g. a weapon), seed (repeat the same roll), and licenses (restricts to named license families, with an example). However, body_type — a meaningful selector defaulting to 'male' — is never mentioned, leaving one of four parameters undocumented anywhere.
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 (rolls) and resource (random character) and enumerates the randomized slots (skin, head, hair, clothes, shoes, plus conditional beard/hat/vest). It also names the sibling it hands off to (generate_character), so the agent can distinguish it from generate_character and preview_character without opening a 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?
Explicitly frames this as the non-rendering step whose output is meant to be reviewed and passed to generate_character, which gives clear context for when to pick it. It does not state when-not-to-use it or contrast directly against preview_character/generate_batch, so it falls short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_itemsA
Searches items. All filters are optional and combine:
query: words in the name/id (all must match), e.g. "leather armour".
category: id prefix, e.g. 'hair', 'torso/shirts', 'weapons/sword'.
body_type: only items that exist for this body (male, female, teen...).
animation: only items with art for this animation (idle, walk, slash...) for body_type
(or male if body_type is not given).
type_name: item type (hair, clothes, legs, shoes, weapon, hat...).
complete_only: only items with every animation. Otherwise complete items come first.
licenses: only items whose every art part is available under one of these license
families (CC0, CC-BY, CC-BY-SA, OGA-BY, GPL). For DRM stores (Steam, App Store)
use ["CC0", "OGA-BY"]. Each result has drm_safe.
Each result says whether it is complete and which animations are missing (for body_type or male).
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| query | No | ||
| category | No | ||
| licenses | No | ||
| animation | No | ||
| body_type | No | ||
| type_name | No | ||
| complete_only | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does notable work: it discloses the AND semantics of 'query' words, the prefix matching of 'category', the body_type-derived default for 'animation', the ordering side-effect of 'complete_only', and the intersection logic of 'licenses'. It omits pagination behavior and the meaning of 'limit', plus any auth/rate-limit notes, which keeps it short of a 5.
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?
Front-loaded with the core action and the key fact that all filters are optional, then one compact line per parameter with examples. Dense but every line earns its place; the only slack is the trailing sentence about result completeness, which restates earlier content rather than adding new guidance.
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 an 8-parameter, zero-schema-coverage search tool, the description covers the filter semantics, a practical license-selection rule, and the shape of each result's completeness fields. Since an output schema exists, it does not need to enumerate return values, so nothing essential 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 0% across 8 parameters, so the description must compensate, and it explains 7 of them with formats and examples (category prefixes like 'torso/shirts', animation ids like 'slash', license families). Only 'limit' is left undocumented, and the per-result field explanation (complete, missing animations, drm_safe) adds value the flat schema cannot.
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+resource ('Searches items') and immediately characterizes the whole filter set as optional and combinable, which tells an agent this is a broad query tool. It does not, however, differentiate itself from siblings like get_item or list_categories, which would require either naming them or stating the boundary.
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 through per-filter explanations and the concrete example ('leather armour'), plus practical routing advice for DRM stores ('use ["CC0", "OGA-BY"]'). But there is no explicit when-to-use vs. when-not, and no mention of the sibling get_item for single-item lookups, leaving the agent to infer the search-vs-fetch choice.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
to_site_urlC
Builds a generator site link with these items, to open and tweak the character in a browser.
| Name | Required | Description | Default |
|---|---|---|---|
| items | Yes | ||
| body_type | No | male |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It implies URL construction and browser opening but does not disclose whether the operation is read-only, what permissions are needed, whether state changes occur, or any limits on item count or encoding.
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 efficient sentence that front-loads the core action and purpose. Every phrase contributes to understanding what the tool does, with no obvious 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 two-parameter tool with zero schema description coverage and no annotations, the description leaves too much unspecified. It does not explain item structure, body_type, or behavioral expectations; only the existence of an output schema reduces the need to describe return values.
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%, so the description should compensate but largely does not. It refers to 'these items' without explaining their object shape or contents, and it completely omits body_type even though that parameter has a default and likely affects the generated link.
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: builds a generator site link using provided items. It makes the browser-facing purpose clear. It does not, however, distinguish this from sibling tools such as from_site_url or preview_character.
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 explicit guidance on when to use this tool versus alternatives like from_site_url or preview_character. The phrase 'to open and tweak the character in a browser' implies the context but does not state prerequisites, exclusions, or alternative paths.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_definitionsB
Pulls new items and palettes from the official LPC generator repository. clear_image_cache=True also deletes downloaded PNGs so they are fetched again.
| Name | Required | Description | Default |
|---|---|---|---|
| clear_image_cache | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It does disclose a meaningful side effect (clear_image_cache=True deletes downloaded PNGs so they are refetched) and implies a network pull from an external repository. However, it doesn't say whether existing local definitions are overwritten, whether this is destructive, or if a network connection is required.
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 primary purpose front-loaded and the parameter caveat second. Nothing is wasted, though the phrasing 'Pulls new items and palettes' is slightly loose relative to the tool's update semantics.
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 no annotations and no output schema, the description covers the action and the parameter side effect. It stops short of stating what happens to existing definitions, whether the operation is idempotent, or what the call reports back when it completes.
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%, so the description must compensate, and it does: it explains exactly what clear_image_cache=True does (deletes downloaded PNGs so they are fetched again). It covers the sole parameter's intent and side effect, though it doesn't state the default value (false) explicitly.
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 and source: pulling new items and palettes from the official LPC generator repository, which clarifies the otherwise generic name 'update_definitions'. It does not, however, distinguish this tool from siblings like clear_cache or list_categories, so the agent gets purpose but not 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 statement of when to use this tool versus alternatives, nor any prerequisite or exclusions. With siblings such as clear_cache and generate_character present, the absence of routing guidance is a real gap; the only context is about a parameter, not about tool selection.
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.
4 tool updates
v0.5.0- Changed
generate_batch1 field changed- added
Input schema / properties / licensesAdded value: +{ + "anyOf": [ + { + "items": { + "type": "string" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Licenses" +}
- Changed
generate_character2 fields changed- added
Input schema / properties / licensesAdded value: +{ + "anyOf": [ + { + "items": { + "type": "string" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Licenses" +} - added
Input schema / properties / zipAdded value: +{ + "default": false, + "title": "Zip", + "type": "boolean" +}
- Changed
random_character1 field changed- added
Input schema / properties / licensesAdded value: +{ + "anyOf": [ + { + "items": { + "type": "string" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Licenses" +}
- Changed
search_items1 field changed- added
Input schema / properties / licensesAdded value: +{ + "anyOf": [ + { + "items": { + "type": "string" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Licenses" +}
11 tool updates
v0.1.0- First observed
clear_cache - First observed
from_site_url - First observed
generate_batch - First observed
generate_character - First observed
get_item - First observed
list_categories - First observed
preview_character - First observed
random_character - First observed
search_items - First observed
to_site_url - First observed
update_definitions
TDQS
Scored across 11 tools
Most tools target clearly distinct operations (search, get, list, generate, preview, import/export URL, cache/definitions). Some overlap exists between random_character (returns items for review) and generate_batch (saves many random characters), and between preview_character and generate_character, but the descriptions do clarify the distinction.
Eight of eleven tools follow a verb_noun pattern (generate_character, search_items, etc.), but to_site_url and from_site_url use a directional preposition pattern, and random_character is adjective_noun. All are snake_case and readable, so these are minor deviations.
The 11 tools are well-scoped for a character generator, covering item discovery, randomization, single/batch generation, preview, URL conversion, and maintenance. Each tool earns its place without redundancy.
The core lifecycle is covered: discover items (search/list/get), randomize, preview, generate single and batch, import/export URLs, and manage cache/definitions. Minor gaps include no dedicated tool to list all body types or animations, though agents can infer these from descriptions or use search filters.
Maintenance
Related MCP Connectors
Create AI animations and export transparent sprite sheets, alpha video, frames, and game assets.
AI game assets for agents: consistent sprites, 2D animations, tiles, maps, music and engine exports.
Generate, edit, style-match, turn, and animate game-ready pixel art at exact sizes.
Generate game assets with AI for 2D games, including sprites, tilesets, and animations.
Related MCP Servers
- FlicenseAqualityDmaintenanceGenerates 2D game assets (sprites, icons, tilesets, characters, animations) using AI workflows powered by ComfyUI with support for viewpoint control, style presets, and Unity export.132-
- FlicenseNot gradedqualityCmaintenanceEnables generating game assets from natural language prompts, including sprite sheets, animations, voiceover, sound effects, chiptune music, tilesets, backgrounds, VFX, and cohesive asset packs with shared style and audio DSP presets.-

Sprixen MCP serverofficial
AlicenseNot gradedqualityCmaintenanceEnables AI agents to create style-locked game projects and generate sprites, animations, tiles, maps, music, 3D models, and VFX, then export engine-ready packages for Godot, Phaser, Unity, GameMaker, or RPG Maker MZ.MIT- AlicenseBqualityCmaintenanceEnables users to automate the creation, editing, animation, and export of pixel-art game assets through a multi-agent pipeline that derives style specs and blueprints, generates Lua build scripts, and drives the canvas editor to produce .aseprite files, spritesheets, atlases, GIFs, and previews.123MIT