Skip to main content
Glama
kyuza1
by kyuza1

LPC Character Generator — MCP

English · Português

tests PyPI

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.

Asking the AI for a blacksmith: animated preview and files in the chat

48 characters generated by the MCP

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

Characters walking

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

Blacksmith hammering, 4 directions

Installation

Installing in a terminal: setup, register in Claude Code, connected

You need uv and Git. uv fetches the right Python and the package by itself — nothing to clone, no dependencies to install.

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

  2. Prepare the server (downloads the item definitions, ~10 s, only once):

    uvx lpc-character-mcp --setup
  3. Register 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-mcp

Claude 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-mcp

Or edit ~/.codex/config.toml (on Windows, %USERPROFILE%\.codex\config.toml):

[mcp_servers.lpc]
command = "uvx"
args = ["lpc-character-mcp"]
startup_timeout_sec = 60

Check 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 --setup

Then register the lpc-character-mcp command (no arguments) in your assistant.

Tips

  • Free disk space: lpc-character-mcp --clear-cache deletes cached images (--clear-cache 30 only those unused for 30 days).

  • Update: uvx lpc-character-mcp@latest --version

  • App can't find uvx: use the full path (where uvx on Windows, which uvx elsewhere).

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

generate_character(items, body_type, animations, filename, layout, split, export, prefer_complete, output_dir)

Builds the PNG, the credits, the animation report and (optionally) engine files

preview_character(items, body_type, animation, animated)

In-chat preview: animated GIF with the 4 directions

search_items(query, category, body_type, animation, type_name, complete_only)

Searches items with filters; complete items first

get_item(item_id)

Colors, variants, multi-color parts and the animations available per body

list_categories

Lists item categories

random_character(body_type, seed, fixed_items)

Rolls a random character

generate_batch(count, body_types, seed, prefix, fixed_items, ..., output_dir)

Generates many random NPCs at once

from_site_url(url) / to_site_url(items, body_type)

Reads / builds generator site links (including old links); from_site_url also takes the site's "Export to Clipboard (JSON)"

update_definitions(clear_image_cache)

Pulls new items and palettes from the official repository

clear_cache(older_than_days, dry_run)

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 (see colors in get_item).

  • "color": ["steel", "walnut"] — multi-part items (head and handle, armor and belt...). Parts are listed in color_parts from get_item; null keeps 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_character always returns animation_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: true replaces each incomplete item with the closest item that has every animation, keeping the color (e.g. apron → overalls). Replacements are listed in replaced. The assistant is told to ask you first.

  • Search puts complete items first. search_items lists them first, shows missing_animations for the others and accepts complete_only: true. get_item shows what is missing and suggests complete_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.

export

Files

How to use

"godot"

<name>.tres (SpriteFrames)

Generate with output_dir inside your project (the res:// path is filled in automatically) or copy <name>.png and <name>.tres to res://characters/. Use the .tres as Sprite Frames of an AnimatedSprite2D. Animations: walk_down, idle_left, tool_hammer_right... Tested on Godot 4.6.

"unity"

<name>.png.meta, <name>.controller + <name>_unity_anims/*.anim

Generate with output_dir inside Assets/ (or copy everything there). Sprites come pre-sliced (Multiple, Point filter, no compression) and the .controller has one state per animation (starts at idle_down): put it in the Animator of a SpriteRenderer object and call animator.Play("walk_left"). Tested on Unity 6.

"web"

<name>.json (atlas) + <name>_demo.html

TexturePacker-style (hash) atlas with animations: Phaser 3 this.load.atlas(...), PixiJS Assets.load(...). Tested on Phaser 3.80 and PixiJS 8.5. The demo plays the character with arrows/WASD, Shift and Space — open it from a local server (python -m http.server).

"site"

<name>_site.json

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_complete they stay as they are and animation_check says so.

  • The LPC muscular, child and pregnant bodies lack some animations (e.g. muscular has no shoot or climb); animation_check reports them in body_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 -q

From 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 tools
clear_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.

ParametersJSON Schema
NameRequiredDescriptionDefault
dry_runNo
older_than_daysNo

TDQS

A3.9/5.0
Behavior3/5

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.

Conciseness4/5

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.

Completeness4/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
urlYes

TDQS

A4/5.0
Behavior4/5

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.

Conciseness4/5

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.

Completeness4/5

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.

Parameters4/5

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.

Purpose4/5

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.

Usage Guidelines4/5

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"}]).

ParametersJSON Schema
NameRequiredDescriptionDefault
seedNo
countNo
splitNo
exportNo
layoutNostandard
prefixNonpc
licensesNo
animationsNo
body_typesNo
output_dirNo
fixed_itemsNo

TDQS

B3.1/5.0
Behavior3/5

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.

Conciseness4/5

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.

Completeness2/5

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.

Parameters2/5

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.

Purpose4/5

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.

Usage Guidelines3/5

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

ParametersJSON Schema
NameRequiredDescriptionDefault
zipNo
itemsYes
splitNo
exportNo
layoutNostandard
filenameNocharacter.png
licensesNo
body_typeNomale
animationsNo
output_dirNo
prefer_completeNo

TDQS

A4.5/5.0
Behavior5/5

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.

Conciseness4/5

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.

Completeness5/5

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.

Parameters5/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
item_idYes

TDQS

C2.4/5.0
Behavior2/5

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.

Conciseness3/5

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.

Completeness3/5

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.

Parameters2/5

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.

Purpose3/5

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.

Usage Guidelines2/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A3.7/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters4/5

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.

Purpose4/5

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.

Usage Guidelines3/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
itemsYes
animatedNo
animationNowalk
body_typeNomale

TDQS

A4/5.0
Behavior4/5

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.

Conciseness4/5

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.

Completeness3/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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"]).

ParametersJSON Schema
NameRequiredDescriptionDefault
seedNo
licensesNo
body_typeNomale
fixed_itemsNo

TDQS

A4.1/5.0
Behavior4/5

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.

Conciseness4/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
queryNo
categoryNo
licensesNo
animationNo
body_typeNo
type_nameNo
complete_onlyNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.9/5.0
Behavior4/5

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.

Conciseness4/5

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.

Completeness5/5

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.

Parameters4/5

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.

Purpose4/5

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.

Usage Guidelines3/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
itemsYes
body_typeNomale

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

C2.8/5.0
Behavior2/5

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.

Conciseness5/5

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.

Completeness2/5

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.

Parameters2/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
clear_image_cacheNo

TDQS

B3.3/5.0
Behavior3/5

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.

Conciseness4/5

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.

Completeness3/5

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

For a one-parameter tool with 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.

Parameters4/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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.

  1. 4 tool updatesv0.5.0
    • Changedgenerate_batch1 field changed
      • addedInput schema / properties / licenses
        Added value: +{
        +  "anyOf": [
        +    {
        +      "items": {
        +        "type": "string"
        +      },
        +      "type": "array"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "title": "Licenses"
        +}
    • Changedgenerate_character2 fields changed
      • addedInput schema / properties / licenses
        Added value: +{
        +  "anyOf": [
        +    {
        +      "items": {
        +        "type": "string"
        +      },
        +      "type": "array"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "title": "Licenses"
        +}
      • addedInput schema / properties / zip
        Added value: +{
        +  "default": false,
        +  "title": "Zip",
        +  "type": "boolean"
        +}
    • Changedrandom_character1 field changed
      • addedInput schema / properties / licenses
        Added value: +{
        +  "anyOf": [
        +    {
        +      "items": {
        +        "type": "string"
        +      },
        +      "type": "array"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "title": "Licenses"
        +}
    • Changedsearch_items1 field changed
      • addedInput schema / properties / licenses
        Added value: +{
        +  "anyOf": [
        +    {
        +      "items": {
        +        "type": "string"
        +      },
        +      "type": "array"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "title": "Licenses"
        +}
  2. 11 tool updatesv0.1.0
    • First observedclear_cache
    • First observedfrom_site_url
    • First observedgenerate_batch
    • First observedgenerate_character
    • First observedget_item
    • First observedlist_categories
    • First observedpreview_character
    • First observedrandom_character
    • First observedsearch_items
    • First observedto_site_url
    • First observedupdate_definitions

TDQS

A3.5/5.0

Scored across 11 tools

Disambiguation4/5

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.

Naming Consistency4/5

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.

Tool Count5/5

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.

Completeness4/5

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

ActivityMaintained
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers