Material Maker 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., "@Material Maker MCP create a rusty metal material and show me a 3D 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.
Material Maker MCP
A Python MCP server and extended Godot bridge for agent-driven procedural material workflows. An agent can inspect available nodes, validate a graph, build it, compare real 3D previews and export PBR maps with file hashes.
This is an integration project built on Material Maker and Daniel Schemann's original MCP bridge. My contribution is the Python host and the bridge extensions described below, developed with AI coding assistance. Origin and attribution.
What the integration adds
Problem | Implementation |
Agents need discoverable operations | 35 typed MCP tools, node/parameter discovery and structured results |
Generated graphs can contain invalid references | Fragment validation before applying an undoable batch of nodes |
Two clients can race on application state | A shared FIFO queue on Godot's main loop, plus session-stable material IDs |
A model needs to inspect the actual result | Real 3D viewport captures and labeled PBR maps returned as MCP images |
Comparing variants should preserve the source | Bounded parameter sweeps with state restoration after success or reported failure |
Exports need observable outcomes | Manifests with filenames, channels, sizes, hashes and changed-file state |
Ten declarative starter recipes cover clay, metal, ceramic, stone, brick, fabric and other foundations. Recipes use Material Maker's existing nodes and renderer. The server supplies tools to an external agent; it does not embed a language model or implement RAG.
Related MCP server: bl-mcp
Quick start
Requires Python 3.11+, uv, Git and Godot 4.7 with a working graphics device. The live application is tested on Windows. Host-only CI also runs on Linux. A standard Material Maker binary does not include this extended bridge.
From a clone of this repository:
uv sync --frozen --extra dev
uv run --frozen pytest -q
uv run --frozen python scripts/smoke_mcp.pyThe last command verifies the MCP handshake and tool discovery without starting Material Maker.
Prepare a separate application checkout at the reviewed upstream revision:
git clone --no-checkout https://github.com/schemann/material-maker-mcp.git .runtime/material-maker
git -C .runtime/material-maker checkout 3a0a4bbd2662fd647f08767fe36d03024fd0d0c0
uv run --frozen python scripts/install_bridge.py .runtime/material-makerThe installer checks the commit and refuses to replace locally changed addon files. It does not patch application code. Use your Godot 4.7 executable in place of godot below:
godot --headless --editor --import --path .runtime/material-maker
godot --path .runtime/material-maker --no-splash --mcp-port=8767Keep Material Maker running for live tool calls. The host and addon both default to port 8767. If you already use Material Maker, see setup and isolated testing before sharing its settings or starting another instance.
Connect an MCP client
For a client that accepts the common mcpServers JSON format, replace the repository path with your local clone:
{
"mcpServers": {
"material-maker": {
"command": "uv",
"args": ["--directory", "/absolute/path/to/material-maker-mcp", "run", "--frozen", "material-maker-mcp"],
"env": {
"MATERIAL_MAKER_BRIDGE_HOST": "127.0.0.1",
"MATERIAL_MAKER_BRIDGE_PORT": "8767",
"MATERIAL_MAKER_BRIDGE_TIMEOUT": "240"
}
}
}
}Use an absolute path to uv if your client does not inherit PATH. On Windows, escape backslashes in JSON or use forward slashes.
Start with material_maker_status and list_materials, retain the material ID, discover a recipe or node definition, validate the graph and inspect a preview before exporting. See the example agent workflow.
Verification
uv run --frozen ruff check .
uv run --frozen pytest -q
uv run --frozen python scripts/smoke_mcp.py --configured-command --live
uv run --frozen python scripts/live_contracts.py
uv run --frozen python scripts/concurrency_gate.pyLive checks create disposable materials and output files: run them against a separate test instance, not a session with ongoing work. Set MATERIAL_MAKER_BRIDGE_PORT to match that instance. Recorded results and limits.
Scope
This is a local desktop integration, not a hosted service. The bridge has no authentication or filesystem sandbox; trusted clients can write to explicit paths with the app's permissions. A timeout does not cancel a mutation. Avoid manual edits during automation. Architecture and trust boundary.
The repository includes the Python host, addon, recipes and checks. Material Maker, Godot binaries and third-party material libraries are installed separately. MIT licensed; upstream attribution is retained.
Available Tools
35 toolsactivate_materialAIdempotent
Activate one material tab by an ID returned from list_materials.
Inputs: material_id (required). Returns: object
add_graph_fragmentA
Add up to 256 nodes and their internal connections in one undoable operation.
Each node needs at least type and may include name, parameters, and
node_position. Connections use from, from_port, to, and to_port.
Inputs: nodes (required), position, connections, material_id. Returns: object
add_nodeB
Add one node. Call describe_node_type first when ports or parameters are unknown.
Inputs: node_type (required), position, parameters, material_id. Returns: object
apply_material_recipeA
Validate and apply a curated recipe, optionally with constrained parameter overrides.
Overrides use Node.parameter keys and may only target parameters already declared by
the recipe. By default a fresh material tab is created to avoid replacing existing inputs.
Inputs: recipe_id (required), position, overrides, create_new, +1 more. Returns: object
connect_nodesC
Connect an output port to an input port after validating both indexes.
Inputs: to_node (required), to_port (required), from_node (required), from_port (required), +1 more. Returns: object
describe_material_recipeBRead-onlyIdempotent
Return one recipe's graph, parameters, connections, and suggested variations.
Inputs: recipe_id (required). Returns: object
describe_node_typeBRead-onlyIdempotent
Get ports, parameters, defaults, ranges, and documentation for a node type.
Inputs: name (required). Returns: object
disconnect_nodesC
Disconnect one exact graph connection.
Inputs: to_node (required), to_port (required), from_node (required), from_port (required), +1 more. Returns: object
duplicate_nodeC
Duplicate one node; by default the copy is offset by 80 pixels.
Inputs: node (required), position, material_id. Returns: object
export_materialCDestructive
Export a material and return every output file with size, hash, and channel.
Inputs: prefix (required), profile (required), size, material_id. Returns: object
get_material_graphBRead-onlyIdempotent
Return the current material graph, connections, parameters, and save path.
Inputs: material_id. Returns: object
get_material_nodeBRead-onlyIdempotent
Inspect a graph node, including ports and current parameter values.
Inputs: node (required), material_id. Returns: object
get_node_parameterCRead-onlyIdempotent
Read one node parameter.
Inputs: name (required), node (required), material_id. Returns: object
list_bridge_actionsARead-onlyIdempotent
List the internal bridge actions and their implementation status.
Inputs: no named parameters. Returns: result
list_export_profilesBRead-onlyIdempotent
List export profiles supported by the current PBR material node.
Inputs: material_id. Returns: object
list_material_recipesARead-onlyIdempotent
List the curated declarative starter recipes, optionally filtered by text or tag.
Inputs: tag, query. Returns: result
list_materialsARead-onlyIdempotent
List open material tabs with stable session IDs, active state, and undo state.
Inputs: no named parameters. Returns: object
list_node_typesBRead-onlyIdempotent
List Material Maker node types, optionally filtered by category or text.
Inputs: limit, query, category. Returns: result
load_materialB
Load an existing .ptex material from an absolute or user-relative path.
Inputs: path (required). Returns: object
material_maker_diagnosticsARead-onlyIdempotent
Return queue state, active operation timing, versions, and recent bridge errors.
Inputs: no named parameters. Returns: object
material_maker_statusARead-onlyIdempotent
Check whether the bridge, Material Maker, and a material graph are ready.
Inputs: no named parameters. Returns: object
move_nodeBIdempotent
Move a node to an absolute [x, y] graph position.
Inputs: node (required), position (required), material_id. Returns: object
new_materialB
Open a new material project with Material Maker's default PBR output node.
Inputs: no named parameters. Returns: object
preview_materialBRead-onlyIdempotent
Return the live 3D PBR preview as MCP image content for visual inspection.
Inputs: model, width, height, rotation, +1 more.
preview_material_mapsARead-onlyIdempotent
Export and return all PNG/JPEG/WebP PBR maps as labeled MCP images.
The temporary export is deleted after its bytes have been embedded in the MCP response. Use export_material when persistent output files are required.
Inputs: size, profile, material_id.
preview_material_variationsCRead-onlyIdempotent
Return safe parameter variations as labeled 3D MCP images without keeping files.
Inputs: variations (required), size, model, rotation, +1 more.
redoC
Redo one operation in the selected or active material.
Inputs: material_id. Returns: object
remove_nodeBDestructive
Remove a node and all of its graph connections.
Inputs: node (required), material_id. Returns: object
render_material_variationsADestructive
Render up to 64 parameter combinations and restore the original graph state.
variations maps node names to parameters and value lists, for example
{"Noise": {"scale": [2.0, 4.0], "seed": [1, 2]}}. Preview mode writes
3D preview PNGs; export mode writes the selected profile and returns each manifest.
Inputs: output_dir (required), variations (required), mode, size, +4 more. Returns: object
render_nodeBDestructive
Render one node output to a PNG file; the destination directory must exist.
Inputs: node (required), path (required), width, height, +2 more. Returns: object
save_materialBDestructive
Save the current material; omit path to reuse its existing .ptex path.
Inputs: path, material_id. Returns: object
save_material_previewBDestructive
Save Material Maker's actual 3D PBR preview to a PNG file.
Inputs: path (required), model, width, height, +2 more. Returns: object
set_node_parameterCIdempotent
Set a validated node parameter and trigger Material Maker's update path.
Inputs: name (required), node (required), value (required), material_id. Returns: object
undoB
Undo one operation in the selected or active material.
Inputs: material_id. Returns: object
validate_graph_fragmentCRead-onlyIdempotent
Preflight a graph fragment without changing Material Maker.
Inputs: nodes (required), connections, material_id. Returns: object
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
Loading tool schema changelog…
TDQS
Scored across 35 tools
Most tools target distinct resources and actions, but there are several closely related preview/render/export variants (e.g., preview_material, preview_material_maps, preview_material_variations, render_material_variations) and overlapping meta tools (material_maker_status vs. material_maker_diagnostics). Descriptions help, but an agent could still hesitate between some of these.
Almost all tools use snake_case and a verb_noun pattern, with clear operations like list_materials, add_node, and export_material. Minor deviations include server-prefixed noun phrases (material_maker_status, material_maker_diagnostics) and new_material instead of a create-style verb, but the convention is largely predictable.
35 tools is well above the recommended 3–15 range and exceeds the 25+ threshold for being too many. While the domain is complex, many granular tools could be consolidated or composed, and the large surface increases selection burden for an agent.
The toolset covers material creation/loading/saving, node graph editing, parameter access, previews, exports, recipes, and undo/redo, which is strong lifecycle coverage. Some gaps remain, such as closing/deleting material tabs and batch parameter updates, but agents can generally work around them.
Maintenance
Related MCP Connectors
Connect your AI assistant to Blender for 3D modeling, Geometry Nodes, materials, lighting, animation, rendering and export. Inspect real scenes and viewport images, refine the result and restore checkpoints. OAuth connects your chat to Blender Bridge Desktop on an online Windows 10/11 x64 computer running Blender 4.2+. The chat can run on another device. Requires an active Blender Bridge account; 7-day trial available. AI model access is separate.
Control Unreal Engine to browse assets, import content, and manage levels and sequences. Automate…
Blender-as-a-service for agents: search 3D assets, run Blender Python, or brief the studio agent.
Search/download 7,000+ PBR materials, HDRIs, decals, 3D assets; generate PBR materials and HDRIs.
Related MCP Servers
- AlicenseNot gradedqualityBmaintenanceEnables AI assistants to create Material Maker node graphs from natural language, validate them against the node catalog, and render them headlessly to PBR texture maps and editable .ptex files.11MIT
- AlicenseAqualityBmaintenanceEnables an AI agent to drive a live Blender session, building, sculpting, measuring, checking, rigging, lighting, rendering and exporting 3D models through safe operations in world units. Every geometry-changing call reports achieved dimensions, open edges and failures as numbers and review images, so modelling mistakes become visible instead of silent.113MIT
- FlicenseNot gradedqualityAmaintenanceEnables AI agents to inspect and modify live Blender scenes, manage objects and materials, render images, retrieve PolyHaven assets, and send prompts to configurable local or OpenAI-compatible LLM backends.-
- AlicenseNot gradedqualityCmaintenanceEnables agents and Blender users to generate game-ready art through a set of Blender tools covering concept image generation, image-to-3D mesh creation, mesh cleanup, PBR material assignment, greybox level layout, camera pathing and still or sequence rendering. Every action runs headless Blender, returns machine-readable JSON with pass/fail self-checks such as triangle budget, scale, pivot and clearance, so agents can verify and fix each step unattended.MIT