Build, align & render a real optical bench in Blender; drivable by an AI agent over MCP.
Copy the AI prompt to install this server into Claude Code, Cursor, or another agent β or use 1-click editor setup below.
π‘ Paste the JSON block into your client's configuration file under mcpServers, then restart the application.
An optical bench an AI agent can build, inspect, align, and render β over MCP.
"See a need, fill a need." β Bigweld, Robots (2005)
60-second tour β Lay out lasers, mirrors, beamsplitters, lenses, waveplates, gratings and detectors in Blender; a live beam engine traces them (ray + Gaussian-q ABCD + Jones/Stokes polarization + wave-optics overlays), all physics-verified against textbook answers in CI. Everything mounts on real opto-mechanics and renders in Cycles. The whole optical state is exposed over a localhost MCP bridge, so an AI agent reads ground-truth geometry and beam data and drives the bench β aligning, closing an AO loop, nulling fringes. Install: drag the one-click link from the releases page into Blender 4.2+ (it also subscribes you to updates β see Install & stay updated).
Blender becomes a physics-checked optical bench: lasers, mirrors, beamsplitters, lenses, waveplates, polarizers, gratings, deformable mirrors, detectors β laid out in 3-D, traced by a live beam engine, mounted on real opto-mechanics, and rendered in Cycles. The twist: the entire optical state is exposed as JSON over a localhost MCP bridge, so an AI agent (e.g. Claude) doesn't guess geometry β it reads every element's pose, port normals, beam path, mount limits, and wavefront error as ground truth, then drives the bench toward design intent and watches the beam update live.
This is the one place Blender Γ optics Γ MCP/AI-agents actually overlap. Most Blender-MCP work is geometry and animation. This is a physics-grounded digital twin of a real optical table that an agent can see and close the loop on.
A real bench, traced live. Every mount, post, base and beam above is placed and computed by the add-on β then rendered in Cycles. Build it by hand in the UI, from a script, or let an AI agent drive it over MCP.
Alignment, solved. A kinematic mirror is knocked 2Β° out of alignment, throwing the beam well off the sensor centre β then one optics_api.align_element() call collapses the pointing residual (7.02 β 0.0008 mrad) and re-centres it. See examples/agent_align.py, which reproduces those numbers headlessly in one command.
An agent doesn't fly blind β it has the optical truth and iterates against it:
get_state() returns the whole bench as JSON β elements, sources, detectors, beam path, bench
grid, cages/tubes/rails, and mechanical-limit warnings β so the agent always knows where things are
and where the light goes. 30 functions are exposed over MCP; the bridge whitelists only the
curated optics_api facade.
optics_api
function on 127.0.0.1:9765).mcp/ and wire it into your MCP client.Then the agent can READ the bench, WRITE changes, and COMPOSE subsystems:
The full surface (each also an MCP tool): capabilities, get_state, diagnose,
propose_corrections, detect_phenomena, inspect_beam, inspect_element, beam_profile,
sensor_capture, ao_measure, get_wavefront, pyramid_wfs, zonal_render, coupling_efficiency,
check_mechanics, build_example, trace_beam, path_statistics, tag_element, add_component, swap_part,
place_relative, set_mount, set_param, align_element, align_all, auto_align, tilt_null,
design_telescope, design_4f, mode_match, scan, render, render_sequence, bake_beams,
clear_beams, export_svg, dress_bench, set_grid, place_on_grid, make_cage, make_tube,
make_rail, place_on_rail, ao_command, ao_close_loop. Call capabilities() first β it returns a
self-describing manifest (read mcp/AGENT_GUIDE.md for the conventions and the
refuse / partial / accept judgement model).
Five repeatable /optics-* skills ship in .claude/skills/ (build Β· align Β·
inspect Β· correct Β· sensor-render) β model-invoked workflows that sequence these tools and carry the
disciplines (inspect-first, byte-identical, advisory-corrections-you-judge).
For headless pipelines, optics_api is importable directly inside Blender
(blender --background --python your_script.py).
path_statistics() reports every source-to-detector arrival separately. It reconstructs the
parent-indexed route and returns both its geometric length and the tracer's accumulated phase OPL:
The result deliberately says group_delay_available: false. The current tracer carries phase-index OPL;
it does not model group index, group delay, or GDD, so the number must not be presented as an ultrafast
time-of-flight result. In the UI the same phase OPL/geometric range appears under Inspect β Optical Report.
A binary shutter is available from the component library under the key SHUTTER:
No reviews yet β be the first to share how this listing worked for you.
Showcase your server listing on GitHub or your project documentation. Embed this dynamic SVG badge to highlight official listing status and live engagement.
[](https://allmcps.com/mcp/blender-optics-simulator)<a href="https://allmcps.com/mcp/blender-optics-simulator"><img src="https://allmcps.com/api/badge/blender-optics-simulator?style=directory" alt="Blender Optics Simulator on AllMCPs" /></a>