minecraft-skin-mcp
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@minecraft-skin-mcpBuild a classic skin with a red hoodie, jeans, and sneakers, then show the preview"
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.
Minecraft Skin Toolkit
Local tools for Codex, Claude Code, and other agents to create standard Minecraft skins, inspect them, and revise them. Original implementation; no PMCSkin3D code or assets.

The agent designs the character. The toolkit maps face-local rectangles into a 64×64 RGBA PNG, checks the result, and returns front/back/side previews. It provides a CLI and the same functions through a local stdio MCP server. No hosted service, accounts, API keys, telemetry, or network calls at runtime.
Install
Requires Python 3.11+ and uv.
git clone https://github.com/Griff2325/minecraft-skin-toolkit.git
cd minecraft-skin-toolkit
uv sync --locked
uv run minecraft-skin build examples/cobalt-explorer.json --name explorer --output-root ./skin-output
uv run minecraft-skin validate skin-output/explorer/skin.png --model classic
uv run minecraft-skin preview skin-output/explorer/skin.png --output ./explorer-preview.pngEach build creates a new folder with skin.png, editable design.json, and preview.png. Existing folders and files are never overwritten. Use a new name for each revision.
Related MCP server: mc-asset
Connect an agent
Replace /absolute/path/minecraft-skin-toolkit with your checkout and /absolute/path/skin-output with a dedicated output directory. Use absolute paths so the server works regardless of the client's working directory.
Codex
codex mcp add minecraft-skins -- uv run --directory /absolute/path/minecraft-skin-toolkit --locked minecraft-skin-mcp --output-root /absolute/path/skin-outputClaude Code
claude mcp add --transport stdio --scope user minecraft-skins -- uv run --directory /absolute/path/minecraft-skin-toolkit --locked minecraft-skin-mcp --output-root /absolute/path/skin-outputRestart the client/session to discover the server. The commands above configure local processes; they do not expose a network server. The MCP tools can only read/write within the configured output directory. Do not point it at a directory containing secrets.
Tool | Result |
| Complete input JSON schema and all classic/slim face dimensions |
| New PNG, design, validation report, and inline preview image |
| Size, base opacity, per-part coverage, and actionable errors |
| Inline front/back/right/left inspection sheet |
The MCP server uses the official Python MCP SDK. Full input schemas are discoverable by the client. Direct CLI/Python calls also validate their input.
Optional workflow skill: copy skills/minecraft-skins/ into ~/.codex/skills/ or ~/.claude/skills/. It contains the same portable SKILL.md; neither client requires a skill to call the MCP tools.
Example request:
Make an original classic skin: strawberry-blonde hair, moustache, white henley, blue jeans, and brown cowboy boots. Build it, inspect the returned preview, then refine it under a new revision name. Save the PNG and editable design.
Design format
See the complete example, or run uv run minecraft-skin schema --model slim.
{
"model": "classic",
"palette": {"skin": "#E9B38E", "shirt": "#EEECE4", "jeans": "#3C6685"},
"base": {"head": "skin", "body": "shirt", "right_arm": "shirt", "left_arm": "shirt", "right_leg": "jeans", "left_leg": "jeans"},
"paint": [{"part": "body", "layer": "base", "face": "front", "rect": [3, 2, 1, 1], "color": "jeans"}]
}rect is [x, y, width, height] in face-local texels. Coordinates start at the face's upper left as viewed from outside. Left/right refer to the character. For top faces, the upper edge is the back; for bottom faces, the upper edge is the front. Paint operations replace pixels in order, including alpha. Use palette names for colors; palette values accept #RRGGBB or #RRGGBBAA.
All six base fills are required and must be opaque. Overlays start transparent. Classic arms are 4 texels wide; slim arms are 3. The selected arm model is separate game metadata: a PNG cannot reliably prove which model its creator intended. Limits: 256 palette entries and 4096 paint rectangles. Legacy 64×32 and HD 128×128 skins are outside this release.
The preview composites outer layers at native texel scale; it is an orthographic inspection sheet, not a 3D game render. Visual likeness and clothing quality require agent/user judgment. Validation verifies technical texture properties, not Minecraft server acceptance.
Use in Minecraft and Blockintosh
Import skin.png as a custom classic skin in Minecraft's Dressing Room and choose the matching classic/slim model. PMCSkin3D is an optional manual refinement editor: open the exported PNG and inspect the model there.
Blockintosh's official add-on documentation lists .mcskin and .mcpack imports. This first release exports PNGs only; it does not claim launcher package integration, edit the launcher, or access Microsoft/Xbox accounts. Test the skin in your own game before relying on it for Realms. Console and platform-specific custom skin restrictions still apply.
Development and verification
uv run python -m unittest discover -s tests -v
uv buildTests cover independent classic/slim UV coordinates, cube orientation, atlas overlap, malformed inputs, PNG roundtrips, transparency, CLI build/validate/preview, MCP initialize/discovery/all four tool calls, file confinement and no-overwrite behavior.
Runtime dependencies: Pillow and mcp (which includes Pydantic). uv.lock records the tested environment. No site code or bundled Minecraft textures are redistributed. Generic example assets are original and included under the MIT license.
Project status
Initial release. Technical tests pass. External editor and in-game acceptance need manual verification and are recorded separately from automated checks. Contributions should stay focused on agent authoring, useful validation, previews, and tested import/export.
MCP client references: Codex, Claude Code. PMCSkin3D's help and terms are independent of this project.
MIT licensed. Independent community project; not affiliated with Mojang, Microsoft, Planet Minecraft, or Blockintosh.
Available Tools
4 toolsskin_buildA
Build a 64x64 PNG, editable design.json, and front/back/side preview in a NEW named folder. All six base parts require opaque palette colors. Paint is ordered rectangles within a face. Return paths, validation and the actual preview image. Use a new name for each revision; existing files are never overwritten.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | ||
| design | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false and destructiveHint=false; the description earns extra credit by disclosing that existing files are never overwritten, a new folder is created, and that it returns paths, validation, and the actual preview image. This is meaningful behavioral context beyond the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the outputs and the key constraint (new folder, no overwrite). A few dense sentences, mostly earning their place. Slightly terse on some nested semantics but no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No output schema exists, but the description explains return values (paths, validation, preview image) and the no-overwrite behavior. Combined with the nested Paint/Design schema, an agent has enough to call it correctly, though model/layer/palette details rely on the schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is reported at 0%, but the $defs carry inline descriptions (rect as [x,y,w,h] face-local texels, color as existing palette key). The description adds meaning ('All six base parts require opaque palette colors', 'Paint is ordered rectangles within a face'), which compensates partially, but name, model, layer, and palette format remain undocumented in the description.
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 (build) and enumerates concrete outputs: 64x64 PNG, editable design.json, and front/back/side previews in a new named folder. This clearly distinguishes it from siblings like skin_validate, skin_preview, and skin_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?
Gives a useful usage constraint ('Use a new name for each revision; existing files are never overwritten'), which implies versioning workflow. However, it never explicitly contrasts with siblings (e.g., use skin_validate before building, or skin_preview to inspect), leaving the when-to-choose-this decision implied.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
skin_previewARead-only
Return a front/back/right/left orthographic image of a PNG inside the output root. Outer layers composite at native texel scale; this is an inspection sheet, not an in-game 3D rendering.
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes | ||
| model | No | classic |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and openWorldHint=false, so the safety profile is covered. The description adds useful behavior detail: the result is a four-view orthographic inspection sheet, outer layers composite at native texel scale, and it is not a 3D rendering. It does not describe error behavior for invalid paths.
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 compact sentences with no wasted language. The output shape is front-loaded, and the scale/rendering clarification follows immediately.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers the output artifact well enough for a read-only inspection tool with no output schema. However, it leaves gaps about path format (relative vs. absolute, extension expectations) and does not explain the model parameter.
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 for both parameters. It partially documents 'path' by saying the PNG must be inside the output root, but it never mentions the 'model' parameter or the classic/slim distinction, leaving a key enum undocumented in prose.
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: returning front/back/right/left orthographic images of a PNG inside the output root. It also clarifies the artifact type ('inspection sheet, not an in-game 3D rendering'), which cleanly separates it from siblings like skin_build and skin_validate.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied by 'inspection sheet' and 'inside the output root', but there is no explicit guidance on when to choose this over skin_validate or other siblings. The exclusion of 'in-game 3D rendering' clarifies scope, not when to use an alternative tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
skin_schemaBRead-only
Return complete design JSON schema and canonical UV face sizes. Faces are viewed externally; left/right name the character's side. Top face local top is back edge; bottom local top is front edge.
| Name | Required | Description | Default |
|---|---|---|---|
| model | No | classic |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and openWorldHint=false, so the safety profile is covered. The description adds useful output semantics about faces being viewed externally and the local top edge conventions for top/bottom faces, which is meaningful context beyond annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The purpose is front-loaded in the first sentence, followed by compact orientation clarifications. Each sentence adds either purpose or coordinate semantics, with no redundant 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?
With no output schema, the description must convey return behavior; it names the returned artifacts and orientation conventions. However, it omits how the model parameter changes output and does not describe the design JSON structure, leaving a notable gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The only parameter, model, has 0% schema description coverage; its enum values classic/slim are somewhat self-explanatory, but the description never mentions the parameter or explains how model affects the returned schema or UV sizes. It does not compensate for the documentation 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 ('Return') and resources ('design JSON schema and canonical UV face sizes'), plus orientation semantics. It does not explicitly differentiate from siblings skin_build, skin_validate, or skin_preview, so it falls 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?
Provides no explicit when-to-use or when-not-to-use guidance, and never mentions the sibling tools. The purpose implies retrieval of schema/UV sizes, but the agent must infer when this tool is preferable to skin_build, skin_validate, or skin_preview.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
skin_validateARead-only
Validate a PNG inside the output root. Model must be supplied correctly; PNG alone cannot reliably distinguish classic/slim geometry. Checks technical compatibility, not artistic quality or in-game acceptance.
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes | ||
| model | No | classic |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and openWorldHint=false, so the safety profile is covered. The description adds real behavioral context beyond that: the validation scope is limited to technical compatibility (not art quality or in-game acceptance) and the path is constrained to the output root. It omits what a failure result contains, which keeps it below 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?
Three short sentences, front-loaded with the action, then the key invocation constraint, then the boundary of the check. No filler and nothing repeated from the schema or annotations.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a two-parameter read-only validator with no output schema, the description covers purpose, scope limits, and the model requirement well. The remaining omission is the shape of the result (pass/fail fields, error reporting), which matters somewhat because no output schema exists to document it.
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 carry the load, and it does: it explains why `model` (classic/slim) must be provided explicitly and scopes `path` to the output root. It does not state the consequence of an incorrect model value or what an invalid path does, 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 object ("Validate a PNG inside the output root") and scopes the check to technical compatibility rather than artistic quality or in-game acceptance. Siblings (skin_schema, skin_build, skin_preview) are not named or differentiated, but the purpose is unambiguous on its own.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives clear usage context: the model argument must be supplied correctly because the PNG alone cannot disambiguate classic/slim geometry, and explicitly bounds what the tool does not judge. It stops short of saying when to call it relative to skin_build or skin_preview, so it is clear context without explicit alternatives.
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.1.0- First observed
skin_build - First observed
skin_preview - First observed
skin_schema - First observed
skin_validate
TDQS
Scored across 4 tools
Each tool has a clearly distinct role in the skin workflow: schema lookup, asset creation, validation, and preview rendering. There is little risk of confusing skin_build with skin_preview because one creates files and the other renders an inspection image.
All tool names use the same skin_ prefix followed by a short action/resource label. The pattern is predictable and readable across the entire set.
Four tools is a well-scoped surface for a focused Minecraft skin creation server. Each tool maps to a necessary stage of the workflow without obvious redundancy.
The set covers schema lookup, building, validation, and previewing, which is strong lifecycle coverage for skin creation. Minor gaps exist around listing or reading previously generated designs, but agents can still complete the core workflow.
Maintenance
Related MCP Connectors
Generate authentic pixel art - sprites, animations, and tilesets - from any MCP client
Generate game-ready 3D models, textures, and audio from natural language, over MCP.
Minecraft builds and skins made by your AI agent, live in your browser tab. Export .schem.
A MCP server built for developers enabling Git based project management with project and personal…
Related MCP Servers
- AlicenseNot gradedqualityAmaintenanceProvides 26 MCP tools for designing, previewing, and safely applying visual skins to DeepSeek Harness, enabling AI agents to perform complete skin workflows from image upload to theme application.1MIT
- AlicenseNot gradedqualityAmaintenanceEnables AI agents to create, edit, validate, and package pixel-art textures for Minecraft resource packs through deterministic MCP tools.68 npm4MIT
- AlicenseNot gradedqualityBmaintenanceEnables autonomous creation, editing, auditing, and visual verification of Minecraft skins with dual-layer 3D depth, via 45 MCP tools, real-time WebGL preview, and procedural healing.MIT
- AlicenseBqualityCmaintenanceEnables agents to paint side-view pixel characters, apply hard-band shading, and build 8-frame joint animations through MCP tools.45MIT