Skip to main content
Glama
Thrixel MCP Server

Thrixel MCP Server

Official
by thrixel

Thrixel MCP Server

Model Context Protocol (MCP) server for the Thrixel 3D generation platform. Enables AI agents to create, edit, detail, and download game-ready 3D models through natural conversation — and to see each result before building on it.

Features

12 tools covering the Thrixel generation pipeline:

Category

Tools

Create

thrixel_create_model, thrixel_sculpt_model

Refine

thrixel_edit_model, thrixel_autofix_model

Detail & Texture

thrixel_detail_model, thrixel_retexture_model

Optimize

thrixel_reduce_triangles

Inspect

thrixel_inspect_model, thrixel_list_assets

Jobs & Download

thrixel_job_status, thrixel_download

Account

thrixel_account_status

Key Capabilities

  • Text to 3D: create_model returns an editable, multi-part mesh — parts stay separate and named, so you can retexture or transform individual pieces later. The default for props, vehicles, buildings, weapons, furniture.

  • Image to 3D: sculpt_model turns a photo or a description into a dense single organic mesh — creatures, characters, plants, food.

  • Natural-language editing: edit_model changes one thing and leaves the rest alone, optionally scoped to named parts. Iterating beats regenerating.

  • Detail & retexture: detail_model adds high-resolution geometry and PBR texture; retexture_model swaps materials without touching geometry — the cheap way to restyle a whole asset set.

  • Free triangle reduction: reduce_triangles hits a game budget for zero cubes and routes to the right backend operation automatically. Never re-run a detail pass just to get a lighter mesh.

  • Budget-aware: account_status reports the cube balance, the enforced concurrency cap, and what is running, so a batch can be sized before it starts instead of failing partway through.

  • Visual feedback loop: every finished job returns a rendered thumbnail as image content, so the agent can judge the result and retry rather than carrying a broken asset forward.

  • Waits for you: job tools block until the model is finished and write the GLB straight into your project. One tool call equals one finished asset — no agent-authored polling loop to silently give up halfway.

  • Style consistency: reuse one reference_image_id across many assets, or pass style_reference_submission_id, to keep a set looking like a set. Reusing a reference image is not re-charged.

Related MCP server: Blender MCP Server

Prerequisites

  • uv — one binary, no Python setup needed.

    macOS / Linux

    curl -LsSf https://astral.sh/uv/install.sh | sh

    Windows (PowerShell)

    irm https://astral.sh/uv/install.ps1 | iex
  • A Thrixel API key — see below.

uvx fetches the server and a suitable Python into a throwaway environment on first run. You do not need to clone anything, create a virtualenv, or install Python yourself.

Get an API Key

  1. Open thrixel.com/beta/#settings/api-keys (sign in first if prompted).

  2. Click Create new secret key.

  3. Copy the key. It starts with sk-thrixel- and is shown only once — once the dialog closes you cannot read it again, only revoke it and make another.

Keep the key in the env block of your MCP client config (below). It never enters the agent's conversation, so the agent cannot leak or misuse it.

Installation

This form takes no JSON, so it works identically in every shell — use it on Windows and macOS / Linux alike:

claude mcp add thrixel --env THRIXEL_API_KEY=sk-thrixel-YOUR_API_KEY -- uvx thrixel-mcp

Only the outer quoting changes; the JSON itself is identical.

macOS / Linux, Git Bash, WSL

claude mcp add-json thrixel '{"command":"uvx","args":["thrixel-mcp"],"env":{"THRIXEL_API_KEY":"sk-thrixel-YOUR_API_KEY"}}'

Windows PowerShell — PowerShell rewrites inner double quotes when passing arguments to a native command, so they must be escaped. Without this you get Invalid configuration: : Invalid input.

claude mcp add-json thrixel '{\"command\":\"uvx\",\"args\":[\"thrixel-mcp\"],\"env\":{\"THRIXEL_API_KEY\":\"sk-thrixel-YOUR_API_KEY\"}}'

Windows CMD — wrap in double quotes and double every inner one.

claude mcp add-json thrixel "{""command"":""uvx"",""args"":[""thrixel-mcp""],""env"":{""THRIXEL_API_KEY"":""sk-thrixel-YOUR_API_KEY""}}"

Verify with claude mcp list, then open a new session.

Option 2 · Install by Asking Your AI Agent

Already chatting with Cursor / Claude Code / Codex? Paste this prompt:

Install the Thrixel MCP server for me. Docs: https://github.com/thrixel/thrixel_mcp
Run it with: uvx thrixel-mcp
Use this env var: THRIXEL_API_KEY=sk-thrixel-YOUR_API_KEY

Option 3 · Manual Install

Paste into .cursor/mcp.json (project) or ~/.cursor/mcp.json (global):

macOS / Linux

{
  "mcpServers": {
    "thrixel": {
      "command": "uvx",
      "args": ["thrixel-mcp"],
      "env": { "THRIXEL_API_KEY": "sk-thrixel-YOUR_API_KEY" }
    }
  }
}

Windows — GUI apps often do not inherit your shell PATH, so give the full path to uvx.exe (find it with where.exe uvx):

{
  "mcpServers": {
    "thrixel": {
      "command": "C:\\Users\\YOU\\.local\\bin\\uvx.exe",
      "args": ["thrixel-mcp"],
      "env": { "THRIXEL_API_KEY": "sk-thrixel-YOUR_API_KEY" }
    }
  }
}

Add to claude_desktop_config.json:

  • macOS: ~/Library/Application Support/Claude/claude_desktop_config.json

  • Windows: %APPDATA%\Claude\claude_desktop_config.json

{
  "mcpServers": {
    "thrixel": {
      "command": "uvx",
      "args": ["thrixel-mcp"],
      "env": { "THRIXEL_API_KEY": "sk-thrixel-YOUR_API_KEY" }
    }
  }
}

Windows: replace "uvx" with the absolute path to uvx.exe — the desktop app does not inherit your shell PATH. See the Cursor block above.

Same shape as above — command: "uvx", args: ["thrixel-mcp"], and THRIXEL_API_KEY in the env block.

pip install thrixel-mcp

Then point the client at your interpreter:

{
  "mcpServers": {
    "thrixel": {
      "command": "python",
      "args": ["-m", "thrixel_mcp.server"],
      "env": { "THRIXEL_API_KEY": "sk-thrixel-YOUR_API_KEY" }
    }
  }
}

Use an absolute path to python if the client cannot find it on PATH.

uvx can run straight from the repository, no PyPI release needed:

# latest main, ahead of the newest release
uvx --from git+https://github.com/thrixel/thrixel_mcp thrixel-mcp

# a local checkout
uvx --from /path/to/thrixel_mcp thrixel-mcp

Same shape in a client config — replace args with ["--from", "git+https://github.com/thrixel/thrixel_mcp", "thrixel-mcp"].

Activate After Install

Most clients auto-load the new server, but Cursor and VS Code require a manual toggle:

Client

What to do

Verify

Claude Code

Nothing — auto-loads on next message

/mcp shows thrixel ✓ connected

Cursor

Restart → Settings → MCP & Integrations → toggle thrixel on → wait for green dot ● → open a new chat

List the thrixel tools available

Claude Desktop

Quit & relaunch the app

List the thrixel tools available

VS Code

Run command MCP: List Servers → click thrixel → Start

List the thrixel tools available

Codex

Nothing — auto-loads on next session

List the thrixel tools available

Usage

Once connected, just ask:

Make me a low-poly wooden market stall for a game, under 5000 triangles.

The agent will chain thrixel_create_model → thrixel_detail_model → thrixel_reduce_triangles, save the GLB into ./thrixel_assets/, and show you the render at each step.

Troubleshooting

  • Invalid configuration: : Invalid input (Windows) — claude mcp add-json received mangled JSON because PowerShell rewrote the inner double quotes. Either escape them (\") or skip JSON entirely and use the flag form: claude mcp add thrixel --env THRIXEL_API_KEY=... -- uvx thrixel-mcp. See Option 1.

  • spawn uvx ENOENT — the client cannot find uvx on PATH. Use the absolute path: which uvx on macOS / Linux, where.exe uvx on Windows (usually C:\Users\YOU\.local\bin\uvx.exe). GUI clients are the usual culprits — they don't inherit your shell PATH.

  • THRIXEL_API_KEY is not set — the key didn't reach the server. Make sure it sits inside an "env": {...} block in your MCP config, not in args.

  • Tool calls return "Thrixel rejected the API key" — the key is invalid or revoked. Generate a fresh one at thrixel.com/beta/#settings/api-keys → Create new secret key, then update the env block.

  • First call is slow — uvx is resolving and caching the package. Subsequent starts are fast.

  • "You have N jobs already running" — you hit the per-plan concurrency cap (free 2, pro 5, studio 10). Run large batches in waves; thrixel_account_status shows what's in flight.

  • "Out of cubes" — see Costs. thrixel_account_status shows the balance; thrixel_reduce_triangles and rebakes are free.

  • Jobs time out — GPU work can queue behind other jobs. Raise THRIXEL_TIMEOUT_S, or submit with wait=false and poll via thrixel_job_status.

  • Client doesn't list thrixel — make sure the config file is valid JSON (no trailing commas), then fully restart the client.

  • Stuck on an old version — uvx caches builds. Force a refresh with uvx --refresh thrixel-mcp.

Costs

Cubes are Thrixel's usage credits. Three pricing shapes:

Operation

Cost

detail_model, sculpt_model, retexture_model

Flat 40 cubes each

reduce_triangles, texture rebake

Free

create_model, edit_model, autofix_model

Metered — charged after the run on actual model usage

Metered is not a synonym for cheap. It scales with how complex the request is: observed runs land anywhere from single digits to over 100 cubes, so a complex create_model can cost more than a flat GPU operation. Call thrixel_account_status to see your balance before a big batch.

Every export format (GLB, FBX, OBJ, STL, USDZ) is free on every plan.

Configuration

Environment Variable

Description

Default

THRIXEL_API_KEY

Required. Your Thrixel API key (starts with sk-thrixel-). Create one here

—

THRIXEL_API_BASE

API base URL

https://api.thrixel.com

THRIXEL_OUTPUT_DIR

Where generated models are written. Writes outside it are refused

./thrixel_assets

THRIXEL_TIMEOUT_S

Ceiling in seconds for a single submit-and-wait cycle

600

THRIXEL_LOG_LEVEL

Server log level, written to stderr

INFO

Development

git clone https://github.com/thrixel/thrixel_mcp.git
cd thrixel_mcp

# uv
uv sync

# or conda
conda env create -f environment.yml
conda activate thrixel-mcp

Run the server the way a client does, against a local backend:

THRIXEL_API_BASE=http://localhost:8000 THRIXEL_API_KEY=sk-thrixel-... \
  uvx --from . thrixel-mcp

To see the raw protocol, point the MCP Inspector at it - -e flags go after the target command:

npx -y @modelcontextprotocol/inspector --cli uvx thrixel-mcp \
  --method tools/list -e THRIXEL_API_KEY=sk-thrixel-...

Drop --cli for a web UI that shows each request/response pair. Claude Code's claude --debug-file /tmp/mcp.log -p "..." logs the connection, negotiated capabilities and dispatched tools, though not the JSON-RPC payloads.

This server holds no state and no business logic - it is a client of the public Thrixel API. Anything it can do, a direct API caller can do too. It speaks stdio, which is what every MCP client above launches it as.

License

MIT

Available Tools

12 tools
thrixel_account_statusCheck Thrixel accountA

Check the Thrixel API key, the cube balance, and how many jobs are running. Call this before submitting a large batch so you can size it to the budget and the concurrency cap, and after a 'jobs already running' or 'out of cubes' error.

Costs: detail / sculpt / texture are a flat 40 cubes each; reduce_triangles and rebake are free; create / edit / autofix are metered on actual model usage (tens of cubes, sometimes more). Concurrency is capped per plan; an admin account is unlimited.

Inputs: no named parameters. Returns: result

thrixel_autofix_modelAuto-fix a 3D modelA

Run an automatic refinement pass on a model: the system critiques its own output and repairs what it finds, with no instruction from you.

Use it when a generated model is roughly right but sloppy, and you cannot articulate what is wrong. If you CAN say what is wrong, thrixel_edit_model is more direct and usually better.

This is one of the slower operations - expect a few minutes.

Inputs: submission_id (required), dest, wait, max_iters, +1 more.

thrixel_create_modelCreate a 3D modelA

Create a 3D model from a text description, optionally guided by reference images. This is the default way to make a game prop, vehicle, building, weapon or piece of furniture.

Output is a rough but EDITABLE multi-part mesh: parts are separate, named nodes, so you can later retexture or transform individual pieces. Prefer this over thrixel_sculpt_model whenever the subject is man-made or made of distinct components.

Waits for the job to finish, saves the GLB, and returns the file path plus a rendered thumbnail. Look at the thumbnail before building on the result.

Describe the object itself, not the request: 'a weathered wooden market stall with a striped awning' works, 'make me a stall' does not.

Inputs: prompt (required), dest, wait, images, +2 more.

thrixel_detail_modelDetail and texture a 3D modelA

Turn a rough model into a high-resolution mesh with a PBR texture. Costs 40 cubes and runs on a GPU - expect a couple of minutes.

This is the step that makes an Architect blockout look finished. It regenerates geometry, so it is NOT the way to reduce triangle count: use thrixel_reduce_triangles for that, which is free and faster.

A reference image drives the look. Give a prompt describing the desired appearance and one is generated for you, or reuse an existing one with reference_image_id.

Inputs: submission_id (required), dest, seed, wait, +7 more.

thrixel_downloadDownload a 3D modelA

Save a finished model to disk in a specific format.

Most tools already save a GLB automatically, so you only need this to get a different format, or to re-save a model from an earlier session. Every format is available on every plan at no extra cost. GLB is the right choice for web and Three.js and is served directly; FBX, OBJ, STL and USDZ are converted on demand, so the first request for one takes longer.

Inputs: submission_id (required), dest, format. Returns: result

thrixel_edit_modelEdit a 3D modelA

Change an existing model with a natural-language instruction, keeping everything you did not ask to change. Use this to iterate rather than regenerating from scratch - it is faster and preserves the parts of the asset that were already correct.

Works on Architect, Auto-fix and Edit results. Say what the result should BE ('the roof is corrugated metal, rusted at the edges'), not just what to do ('make it rusty').

To change only some parts, pass their exact node names in focus_on_node_names - get those from thrixel_inspect_model.

Inputs: change (required), submission_id (required), dest, wait, +2 more.

thrixel_inspect_modelInspect a 3D modelA

Show what a model actually contains: its part names, per-part triangle counts, and a rendered thumbnail.

Call this before any operation that targets specific parts - thrixel_edit_model, thrixel_retexture_model and thrixel_reduce_triangles all take exact node names, and guessing them fails. Also use it to check a triangle budget before shipping an asset.

Inputs: submission_id (required).

thrixel_job_statusCheck a Thrixel jobA

Check whether a job has finished. Only needed for jobs submitted with wait=false - every other tool already waits and returns the finished asset.

Inputs: submission_id (required). Returns: result

thrixel_list_assetsList Thrixel modelsA

List models already in this Thrixel account, newest first. Use it to find and reuse an existing asset instead of generating a duplicate, or to recover a submission_id from an earlier session.

Inputs: limit, search. Returns: result

thrixel_reduce_trianglesReduce a model's triangle countA

Cut a model down to a triangle budget. FREE and fast - always use this to lighten an asset instead of re-running thrixel_detail_model at a lower target, which costs cubes, takes minutes, and gives you a different model rather than a lighter version of the same one.

Keeps the existing texture. Works on any completed model: detailed and sculpted models are rebuilt with cleaner topology, other models are decimated in place. The right endpoint is chosen for you.

Typical game budgets: hero prop 20k-50k, background prop 2k-10k, distant scenery under 1k.

Inputs: submission_id (required), target_triangles (required), dest, wait, +2 more.

thrixel_retexture_modelRetexture a 3D modelA

Generate fresh textures for a model without touching its geometry. Costs 40 cubes.

This is the cheap way to restyle: to make a whole set of assets cyberpunk, retexture each one against the same reference image rather than regenerating them. Pass the same reference_image_id every time to keep the set consistent - reusing an image is not re-charged.

Works on any completed model, not just detailed ones. To restyle only some parts, name them in apply_to_node_names.

Inputs: submission_id (required), dest, seed, wait, +5 more.

thrixel_sculpt_modelSculpt a 3D modelA

Create a dense, organic 3D model from a text description and/or a single reference image. Costs 40 cubes.

Use this for creatures, characters, plants, rocks, food, cloth - anything sculpted rather than assembled - and whenever you are starting from a photo. The output is ONE high-density textured mesh, not separate parts, so it is less editable than thrixel_create_model. For man-made objects with distinct components, use that instead.

Waits for the job to finish, saves the GLB, and returns the file path plus a rendered thumbnail.

Inputs: dest, wait, image, prompt, +3 more.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

    TDQS

    A4.2/5.0

    Scored across 12 tools

    Disambiguation5/5

    All 12 tools have clearly distinct purposes: creation (create vs sculpt), modification (detail vs retexture vs edit vs autofix), optimization (reduce), inspection (inspect, job_status, list_assets), download, and account status. No two tools do the same thing, and descriptions explicitly guide when to use which.

    Naming Consistency5/5

    Every tool follows the consistent pattern 'thrixel_verb_noun' in snake_case (e.g., thrixel_create_model, thrixel_reduce_triangles). There are no deviations or mixed conventions.

    Tool Count5/5

    12 tools is well-scoped for a 3D model generation and editing service. Each tool earns its place, covering all major operations without bloat or redundancy.

    Completeness4/5

    The tool set covers the full lifecycle: creation, detailing, retouching, optimization, inspection, and download. One minor gap is the lack of a delete tool, but assets can be managed elsewhere, and the core workflow is complete.

    Related MCP Connectors

    Related MCP Servers