Headless Blender asset QA over MCP: background script runs and FBX reimport verification.
io.github.ellmos-ai/ellmos-blender-use-mcp — MCP Server
This Model Context Protocol (MCP) server provides headless Blender asset QA over MCP. It runs a background script to perform FBX reimport verification. The server is positioned for asset-pipeline work involving Blender, 3D assets, and game-development workflows.
🛠️ Key Features
Headless Blender execution
Background script for asset QA
FBX reimport verification
🚀 Use Cases
Verifying FBX reimports in a Blender-based asset pipeline
QA for 3D assets during game-development workflows
An asset-QA tool for game and 3D asset pipelines: verify that an exported FBX actually reimports cleanly in headless Blender — mesh count, material count, and required naming prefixes checked automatically, with a deterministic JSON result instead of a manual eyeball pass. blender_verify_fbx_reimport is the core structural tool and blender_verify_visual its visual counterpart — the first counts meshes and checks name prefixes, the second renders four views and measures geometry that counting cannot see. blender_locate and blender_run_script are the general-purpose primitives both are built on.
No add-on. No TCP port. No background daemon. This server does not install anything into Blender, does not open a socket for a running Blender instance to connect to, and does not keep Blender resident. Each call spawns blender --background --python <script.py>, waits for a bounded, timeout-guarded exit, and returns the result — headless and stateless by design. It does not download assets and does not collect telemetry.
How this differs from other Blender MCP servers. Most Blender MCP projects (e.g. ahujasid/blender-mcp, the official Blender Labs MCP server) drive a live, running Blender GUI over a TCP/add-on bridge for interactive scene editing — a different use case with a different trust model (an open socket, an installed add-on, a persistent process). This server instead targets CI-style, one-shot asset verification: run it in a pipeline step, get a pass/fail JSON, move on. If you need live GUI control, use a reviewed Blender MCP add-on separately (see Safety below).
NOTE
AI / LLM Integration & Machine-Readable Context: AI assistants (Claude, Codex, Gemini) can read llms.txt for machine-readable context, search phrases, and tool documentation. Regression test suites guard privacy hygiene and runtime memory safety.
TIP
CI & Asset Pipeline Automation: Use blender_verify_fbx_reimport as an automated gate before committing 3D assets to source control. It flags missing prefixes (e.g., SM_, M_), unexpected mesh counts, or broken material assignments without human intervention.
2. Target Personas & High-Intent Discoverability
[PERSONA-01] Indie & AAA Game Technical Artists & 3D Pipeline TDs
Profile: Technical Artists managing FBX/GLTF asset pipelines for Unreal Engine, Unity, Godot, and custom C++ game engines.
Pain Point: Exported 3D assets frequently have unapplied rotation (lying on their side in-engine), broken pivot offsets, missing SM_/M_ prefixes, or unassigned materials that slip past manual review.
Profile: DevOps and Build Engineers responsible for automated asset validation gates in GitHub Actions, GitLab CI, or Jenkins.
Pain Point: Traditional Blender automation tools require installing graphical add-ons or running interactive background sockets, which fail in headless containerized runners.
High-Intent Queries:headless blender asset qa mcp server, github actions blender fbx qa gate, blender background script ci cd verification, blender mcp no add-on no tcp port.
How We Solve It: Stateless blender --background execution with strict 15-minute runaway timeouts, bounded 8 KB memory tails, zero add-ons, and deterministic JSON exit codes.
[PERSONA-03] Autonomous AI Agent Engineers (Claude, Codex, Gemini)
Profile: Developers deploying autonomous AI coding agents for procedural 3D generation, asset processing, and game prototyping.
Pain Point: AI agents need to inspect and verify 3D assets without socket leaks, zombie processes, or uncontrolled memory consumption.
High-Intent Queries:mcp server fbx mesh material verification, ai agent blender 3d asset inspection, blender four-view rendering mcp, llm tool headless blender.
How We Solve It: Native Model Context Protocol (MCP) server with comprehensive llms.txt documentation, robust taskkill /T /F process tree termination, and fail-closed temporary file cleanup.
[PERSONA-04] Enterprise Game Studio Compliance & Security Officers
Profile: Security Officers and Compliance Managers safeguarding proprietary game IP and development workstations.
Pain Point: Third-party DCC tools frequently open local network ports, dial remote telemetry servers, or require administrator privileges.
High-Intent Queries:offline blender mcp zero egress, air gapped 3d asset verification, unprivileged blender asset qa, zero copyleft mcp tool.
How We Solve It: Strict RunAsInvoker non-elevation certification, 100% offline zero-egress guarantee, zero runtime telemetry, and Level 1 SBOM with 0% copyleft licenses.
3. 10-Dimension Comparative Matrix vs. Alternatives
sequenceDiagram
autonumber
actor Client as AI Assistant / CI Pipeline
participant Server as ellmos Blender Use MCP
participant Resolver as Blender Resolver
participant Process as Headless Subprocess
participant Python as Blender Python Engine
participant FS as Local Filesystem (FBX)
Client->>Server: Call blender_verify_fbx_reimport(fbxPath, requiredPrefixes)
Server->>Resolver: Resolve Blender Executable (blender_locate / BLENDER_EXE / Registry / PATH)
Resolver-->>Server: Return Validated Executable Path
Server->>FS: Write Temp Python Verification Script
Server->>Process: Spawn blender --background --python script (timeout-guarded)
Process->>Python: Execute Verification Script
Python->>FS: bpy.ops.import_scene.fbx(filepath=fbxPath)
FS-->>Python: Parse Mesh Objects & Material Slots
Python->>Python: Validate Naming Prefixes, Object Counts & Hierarchy
Python->>FS: Write Output JSON Verification Result
Process-->>Server: Process Exit (Exit Code 0 / Bounded Tail Buffer)
Server->>FS: Read Result & Clean Up Temp Verification Script
Server-->>Client: Deterministic JSON Result (meshCount, materialCount, missingPrefixes, ok)
6. Tool Suite & Verification Matrix
Tool
Purpose
Primary Output
Memory Guard
blender_verify_fbx_reimport
Generate a temporary Blender verification script, import an FBX, and write a JSON result with mesh/material counts and missing required prefixes.
JSON Report
Bounded 8 KB Tail
blender_verify_visual
Render four views of an FBX and check geometry a structural reimport cannot see: unapplied rotation, floating parts, pivot outside the model, transform residuals, stray empties.
4 PNGs + JSON
Bounded 8 KB Tail
blender_run_script
Run blender --background --python <script.py> with optional arguments and bounded stdout tail.
Script Tail Text
8 KB - 50 KB Max
blender_locate
Resolve the Blender executable from an explicit path, BLENDER_EXE, standard Windows install locations, or PATH.
Resolved Path
Zero Subprocess
7. blender_verify_fbx_reimport Deep Dive & Schema
Imports an FBX file into headless Blender and verifies mesh count, empty count, material count, material slot assignments, and required naming prefixes.
Parameters
Parameter
Type
Required
Default
Description
fbxPath
string
Yes
—
Target FBX asset file path to verify.
resultPath
string
No
<fbxDir>/verify_reimport_result.json
Path where structured JSON verification results will be written.
requiredPrefixes
string[]
No
[]
List of naming prefixes required on meshes or empties (e.g. ["SM_", "M_"]).
blenderPath
string
No
auto-detect
Custom path to the Blender executable (blender.exe / blender).
timeoutMs
number
No
120000
Process execution timeout in milliseconds (max: 600000).
8. Visual Verification Deep Dive & 4-View Geometry
Renders four views of an FBX and checks geometry that a structural reimport cannot see.
blender_verify_fbx_reimport counts meshes and checks name prefixes — it cannot tell you that a mesh is lying on its side, that a part floats away from the assembly, or that the pivot sits outside the model. This tool does, and it produces the renders to look at.
Detected failure classes: unapplied rotation, floating parts in multi-part assets, pivot/origin outside the bounding box, transform residuals in the export, stray empties.
Why four views and not one: a single front shot hides depth errors — floating-vs-resting, behind-vs-in-front. A real case: chain links looked correctly attached from the front and were not attached at all when seen from the side.
Like every tool here it is a one-shot headless run: no add-on, no daemon, no socket.
blender_locate: Resolves the active Blender executable on Windows, Linux, or macOS across explicit call parameters, environment variable BLENDER_EXE, standard installation paths (newest version first), and system PATH.
blender_run_script: Runs an arbitrary local Python script via blender --background --python <script.py> with optional arguments, timeout guardrail, and hard tail-buffer truncation (8 KB default, up to 50 KB max).
10. CI/CD Pipeline Integration (GitHub Actions)
Integrate headless asset QA directly into your GitHub Actions pull request checks to prevent broken FBX models, missing material slots, unapplied rotations, and displaced pivots from reaching the main branch:
The server enforces 10 architectural and runtime invariants to guarantee privacy, safety, process isolation, and auditability:
ID
Invariant
Guarantee & Implementation Details
INV-LOCAL-01
100% Local-First & Zero Network Egress
Zero outbound network requests, external telemetry, or remote API calls. Runs fully air-gapped on the host machine.
INV-HEADLESS-02
Stateless & Add-on-Free Headless Execution
No Blender add-on installation, no open TCP sockets or daemon listeners, and zero mutation of the host Blender user directory.
INV-SEC-03
Non-Elevation & Unprivileged RunAsInvoker
Operates strictly with unprivileged user-mode permissions (RunAsInvoker). Never requires or requests administrative elevation.
INV-BOUND-04
Strict Timeout & Tail-Buffer Bounding
Every execution is timeout-guarded. Standard output and error streams are captured into bounded tail buffers (default 8 KB, max 50 KB), preventing runaway memory.
INV-INTEG-05
Deterministic JSON & Evidence Integrity
Produces verifiable, machine-readable JSON reports containing exact mesh counts, material slots, naming prefixes, and geometry metrics.
INV-VISUAL-06
Four-View Multi-Angle Visual Verification
Generates orthogonal front, side, top, and perspective renders to detect geometry defects (floating parts, unapplied rotation) that depth-blind checks miss.
INV-CLEAN-07
Fail-Closed Ephemeral Staging & Script Cleanup
Ephemeral Python verification scripts and temporary staging files are unconditionally purged from the filesystem upon completion or failure.
INV-CROSS-08
Cross-Platform Operating System Parity
Uniform execution and automated discovery across Windows, Linux, and macOS without hardcoded host dependencies.
INV-SYNC-09
Cloud-Sync & Multi-Host Lock Discipline
Resilient against cloud synchronization conflicts (*-conflict-*, *-CONFLIT-*) and compliant with canonical multi-agent locks.
INV-SLA-10
48h Security Response & 5-Day Triage SLA
Formal vulnerability acknowledgment within 48 hours and triage commitment within 5 business days via official coordination channels.
12. Security Policy & RunAsInvoker
Local Python Execution: This server runs local Python inside Blender. Use only scripts and asset paths you trust.
RunAsInvoker Non-Elevation: Runs strictly under standard unprivileged user accounts; no administrator or root privileges required.
Process Cleanup: Subprocesses are supervised; Windows processes are cleanly killed via taskkill /pid <PID> /T /F on timeout.
Offline Assurance: No remote asset marketplaces, external APIs, or usage telemetry are involved.
Vulnerability Disclosure: Review SECURITY.md for official coordination contacts and our binding 48-hour response SLA.
BLENDER_EXE — optional path to the Blender executable. Without it, tools try the explicit blenderPath argument, then BLENDER_EXE, then standard Blender install locations on Windows (%ProgramFiles%\Blender Foundation\Blender <version>\blender.exe and equivalent 32-bit and per-user roots, newest version first), then PATH. On Linux and macOS the lookup goes straight from BLENDER_EXE to PATH.
Every tool also accepts an explicit blenderPath argument per call, which takes priority over BLENDER_EXE.
Process output is retained only as a tail: blender_run_script defaults to 8,000 characters (configurable up to 50,000); FBX verification keeps 8,000. The response marks outputTruncated: true when earlier output was discarded, so verbose Blender scripts cannot grow the MCP process memory without bound.
15. Third-Party Licenses & Level 1 SBOM
All runtime production dependencies are distributed under permissive open-source licenses (MIT and BSD-2-Clause) with 0% copyleft:
@modelcontextprotocol/sdk (MIT)
update-notifier (BSD-2-Clause)
zod (MIT)
For the complete dependency inventory, Invariant Cross-Reference Matrix, and prior-art isolation analysis, see THIRD_PARTY_LICENSES.md and the companion plaintext inventory THIRD_PARTY_LICENSES.txt.
16. Sibling Projects & ellmos-ai Ecosystem
This MCP server is part of the ellmos-ai ecosystem — AI infrastructure, MCP servers, and intelligent tools.
Testing framework for LLM operating systems (7 dimensions)
Desktop Software Suite & Sibling Tools
Our partner organization open-bricks bundles AI-native desktop applications and developer utilities — a modern, open-source software suite built for the age of AI:
Modular tactical game arena with automated asset pipeline validation
17. LLM Context Index (llms.txt)
For AI assistants and LLM tooling, llms.txt provides machine-readable architecture documentation, tool descriptions, search phrases, and runtime invariants.
18. License & Statutory Disclaimer (§ 521 BGB)
License & Attribution
Distributed under the MIT License. See LICENSE and NOTICE for full copyright and attribution details.
Statutory German Disclaimer (§ 521 BGB Gefälligkeitsrecht)
This open-source package is provided free of charge without consideration (Gefälligkeit). Under statutory German law (§ 521 BGB), liability for defects in quality and title is strictly limited to intentional misconduct (Vorsatz) and gross negligence (grobe Fahrlässigkeit).
Security Response Commitment
Security vulnerabilities are triaged within 48 hours under our binding Security SLA. Refer to SECURITY.md for coordinated disclosure guidelines.