Real surface finishes for game gun models: sourced finishes, variants, wear baked from use
Runs on your machine from its package; the steps are below.

At most: creates or changes data: records, files, settings.
Odel charges nothing per call. The publisher may charge for its own service.
Runs locally over stdio
This server isn't hosted — your MCP client launches it from a package registry. Use one of the commands below, or drop the config into your client (e.g. Claude Desktop).
Run
uvx coatinglab-mcp
MCP client config
{
"mcpServers": {
"coating-lab": {
"command": "uvx",
"args": [
"coatinglab-mcp"
]
}
}
}Real surface finishes for game gun models, worn where use wears a gun.
An MCP server that gives game gun models real surface finishes, worn where use wears a gun.
coat.py), so what passes is what the player sees.
Model Lab (modellab-mcp) builds give their own slots (upper, lower,
barrel and more), marks and parts: spec_for_modellab makes a coating spec from a build in one call.
Python 3.10 or later and Blender 4.2 or later.
pip install coatinglab-mcp
{"mcpServers": {"coatinglab": {"command": "coatinglab-mcp"}}}
| Setting | Meaning |
|---|---|
COATINGLAB_OUT | The only folder Coating Lab writes to. ~/.coatinglab by default. |
COATINGLAB_BLENDER | Blender, when it is not on the PATH or in the usual install folder. |
COATINGLAB_LIBRARY | A finishes JSON of your own, merged over the built-in library. |
COATINGLAB_WAIT_FOR | Process names that hold the machine. A bake waits for none of them to run. |
| Tool | What it does |
|---|---|
list_finishes, read_finish | The library, and one finish with its notes and sources. |
check_library, check_finish | The library, or a finish of your own, against the physical rules. |
list_wear_levels, list_templates | The wear levels, and the ready variant sets. |
spec_for_modellab | A coating spec for a Model Lab build. |
validate_spec | A spec's problems: a slot without a finish, a finish on the wrong material. |
bake | Bakes the wear masks into a copy of the model. |
check_coating | Each variant's wear against its level, and wear kept out of corners. |
render_variants | Look-dev renders and a sheet. |
engine_params | A variant's values by slot for an engine material. |
The bake writes the vertex colour Col:
| Channel | Meaning |
|---|---|
| R | Edge: 1 on flat ground, 0 on a sharp exposed edge |
| G | Handling: 1 where the hands work the gun |
| B | Rub: 1 along the lines parts slide on |
| A | Dirt: 1 where the surface is occluded, and round the muzzle and the port |
An engine's material follows the formula in src/coatinglab/coat.py. A wear level is a threshold: the higher the
level, the weaker the mask that already wears through. A grunge texture breaks wear up but never makes wear.
MIT