Minecraft textures as code for AI agents: a JSON spec compiled deterministically to PNG, with a review, an MCP server, a CLI and a Claude Code plugin.
- ✓Open-source license (MIT)
- ✓Actively maintained (<30d)
- ✓Clear description
- ✓Topics declared
- ✓Documented (README)
claude mcp add texel-mcp -- npx -y texel-mcp{
"mcpServers": {
"texel-mcp": {
"command": "npx",
"args": ["-y", "texel-mcp"]
}
}
}MCP Servers overview
# Texel
Texel is a format and a toolchain for making Minecraft textures as code. A texture is a JSON
spec: a palette and an ordered list of drawing operations addressed to named parts and faces of
the model (`head.front`, `rightArm.sides@overlay`). A compiler turns the spec into the PNG the game
reads, the same bytes every time, and a review returns what is wrong with it as JSON paths, fix
hints, an art score and pixel-art advice. The tools are built for AI agents: an MCP server, a
command-line tool and an Agent Skill, also packaged as a Claude Code plugin.
It covers player skins (classic and slim) and, through layouts, 25 other textures: mobs such as
zombies, skeletons, creepers, pigs, wolves and iron golems, armor layers, capes with elytra, and
16 × 16 items and blocks, all in the Java Edition 1.21 texture layouts.
Texel is open source (MIT) and in development, at version 0.8.0. The format is versioned (`version: 1`)
but may still change between minor releases. Treat everything as a beta. The site
[texel.dev.br](https://www.texel.dev.br) is built on this toolchain.

The image above is the review sheet the tools return for this spec. It is the `wizard` example
without its `$schema`, `description`, `author` and `tags` fields and the layers' `note` comments,
which do not change the pixels (both compile to the same PNG):
```json
{
"version": 1,
"name": "Star Wizard",
"model": "classic",
"palette": {
"skin": "#e0ac7e", "robe": "#2f4fb0", "gold": "#e8c34a", "beard": "#dcdcdc",
"eyes": "#3a6fd9", "boots": "#4a3324", "star": "#fff1a8"
},
"layers": [
{ "op": "material", "target": "all", "color": "skin", "kind": "skin" },
{ "op": "material", "target": "body+arms", "color": "robe", "kind": "fabric" },
{ "op": "material", "target": "legs", "color": "robe~-1", "kind": "fabric" },
{ "op": "material", "target": "arms", "region": "hands", "color": "skin", "kind": "skin" },
{ "op": "rect", "target": "arms.sides", "region": "cuffs", "color": "gold" },
{ "op": "material", "target": "legs", "region": "boots", "color": "boots", "kind": "leather" },
{ "op": "face", "id": "face", "skin": "skin", "eyes": "eyes", "brows": "beard", "beard": "full", "beardColor": "beard", "mouth": "smile" },
{ "op": "hair", "id": "hair", "color": "beard", "style": "long", "fringe": "parted" },
{ "op": "lighting" },
{ "op": "rect", "target": "body.sides", "region": "belt", "color": "gold" },
{ "op": "points", "target": "body.front", "points": [[3, 8], [4, 8]], "color": "gold~-2" },
{ "op": "points", "target": "body.front+back", "points": [[1, 2], [6, 4], [2, 6], [5, 10]], "color": "star" },
{ "op": "points", "target": "legs.front", "points": [[1, 1], [2, 4]], "color": "star" },
{ "op": "material", "id": "hood", "target": "body.back@overlay", "y": 0, "h": 3, "color": "robe~-1", "kind": "fabric" },
{ "op": "rect", "target": "body.front@overlay", "region": "collar", "color": "gold~-1" },
{ "op": "rect", "target": "arms.sides@overlay", "region": "cuffs", "color": "gold~1" }
]
}
```
The 64 × 64 texture it compiles to is [docs/images/wizard.png](docs/images/wizard.png).
## Installing
The MCP server and the CLI need Node 20 or later.
**Claude Code plugin.** This repository is a plugin marketplace. The plugin starts the MCP server
from a single bundled file (no `npm install`) and adds the `minecraft-skin-design` skill. Files are
written to the project directory.
```
/plugin marketplace add Brunovncs/texel-mcp
/plugin install texel@texel
```
**Or use this prompt.** Paste it into the agent you want to use Texel with (Claude Code, Codex,
Cursor, Claude Desktop or any other client with MCP support) and it installs the MCP server for you:
```text
Install the Texel MCP server for me (https://github.com/Brunovncs/texel-mcp).
1. Check that Node.js 20 or later is installed (`node --version`). If it is not, stop and tell me.
2. Create the folder ~/.texel (%USERPROFILE%\.texel on Windows) and download the single-file
server into it:
https://raw.githubusercontent.com/Brunovncs/texel-mcp/main/plugin/server/texel-mcp.mjs
3. Check that it runs: `node <path to texel-mcp.mjs> --version` must print a version number.
4. Ask me which folder the skins should be saved in. If I don't care, skip the --workspace part
below; files then go to the directory the client starts the server in.
5. Register it as an MCP server named "texel" in the client you are running in, using absolute
paths:
- Claude Code: claude mcp add --scope user texel -- node <path to texel-mcp.mjs> --workspace <folder>
- Any other client: add this to its MCP configuration, keeping the servers already there:
{"mcpServers": {"texel": {"command": "node",
"args": ["<path to texel-mcp.mjs>", "--workspace", "<folder>"]}}}
6. Tell me what you changed and whether I need to restart the client. Once the tools are
available, call texel_get_example and then texel_render on that example to confirm they work.
```
**Any MCP client.** The package is [`texel-mcp` on npm](https://www.npmjs.com/package/texel-mcp).
This configuration works in Claude Desktop, Cursor, VS Code and other clients that read the usual
`mcpServers` format:
```json
{
"mcpServers": {
"texel": {
"command": "npx",
"args": ["-y", "texel-mcp", "--workspace", "/absolute/path/skins"]
}
}
}
```
In Claude Code the same is `claude mcp add texel -- npx -y texel-mcp`. To run a local build
instead (see [Building and testing](#building-and-testing)), point the client at the file:
`"command": "node", "args": ["/absolute/path/texel-mcp/dist/texel-mcp.mjs", "--workspace",
"/absolute/path/skins"]`. `plugin/server/texel-mcp.mjs` is the same server with its dependencies
bundled, and runs from anywhere with plain `node`.
**CLI.** `npx -y -p texel-mcp texel-cli build skin.json -o skin.png --sheet sheet.png`, or
`node dist/texel.mjs ...` from a build. It has no dependencies. `--help` lists the
commands: `build`, `review`, `patch`, `sheet`, `palette`, `family`, `import`, `diff`, `share`,
`pull`, `live`, `format`, `layouts` and `init`.
All writes go to one workspace directory: `--workspace`, `$TEXEL_WORKSPACE`, or the directory the
server was started in. Paths that resolve outside it are refused. [docs/install.md](docs/install.md)
has the details, including installing the skill by hand.
## The spec
A spec has a `palette` (names for colors, with derived tones such as `robe~-1`, a step darker and
cooler), an optional `legend` (one character per color, for pixel rows) and `layers`, which run in
order. Each layer is one of 17 operations. Twelve are plain drawing (`fill`, `rect`, `clear`,
`pixels`, `points`, `line`, `gradient`, `pattern`, `noise`, `shade`, `copy`, `mirror`), one fixes
symmetry (`symmetrize`) and four are higher level: `material` (fabric, leather, metal, fur, knit
and other surfaces), `face`, `hair` and `lighting`.
A layer's `target` is a selector: parts, faces and a layer, as in `head.front`, `legs.sides`,
`body.front+back@overlay` or `arms.top@both`. Coordinates are local to each face: `(0, 0)` is the
top-left pixel of the face as seen from outside the model, and drawing is clipped to the face. A
selector that matches several faces runs the operation once per face, so
`{ "op": "rect", "target": "legs.sides", "y": -2, "color": "boots" }` paints the bottom two rows all
the way around both legs. Named regions (`belt`, `cuffs`, `boots`, `hands`, `collar`) stand in for
row numbers.
Changes are made with patches by layer id (`{ "patch": [{ "do": "update", "id": "hair", "set": {
"style": "ponytail" } }] }`), so a fix round touches only the layers it names. A family document
expands one base spec into variants or a matrix of axes (teams, ranks, factions) by swapping
palettes, turning layers on and off and appending layers. An existing PNG can be imported into an editable spec, one
layer per painted face.
The full reference is [docs/spec.md](docs/spec.md), with a JSON Schema in
[schema/skinspec.v1.json](schema/skinspec.v1.json). [docs/protocol.md](docs/protocol.md) describes
the loop an agent is expected to follow (brief, draft, render, review, patch, ship), and
[docs/art-guide.md](docs/art-guide.md) what makes a skin read well at 64 × 64. The same pages are
available to the agent through `texel_read_docs` and the `texel://docs/{page}` resources, and the 13
examples in [examples/](examples) through `texel_get_example`.
## What the review returns
Every render comes with a review. With a typo in a palette name and in a face name, the relevant
part of the answer is:
```json
{
"ok": false,
"score": 38,
"issues": [
{ "level": "error", "code": "bad-color", "path": "$.layers[1].color",
"message": "unknown color or palette key \"clth\"", "hint": "did you mean \"cloth\"?" },
{ "level": "error", "code": "bad-selector", "path": "$.layers[2].target",
"message": "unknown face \"frnt\"", "hint": "did you mean \"front\"?" },
{ "level": "warning", "code": "blank-face", "path": "head.front",
"message": "the face (head.front) uses fewer than 3 colors and will read as blank",
"hint": "draw eyes, brows and a mouth with a \"pixels\" op on head.front" }
]
}
```
Errors and warnings point at the JSON path or the face that caused them, and most carry a hint
that names the fix. The `score` (0 to 100) only measures technical hygiene: errors, holes in the
base layer, blank faces, flat surfaces, too few colors. The `art` part of the review has its own
score from seven measured checks: R2 to R7 (face readability, lightness contrast between parts,
light from above, surface texture, a designed back, use of the overlay for depth) and a color
count, each with a note on what was measured and a hint. `art.advice` names classic pixel-art
mistakes found in the texture (pillow shading, shadows thatWhat people ask about texel-mcp
What is Brunovncs/texel-mcp?
+
Brunovncs/texel-mcp is mcp servers for the Claude AI ecosystem. Minecraft textures as code for AI agents: a JSON spec compiled deterministically to PNG, with a review, an MCP server, a CLI and a Claude Code plugin. It has 0 GitHub stars and its last recorded update is dated 2026-10-05.
How do I install texel-mcp?
+
You can install texel-mcp by cloning the repository (https://github.com/Brunovncs/texel-mcp) or following the README instructions on GitHub. ClaudeWave also provides quick install blocks on this page.
Is Brunovncs/texel-mcp safe to use?
+
Our security agent has analyzed Brunovncs/texel-mcp and assigned a Trust Score of 95/100 (tier: Verified). See the full breakdown of passed checks and flags on this page.
Who maintains Brunovncs/texel-mcp?
+
Brunovncs/texel-mcp is maintained by Brunovncs. The last recorded GitHub activity is dated 2026-10-05, with 0 open issues.
Are there alternatives to texel-mcp?
+
Yes. On ClaudeWave you can browse similar mcp servers at /categories/mcp, sorted by popularity or recent activity.
Deploy texel-mcp to your cloud
Ship this repo to production in minutes. Each platform spins up its own environment with editable env vars.
Maintain this repo? Add a badge to your README
Drop the badge into your GitHub README to show it's tracked on ClaudeWave. Each badge links back to this page and reflects the live Trust Score.
[](https://claudewave.com/repo/brunovncs-texel-mcp)<a href="https://claudewave.com/repo/brunovncs-texel-mcp"><img src="https://claudewave.com/api/badge/brunovncs-texel-mcp" alt="Featured on ClaudeWave: Brunovncs/texel-mcp" width="320" height="64" /></a>More MCP Servers
Fair-code workflow automation platform with native AI capabilities. Combine visual building with custom code, self-host or cloud, 400+ integrations.
User-friendly AI Interface (Supports Ollama, OpenAI API, ...)
An open-source AI agent that brings the power of Gemini directly into your terminal.
Real-time global intelligence dashboard. AI-powered news aggregation, geopolitical monitoring, and infrastructure tracking in a unified situational awareness interface
🕷️ An adaptive Web Scraping framework that handles everything from a single request to a full-scale crawl! Don't be shy, join here: https://discord.gg/EMgGbDceNQ and follow here for daily tips and tricks: https://x.com/Scrapling_dev
The fastest path to AI-powered full stack observability, even for lean teams.