Real surface finishes for game gun models: sourced finishes, variants, wear baked from use
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
Source-derived launch command. Check the maintainer’s required arguments and credentials before running:
uvx coatinglab-mcpMerge this template into ~/Library/Application Support/Claude/claude_desktop_config.json. Keep existing servers. Add any arguments, credentials, and permissions required by the maintainer; this template has not been install-tested.
{
"mcpServers": {
"io-github-hpdkhoa-coatinglab-mcp": {
"command": "uvx",
"args": [
"coatinglab-mcp"
]
}
}
}Restart Claude Desktop completely for changes to take effect. Confirm the server appears connected in the client’s tool list, then try a read-only example from its documentation.
Claude Desktop setup referencecoatinglab-mcppypiCoating Lab works with any MCP-compatible client. Copy the config snippet from the Configuration section above and add it to the file shown for your client, then restart the application.
~/Library/Application Support/Claude/claude_desktop_config.jsonRestart Claude Desktop completely for changes to take effect.~/.cursor/mcp.jsonRestart Cursor for changes to take effect..vscode/mcp.jsonReload VS Code window for changes to take effect.~/.codeium/windsurf/mcp_config.jsonRestart Windsurf for changes to take effect..mcp.jsonSave at the project root, then start Claude Code in that project and review the MCP server approval prompt. Keep real credentials out of shared files.