Repository navigation
Releases: tyeth/Luban
Release list
MCP Server for CNC w/rotary (Snapmaker 2.0 / Artisan) + Laser (Snapmaker Ray etc) - Do Not Use This Software!!! (Alpha v10 - A.K.A. v4.15.2-mcp-alpha.10)
No warranty expressed or implied. Use at your own risk.
Ensure the safety of yourself and others and property at all times, following local laws and safety requirements, use Personal Protective Equipment, and an Enclosure for the CNC.
You must always be next to the machine ready to perform an emergency stop or switch the power off.
Using the MCP Server
- Read the MCP setup guide.
- Set up the MCP server in Preferences. The seven CNC skills and server connection are also available through the new
luban-cncplugin in the Luban plugin marketplace. - Connect the machine in the Workspace page.
- Ask your agent to fetch the current machine status.
Hardware Required
- A tool setter with a touch sensor and, ideally, overtravel for tool height detection.
- A probe tool that can be mounted in the tool head.
- A USB GPIO bridge or Wi-Fi/MQTT sensor bridge for the probe and tool setter. See the setup guide for the Python virtual environment and Raspberry Pi RP2040 U2-IF example.
- Optional USB camera for live viewing and synchronized probe photographs.
What's Changed
What's Changed
- Fix: Generate the MCP tool list for every tool file and document telemetry tools by @tyeth-ai-assisted in #331
- Feature: Type a position into the Workspace coordinate table to go there by @tyeth-ai-assisted in #333
Installer filenames and the app's displayed version remain 4.15.2; v4.15.2-mcp-alpha.10 identifies this prerelease. Build assets are attached automatically as each platform finishes.
Full changelog: v4.15.2-mcp-alpha.9...v4.15.2-mcp-alpha.10
MCP tools (93)
Download the copyable Markdown list.
Terse reference for the 93 MCP tools in v4.15.2-mcp-alpha.10. Start a fresh session with get_stored_state. Read the CNC skills and MCP setup guide for operating rules. Staged jobs require operator approval through the confirmation page; direct tools follow their documented guards.
Status and connection
get_machine_profile— Machine profile: build volume, per-toolhead work ranges, and kinematics (which element moves per axis).get_position— The machine POSITION OF RECORD: the judged machine-frame position with itsreliability.set_machine_policy— Store the CONNECTED machine's motion policy in its own entry of the per-machine store (other machines' entries are never touched).get_connection_status— Report whether Luban is connected to a machine.recover_machine_connection— Recover stopped HTTP heartbeat polling using only the machine session already held by Luban.get_mcp_diagnostics— Timing evidence for slow or aborted procedures.
G-code jobs
validate_gcode— Statically inspect G-code: motion extents, feeds, spindle commands and warnings.submit_gcode_job— Stage a G-code job for human confirmation.begin_gcode_upload— Start a chunked upload of a G-code program too large for one tool argument, for a client that cannot write into the MCP jobs inbox (gcode_path is simpler when it can).append_gcode_chunk— Send the next slice of a begun upload.finish_gcode_upload— Close a chunked upload: refuses unless every declared byte arrived, then verifies the SHA-256 against the one declared at begin (a mismatch discards the upload).start_gcode_job— Start an approved job: uploads the file to the machine through the same prepare/start path as "Start on Luban" (door interlock applies) and starts it.get_job_timing— Where a job's time went, computed from its event log.get_gcode_job_status— Report a job state, ending reason, events, results, and live machine progress.stop_gcode_job— Stop a running job.convert_thread_milling_gcode— Offline conversion of Machining Doctor thread-milling G-code to explicit Snapmaker G0/G1 moves.
Transport and direct motion
restore_work_frame— Put the controller back in the WORK workspace (G90thenG54on its own line; on a machine this MCP never sends G53/G54 to - the Ray, the Original -G90alone).home— MACHINE home (G28): drives every axis to its limit switches - this is NOT the work origin; moving to work X0 Y0 is the separate goto_work_origin operation.goto_work_origin— STAGE a move to the WORK origin: one XY move to work X0 Y0 at the CURRENT Z.move_and_capture— ONE vision-driven XY reposition: Z-GATED FIRST (operator ruling 2026-09-21), then move, settle-verify, and capture a position-stamped frame.move_z— Request absolute Z motion, executed on the direct path so positions PERSIST.traverse_xy— Law-2 TRANSPORT: an absolute XY move, or an ordered series.
Camera and vision
visual_servo— Use the stored camera calibration to move toward a target pixel and capture a new frame.list_cameras— List available capture sources: the configured snapshot URL, or DirectShow video devices found by ffmpeg.capture_frame— Capture one frame from the workshop camera (configstore: mcpCameraUrl for an HTTP snapshot source, else ffmpeg with mcpCameraDevice/mcpFfmpegPath).get_frame— Read any saved requested snapshot by frame_id (RAM cache then disk), or an image/mosaic by file from MCP camera capture, program-frame, bootstrap or survey directories.get_camera_capture_set— Read the complete position-stamped index of a finished camera_bootstrap or survey_bed.preview_cameras— Show what each attached camera SEES, one frame per camera, so the right one can be identified before it is selected.select_camera— Choose which camera every capture uses from here on.set_tool_region— Update the expectedToolRegion that every capture reports: the fractional box where the endmill images (fixed camera-to-spindle geometry).track_feature— Template-match a patch between two captured frames.query_firmware_configuration— Read the firmware's current configuration.query_firmware_position— Ask the firmware directly for its position report and return the RAW controller response alongside the heartbeat-derived view.camera_program— Stage one camera procedure; each op uses {id, kind, ...fields} from ops.items.oneOf.
Camera model
set_camera_calibration— Persist a pixel-to-machine calibration, keyed by the machine Y it was derived at (the SM2 platform travels in Y, so a mapping is only valid at that Y).get_camera_calibration— Fetch calibrations: by id, nearest to a machine Y (within tolerance), or all.delete_camera_calibration— Delete one stored calibration by id.get_camera_model— The current camera model and whether it may still be used.set_camera_model— Store a camera model solved from a bootstrap frame set (scripts/camera_bootstrap.py).plan_view_pose— Where must the TOOLHEAD go to see this machine point? Read-only.camera_bootstrap— Stage the camera pre-configuration for human approval.verify_camera_model— Check the stored camera model against a target whose machine coordinates are known, at the CURRENT toolhead position, and record the residual.
Landmarks
set_landmark— Persist a named scene landmark (tool height checker, rotary span, tool post...) with its machine-coordinate XY extent and a description.set_probe_geometry— Store the jig/tool constants a rotary probe_program may reference as the "axis" namespace.delete_landmark— Ask the operator to delete one stored landmark of the connected machine, by id or name.confirm_landmarks— STAGE the operator's landmark review for the connected machine.assign_machine_device— Stage the operator's answer to a device conflict: same machine (alias its records) or a new, empty entry.get_stored_state— Everything already known about this machine and bed in one read-only call.
Probe feed
get_probe_feed_status— State of the external probe sensor feed (transport mqtt or gpio).connect_probe_feed— Connect (or reconnect) to the probe sensor feed using the current settings.disconnect_probe_feed— Disconnect from the probe sensor feed and stop reconnecting.clear_overtravel_alarm— Clear the latched safety alarm (overtravel OR crash - a contact sensor firing during motion that expected no contact) that is blocking all motion.
Tool setter and tool change
set_tool_setter_config— Store the tool setter reference: its centre in MACHINE coordinates, the machine Z at which a reference fitting triggers it and nominal approach lengths in that same convention.get_tool_setter_config— The stored tool setter reference (centre, trigger Z, bit lengths, tool-change park position), named datum and retained measurement history.set_active_tool— Record the operator-confirmed fitted tool for clearance, no motion or confirm page.get_active_tool— Read the usable active-tool clearance assertion, age and provenance, or active:null plus stored/staleReason when invalidated.run_tool_setter— Stage a tool height measurement against the tool setter for human confirmation.goto_tool_change_position— Stage the move to the operator-set tool-change park position.apply_tool_length_offset— After a tool change: shift the CURRENT work origin Z by the measured length difference between the last two tool setter measurements.
Touch-probe procedures
probe_point— Stage a touch-probe point measurement for human confirmation.probe_vector— Stage a touch-probe march along an ARBITRARY direction for human confirmation.probe_approach_and_hold— Stage ONE approved guarded approach to...
MCP Server for CNC w/rotary (Snapmaker 2.0 / Artisan) + Laser (Snapmaker Ray etc) - Do Not Use This Software!!! (Alpha v9 - A.K.A. v4.15.2-mcp-alpha.9)
No warranty expressed or implied. Use at your own risk.
Ensure the safety of yourself and others and property at all times, following local laws and safety requirements, use Personal Protective Equipment, and an Enclosure for the CNC.
You must always be next to the machine ready to perform an emergency stop or switch the power off.
Using the MCP Server
- Read the MCP setup guide.
- Set up the MCP server in Preferences. The seven CNC skills and server connection are also available through the new
luban-cncplugin in the Luban plugin marketplace. - Connect the machine in the Workspace page.
- Ask your agent to fetch the current machine status.
Hardware Required
- A tool setter with a touch sensor and, ideally, overtravel for tool height detection.
- A probe tool that can be mounted in the tool head.
- A USB GPIO bridge or Wi-Fi/MQTT sensor bridge for the probe and tool setter. See the setup guide for the Python virtual environment and Raspberry Pi RP2040 U2-IF example.
- Optional USB camera for live viewing and synchronized probe photographs.
What's Changed
What's Changed
- Generate copyable MCP tooling list in releases by @tyeth in #211
- Fix: Reconcile CNC measurement evidence before cutting by @tyeth in #214
- Improve USB pendant DRO visibility and safety errors by @tyeth in #233
- Feature: Run top-Z transport on the call and add probe_sequence local links by @tyeth-ai-assisted in #243
- Fix: Add adaptive probing and explicit setter datum evidence by @tyeth in #239
- Feature: Opt-in spindle telemetry for file jobs (status RPM, microphone RPM, chatter, runout) by @tyeth in #216
- Fix: Prevent blank HTTP commands from blocking jog moves by @tyeth in #234
- Docs: Reconcile UAT skill evaluations and recovery guidance by @tyeth in #236
- Test: Stub the tool-change park policy dependencies in toolDatum.test by @tyeth-ai-assisted in #244
- Feature: Accept large G-code jobs from an inbox path or chunked upload by @tyeth-ai-assisted in #245
- Feature: Store the rotary axis as a measured line with yaw and pitch by @tyeth-ai-assisted in #246
- Feature: Add enclosure light/fan tools and serve the HTTPS CA trust page by @tyeth-ai-assisted in #247
- Feature: Per-step move_z feeds, capture at a stated Z, bounded descent segments by @tyeth-ai-assisted in #248
- Feature: Add probe_approach_and_hold and refuse probes beyond the stylus reach by @tyeth-ai-assisted in #249
- Fix: Perimeter tracer T8c follow-ups - corner spans, confirm lifts, estimate by @tyeth-ai-assisted in #250
- Test: Supply gcodeIntake to the jobModalRecovery job fixture by @tyeth-ai-assisted in #252
- Fix CNC preview loading and Ubuntu window bounds by @tyeth in #255
- Fix: Reconcile uncertain file starts without replaying jobs by @tyeth in #257
- Fix: Allow native Linux decorations when fitting window bounds by @tyeth in #259
- Fix: MCP heartbeat/position for Snapmaker Ray over SACP (fixes #260) by @tyeth in #261
- Improvement: Pack the app into an asar archive by @tyeth-ai-assisted in #258
- Improvement: Bundle the Electron main process by @tyeth-ai-assisted in #262
- Improvement: Bundle electron-store into the main process by @tyeth-ai-assisted in #263
- Fix: Machine-aware motion for the Snapmaker Ray (Z-less laws, machine-scoped landmarks, $H home) by @tyeth in #264
- Feature: Add the per-machine G-code dialect table and capability gates by @tyeth in #267
- Feature: Compute the safe height over the rotary from measured geometry by @tyeth in #271
- Feature: Per-machine MCP store for travel, policies and geometry by @tyeth in #274
- Feature: Refuse CNC procedures on machines whose dialect cannot run them by @tyeth in #275
- Feature: Machine-aware G-code validation (WP3) by @tyeth in #277
- Feature: Operator-confirmed landmark review per machine by @tyeth in #279
- Feature: Motion rules section in the MCP settings by @tyeth in #281
- Feature: Emit generic motion in each machine's dialect by @tyeth in #283
- Feature: Add laser framing, air assist and crosshair tools by @tyeth in #285
- Feature: Traverse without approval at a computed safe height by @tyeth in #289
- Feature: Device identity and text-serial machine state for the MCP by @tyeth in #269
- Feature: Machine visibility and integration across MCP tools by @tyeth in #287
- Fix: Pin the Linux packaging runner to Ubuntu 24.04 by @tyeth in #298
- Fix: Make the Linux rpm build work with rpm 6 (runner stays on 24.04) by @tyeth in #303
- Feature: Scope the camera model to the machine it was solved on by @tyeth in #293
- Feature: List operator review pages on the jobs dashboard by @tyeth in #294
- Feature: Frame a staged Ray job from its work-frame extents by @tyeth in #297
- Feature: Map A350 USB positions via M1007 and expire the Original's idle home by @tyeth in #300
- Fix: Accept a work-origin change at rest instead of treating it as a frame flip by @tyeth in #302
- Fix: Ship serialport's N-API prebuild on Linux and build on ubuntu-latest by @tyeth in #304
- Fix: Report the A350 serial over SACP-TCP and disconnect on a USB unplug by @tyeth in #296
- Improvement: Bundle the remaining server dependencies by @tyeth-ai-assisted in #305
- Fix: Serve /data files through the luban protocol by @tyeth-ai-assisted in #306
- Fix: Spawn the engine binaries from long install paths on Windows by @tyeth-ai-assisted in #308
- Fix: Build Linux native addons for baseline x86-64 by @tyeth in #309
- Feature: Read firmware settings over SACP and query the Ray's GRBL configuration by @tyeth in #311
- Fix: Run the first-connect read and report the Ray's SACP reply limits by @tyeth in #313
- Fix: Treat the Ray's toolhead state as unknown and lead its motion with M5 by @tyeth in #317
- Fix: Start Ray direct jobs and link goto_work_origin's confirm page by @tyeth in #319
- Fix: Refuse Ray home and job starts while its motors are off by @tyeth in #322
- Fix: Re-check the head position before a relative-step direct job starts by @tyeth in #324
- Fix: Withdraw a direct batch that is stopped between steps by @tyeth in #325
- Feature: Switch the Ray's motor-power mode and add operator-only approval-free settings by @tyeth in #327
- Fix: Run MCP file jobs on the Ray over SACP (upload ray.nc, operator-switch start) and refuse incapable channels at staging by @tyeth in #329
Installer filenames and the app's displayed version remain 4.15.2; v4.15.2-mcp-alpha.9 identifies this prerelease. Build assets are attached automatically as each platform finishes.
Full changelog: v4.15.2-mcp-alpha.8...v4.15.2-mcp-alpha.9
MCP tools (93)
Download the copyable Markdown list.
Terse reference for the 93 MCP tools in v4.15.2-mcp-alpha.9. Start a fresh session with get_stored_state. Read the CNC skills and MCP setup guide for operating rules. Staged jobs require operator approval through the confirmation page; direct tools follow their documented guards.
Status and connection
get_machine_profile— Machine profile: build volume, per-toolhead work ranges, and kinematics (which element moves per axis).get_position— The machine POSITION OF RECORD: the judged machine-frame position with itsreliability.set_machine_policy— Store the CONNECTED machine's motion policy in its own entry of the per-machine store (other machines' entries are never touched).get_connection_status— Report whether Luban is connected to a machine.recover_machine_connection— Recover stopped HTTP heartb...
MCP Server for CNC - Do Not Use This Software!!! (Alpha v8 - A.K.A. v4.15.2-mcp-alpha.8)
No warranty expressed or implied. Use at your own risk.
Ensure the safety of yourself and others and property at all times, following local laws and safety requirements, use Personal Protective Equipment, and an Enclosure for the CNC.
You must always be next to the machine ready to perform an emergency stop or switch the power off.
Using the MCP Server
- Read the MCP setup guide.
- Set up the MCP server in Preferences. The five CNC skills and server connection are also available through the new
luban-cncplugin in the Luban plugin marketplace. - Connect the machine in the Workspace page.
- Ask your agent to fetch the current machine status.
Hardware Required
- A tool setter with a touch sensor and, ideally, overtravel for tool height detection.
- A probe tool that can be mounted in the tool head.
- A USB GPIO bridge or Wi-Fi/MQTT sensor bridge for the probe and tool setter. See the setup guide for the Python virtual environment and Raspberry Pi RP2040 U2-IF example.
- Optional USB camera for live viewing and synchronized probe photographs.
What's Changed
- GPIO startup recovery: A stalled Blinka reader can now reach its startup timeout and USB bridge reset. Recovery stops the reader before checking or resetting USB, and reconnects only after recovery completes; the runtime heartbeat guard remains active. #210
- Readable MCP health notices: Long diagnostics now scroll within the viewport, with accessible close and Dismiss controls. Dismissed incidents stay dismissed across retries. #210
- Codex plugin marketplace: The five CNC skills and Luban MCP connection are published together as the
luban-cncplugin. AnAGENTS.mdguide explains setup; the shared skill source now lives in.agents/skills, with Claude's path linked to it. #209 - CNC evaluation guidance: The rotary neck-cut assessment now compares near-axis and outboard connections using lever arm, sound stock and edge margin at the cut plane. #207
Installer filenames and the app's displayed version remain 4.15.2; v4.15.2-mcp-alpha.8 identifies this prerelease. Build assets are attached automatically as each platform finishes.
Full changelog: v4.15.2-mcp-alpha.7...v4.15.2-mcp-alpha.8
MCP tools (65)
Download the copyable Markdown list.
Terse reference for the 65 MCP tools in v4.15.2-mcp-alpha.8. Start a fresh session with get_stored_state. Read the CNC skills and MCP setup guide for operating rules. Staged jobs require operator approval through the confirmation page; direct tools follow their documented guards.
Status and connection
get_machine_profile— Machine profile: build volume, per-toolhead work ranges, and kinematics (which element moves per axis).get_position— The machine POSITION OF RECORD: the judged machine-frame position with itsreliability.get_connection_status— Report whether Luban is connected to a machine, and over which channel.recover_machine_connection— Recover stopped HTTP heartbeat polling using only the machine session already held by Luban.get_mcp_diagnostics— Timing evidence for slow or aborted procedures.
G-code jobs
validate_gcode— Statically inspect G-code: motion extents, feeds, spindle commands and warnings.submit_gcode_job— Stage a G-code job for human confirmation.start_gcode_job— Start an approved job: uploads the file to the machine through the same prepare/start path as "Start on Luban" (door interlock applies) and starts it.get_job_timing— Where a job's time went, computed from its event log.get_gcode_job_status— Report a job state, ending reason, events, results, and live machine progress.stop_gcode_job— Stop a running job.convert_thread_milling_gcode— Offline conversion of Machining Doctor thread-milling G-code to explicit Snapmaker G0/G1 moves.
Transport and direct motion
restore_work_frame— Put the controller back in the WORK workspace (G90thenG54on its own line).home— MACHINE home (G28): drives every axis to its limit switches - this is NOT the work origin; moving to work X0 Y0 is the separate goto_work_origin operation.goto_work_origin— STAGE a move to the WORK origin: one XY move to work X0 Y0 at the CURRENT Z.move_and_capture— ONE vision-driven XY reposition: Z-GATED FIRST (operator ruling 2026-09-21), then move, settle-verify, and capture a position-stamped frame.move_z— Request absolute Z motion, executed on the direct path so positions PERSIST.traverse_xy— Law-2 TRANSPORT: an absolute XY move, or an ordered series.
Camera and vision
visual_servo— Use the stored camera calibration to move toward a target pixel and capture a new frame.list_cameras— List available capture sources: the configured snapshot URL, or DirectShow video devices found by ffmpeg.capture_frame— Capture one frame from the workshop camera (configstore: mcpCameraUrl for an HTTP snapshot source, else ffmpeg with mcpCameraDevice/mcpFfmpegPath).get_frame— Return a frame that was captured earlier, by frame_id.preview_cameras— Show what each attached camera SEES, one frame per camera, so the right one can be identified before it is selected.select_camera— Choose which camera every capture uses from here on.set_tool_region— Update the expectedToolRegion that every capture reports: the fractional box where the endmill images (fixed camera-to-spindle geometry).track_feature— Template-match a patch between two cached frames.query_firmware_configuration— Read the configuration currently used by the firmware with M503 S (not necessarily EEPROM values).query_firmware_position— Ask the firmware directly for its position report (M114) and return the RAW controller response alongside the heartbeat-derived view.
Camera model
set_camera_calibration— Persist a pixel-to-machine calibration, keyed by the machine Y it was derived at (the SM2 platform travels in Y, so a mapping is only valid at that Y).get_camera_calibration— Fetch calibrations: by id, nearest to a machine Y (within tolerance), or all.delete_camera_calibration— Delete one stored calibration by id.get_camera_model— The current camera model and whether it may still be used.set_camera_model— Store a camera model solved from a bootstrap frame set (scripts/camera_bootstrap.py).plan_view_pose— Where must the TOOLHEAD go to see this machine point? Read-only.camera_bootstrap— Stage the camera pre-configuration for human approval.verify_camera_model— Check the stored camera model against a target whose machine coordinates are known, at the CURRENT toolhead position, and record the residual.
Landmarks
set_landmark— Persist a named scene landmark (tool height checker, rotary span, tool post...) with its machine-coordinate XY extent and a description.set_probe_geometry— Store the jig/tool constants a rotary probe_program may reference as the "axis" namespace.delete_landmark— Delete one stored landmark by id or name.get_stored_state— Everything already known about this machine and bed in one read-only call.
Probe feed
get_probe_feed_status— State of the external probe sensor feed (transport mqtt or gpio).connect_probe_feed— Connect (or reconnect) to the probe sensor feed using the current settings.disconnect_probe_feed— Disconnect from the probe sensor feed and stop reconnecting.clear_overtravel_alarm— Clear the latched safety alarm (overtravel OR crash - a contact sensor firing during motion that expected no contact) that is blocking all motion.
Tool setter and tool change
set_tool_setter_config— Store the tool setter reference: its centre in MACHINE coordinates, the machine Z at which a known bit triggers it, that bit's length, and the longest bit in use.get_tool_setter_config— The stored tool setter reference (centre, trigger Z, bit lengths, tool-change park position) and the last two measurements.run_tool_setter— Stage a tool height measurement against the tool setter for human confirmation.goto_tool_change_position— Stage the move to the operator-set tool-change park position.apply_tool_length_offset— After a tool change: shift the CURRENT work origin Z by the measured length difference between the last two tool setter measurements.
Touch-probe procedures
probe_point— Stage a touch-probe point measurement for human confirmation.probe_vector— Stage a touch-probe march along an ARBITRARY direction for human confirmation.probe_sequence— Stage a whole measurement CIRCUIT as ONE operator approval.probe_circle— Stage an N-point circle measurement of a roughly-round vertical feature for human confirmation.probe_surface_path— Stage a TOP-SURFACE FLATNESS scan along a straight line for human confirmation.probe_surface_grid— Stage a TOP-SURFACE HEIGHT MAP for human confirmation.survey_bed— Stage a whole-bed camera survey for human confirmation.probe_stock_outline— Stage a probe circuit to find a block top, outline, and centre from an estimated location.probe_wall_follow— Stage ONE approved procedure that follows a VERTICAL ...
MCP Server for CNC - Do Not Use This Software!!! (Alpha v7 - A.K.A. v4.15.2-mcp-alpha.7)
No warranty expressed or implied. Use at your own risk.
Ensure the safety of yourself and others and property at all times, following local laws and safety requirements, use Personal Protective Equipment, and an Enclosure for the CNC.
You must always be next to the machine ready to perform an emergency stop or switch the power off.
Using the MCP Server
- Read the MCP setup guide.
- Install the skills if desired and set up the MCP server options in Preferences.
- Connect the machine in the Workspace page.
- Ask your agent to fetch the current machine status.
Hardware Required
- A tool setter with a touch sensor and, ideally, overtravel for tool height detection.
- A probe tool that can be mounted in the tool head.
- A USB GPIO bridge or Wi-Fi/MQTT sensor bridge for the probe and tool setter. See the setup guide for the Python virtual environment and Raspberry Pi RP2040 U2-IF example.
- Optional USB camera for live viewing and synchronized probe photographs.
What's Changed
- Thread-milling import: Convert the observed Machining Doctor exports from eight controller variants into explicit Snapmaker G0/G1 paths. The offline importer retains helix direction, feeds, units, passes and source rounding, and refuses unsupported compensation or setup syntax. A new CNC thread-milling skill guides tool geometry, work origin and job review. #191
- Probe inspection: Save camera images at selected probe contacts and surface-scan stations, with position and camera metadata. Stepped shoulder recovery now checks probe transitions during rises and preserves a held abort through nested programs. #191
- Work origin and G54 checks: New human-gated workspace-origin tools and single-workspace guidance. Converted file jobs show conditional machine Z bounds and verify G54 and its offset before streaming. #192, #195
- Connection recovery and diagnostics: Recover stale machine sessions without implicit pairing, trace connection attempts across the app and server, and preserve bounded diagnostic evidence across recovery. #204
- CI and skills: Run lint, type checks and tests alongside package builds, gate MCP code on its strict type check, and update CNC skills with rotary-axis, stylus-reach and retained-connection guidance. #198, #201, #206
Installer filenames and the app's displayed version remain 4.15.2; v4.15.2-mcp-alpha.7 identifies this prerelease. Build assets are attached automatically as each platform finishes.
Full changelog: v4.15.2-mcp-alpha.6...v4.15.2-mcp-alpha.7
MCP Server for CNC - Do Not Use This Software!!! (Alpha v6 - A.K.A. v4.15.2-mcp-alpha.6)
No warranty expressed or implied. Use at your own risk.
Ensure the safety of yourself and others and property at all times, following local laws and safety requirements, use Personal Protective Equipment, and an Enclosure for the CNC.
You must always be next to the machine ready to perform an emergency stop or switch the power off.
Using the MCP Server
- See the readme document here:
https://github.com/tyeth/Luban/blob/v4.15.2-mcp-alpha.6/src/server/services/mcp/README.md - Install the skills if desired, setup the MCP server options in Preferences.
- Connect the machine in the Workspace page.
- Ask your agent to fetch the current machine status.
Hardware Required
-
A tool setter with touch sensor and overtravel (ideally) for tool height detection.
-
A Probe tool that can be mounted in the tool head.
-
Some form of GPIO to USB / WiFi (MQTT) for the detection circuitry (pick one):
- I tried an Adafruit WipperSnapper compatible board with 3 touch sensors defined, and used the MQTT server to retreive the data (slower but MCP doesn't need to be run near machine as everything over wifi).
- I used a direct USB to GPIO board to get the touch sensors into an old laptop now running Luban with MCP next to the machine.
(Needs Python venv setup -- see readme), in particular a Raspberry Pi RP2040 board running U2-IF, but any CircuitPython compatible (Adafruit Blinka compatible actually) board should work.
- Optional USB-Camera
What's changed in Alpha v6
- MCP job dashboard: browse active jobs, jobs awaiting approval, and recent job history; open the camera page and stop an active job from the dashboard.
- Browser notifications: opt in per browser tab/session on desktop or phone. HTTPS enables system notifications where supported; this is not a background Web Push service.
- HTTPS on the next port: the MCP server can serve HTTPS alongside HTTP (by default 40890 and 40889), using mkcert-generated certificates. Each client device must trust the local CA.
- Health alerts inside Luban: when MCP is enabled, startup/listener, certificate, probe connection, and camera problems appear in Luban and MCP settings.
- Setup helper: preview configuration with
python3 src/server/services/mcp/setup.pyfrom a Luban source checkout, then use--applyto configure it. Optional HTTPS and Blinka setup are documented in the MCP README. - Release builds: prereleases now trigger Windows, macOS, and Linux asset builds with built-in token fallback and the same build setup as normal CI. Missing Apple credentials no longer prevent fork packaging; macOS packages built without a Developer ID require first-launch Gatekeeper approval.
Changes: MCP dashboard, HTTPS, health alerts, and setup helper (#189), release workflow fixes (#190).
Installer filenames and the app's displayed version remain 4.15.2; v4.15.2-mcp-alpha.6 identifies this prerelease. Build assets are attached automatically as each platform finishes.
Full changelog: v4.15.2-mcp-alpha.5...v4.15.2-mcp-alpha.6
MCP Server for CNC - Do Not Use This Software!!! (Alpha v5 - A.K.A. v4.15.2-mcp-alpha.5)
No warranty expressed or implied. Use at your own risk.
Ensure the safety of yourself and others and property at all times, following local laws and safety requirements, use Personal Protective Equipment, and an Enclosure for the CNC.
You must always be next to the machine ready to perform an emergency stop or switch the power off.
Using the MCP Server
- See the readme document here:
https://github.com/tyeth/Luban/blob/v4.15.2-mcp-alpha.5/src/server/services/mcp/README.md - Install the skills if desired, setup the MCP server options in Preferences.
- Connect the machine in the Workspace page.
- Ask your agent to fetch the current machine status.
Hardware Required
-
A tool setter with touch sensor and overtravel (ideally) for tool height detection.
-
A Probe tool that can be mounted in the tool head.
-
Some form of GPIO to USB / WiFi (MQTT) for the detection circuitry (pick one):
- I tried an Adafruit WipperSnapper compatible board with 3 touch sensors defined, and used the MQTT server to retreive the data (slower but MCP doesn't need to be run near machine as everything over wifi).
- I used a direct USB to GPIO board to get the touch sensors into an old laptop now running Luban with MCP next to the machine.
(Needs Python venv setup -- see readme), in particular a Raspberry Pi RP2040 board running U2-IF, but any CircuitPython compatible (Adafruit Blinka compatible actually) board should work.
- Optional USB-Camera
What's Changed
https://photos.app.goo.gl/obg7jf591R1e2Mj8A (2x actual speed)
Wall probing inside pockets: wall-aware links, known-wall clearance checks, wall-follow and corner probing, one tip convention, and a 0.1 mm perimeter tracer for pockets of unknown shape - all hardware-tested on the QuadEink pocket 2026-09-22 (the tracer closed a 309 mm lap in 24 min).
- MCP: Refuse a station start or link inside tip radius + margin of a known wall (#169) by @tyeth in #170
- MCP: One tip convention - no radius off a -Z contact, one radius on a side (#175) by @tyeth in #176
- MCP: Probe_wall_follow - march, back off, step along the wall, march again (#171) by @tyeth in #172
- MCP: Rounded corners - probe_corner, arc fits and corner classification (#173) by @tyeth in #174
- MCP: Probe_trace_perimeter - a 0.1 mm crawl round a pocket of unknown shape (#179) by @tyeth in #180
- MCP: Perimeter trace - release-verified standoff, honest stuck-probe abort, partial results (#181, #178) by @tyeth in #182
- MCP: Perimeter trace result quality - local normals, merged walls, trimmed corner fits, irregular lobes (#183) by @tyeth in #184
Full Changelog: v4.15.2-mcp-alpha.4...v4.15.2-mcp-alpha.5
MCP Server for CNC - Do Not Use This Software!!! (Alpha v3 - A.K.A v4.15.2-mcp-alpha.4)
No warranty expressed or implied. Use at your own risk.
Ensure the safety of yourself and others and property at all times, following local laws and safety requirements, use Personal Protective Equipment, and an Enclosure for the CNC.
You must always be next to the machine ready to perform an emergency stop or switch the power off.
Using the MCP Server
- See the readme document here:
https://github.com/tyeth/Luban/blob/v4.15.2-mcp-alpha.4/src/server/services/mcp/README.md - Install the skills if desired, setup the MCP server options in Preferences.
- Connect the machine in the Workspace page.
- Ask your agent to fetch the current machine status.
Hardware Required
-
A tool setter with touch sensor and overtravel (ideally) for tool height detection.
-
A Probe tool that can be mounted in the tool head.
-
Some form of GPIO to USB / WiFi (MQTT) for the detection circuitry (pick one):
- I tried an Adafruit WipperSnapper compatible board with 3 touch sensors defined, and used the MQTT server to retreive the data (slower but MCP doesn't need to be run near machine as everything over wifi).
- I used a direct USB to GPIO board to get the touch sensors into an old laptop now running Luban with MCP next to the machine.
(Needs Python venv setup -- see readme), in particular a Raspberry Pi RP2040 board running U2-IF, but any CircuitPython compatible (Adafruit Blinka compatible actually) board should work.
- Optional USB-Camera
What's Changed
- MCP: Tool setter ends at the traverse height, not the start height by @tyeth in #92
- MCP: MJPEG camera stream for live job monitoring by @tyeth in #130
- Camera pre-configuration, clearance semantics and the motion floor by @tyeth in #133
- Probe feed: say what a dead sensor bridge means, and recover it automatically by @tyeth in #134
- Fix workspace jog steps using hidden saved values by @tyeth in #132
- Rebuild the packaged skill zips from the skills they package by @tyeth in #136
- Feature: Choose the camera by looking through it, not by editing a config key by @tyeth in #137
- Fix: A capture from a camera that is gone says which cameras are there by @tyeth in #138
- Fix: Clamp a planned band to the travel the toolhead actually has by @tyeth in #139
- Fix: Every planner clamps to the resolved travel, and says what it clipped by @tyeth in #143
- Fix: Survey_bed honours landmarks - drops what it must, lifts what it can, says so by @tyeth in #144
- Refactor: Name every planner limit once, with its reason (procedureLimits.ts) by @tyeth in #146
- Fix: Every probing move toward the work is a sensor-checked segment by @tyeth in #148
- Feature: probe_program capture and home ops - look-rotate-look is one approval by @tyeth in #151
- Fix: probe_program capture takes a viewing position; 0.05 mm tolerance on every measured-position guard by @tyeth in #152
- MCP Feature: FreeCAD-side probe program emitter for run_probing_gcode by @tyeth in #154
- Fix: rotate_b completes when the chuck stops; captures wait for idle by @tyeth in #158
- Fix: staging results carry the confirm hand-off - link first, then poll by @tyeth in #160
- Fix: Confirm page shows every move the runner will command by @tyeth in #162
- Fix: Stage goto_work_origin, Z-gate move_and_capture, and unstage home in the law by @tyeth in #164
- Fix: Re-land the motion-gating work lost to a merge race by @tyeth in #165
- MCP: Wall-aware stepped links - retreat along the path, block the station (#167) by @tyeth in #168
Full Changelog: v4.15.2-mcp-alpha.3...v4.15.2-mcp-alpha.4
MCP Server for CNC - Do Not Use This Software!!! (Alpha v3 - A.K.A. v4.15.2-mcp-alpha.3)
No warranty expressed or implied. Use at your own risk.
Ensure the safety of yourself and others and property at all times, following local laws and safety requirements, use Personal Protective Equipment, and an Enclosure for the CNC.
You must always be next to the machine ready to perform an emergency stop or switch the power off.
Using the MCP Server
- See the readme document here:
https://github.com/tyeth/Luban/blob/78aecf0578d86402c4f51d277644b23d20047073/src/server/services/mcp/README.md - Install the skills if desired, setup the MCP server options in Preferences.
- Connect the machine in the Workspace page.
- Ask your agent to fetch the current machine status.
Hardware Required
-
A tool setter with touch sensor and overtravel (ideally) for tool height detection.
-
A Probe tool that can be mounted in the tool head.
-
Some form of GPIO to USB / WiFi (MQTT) for the detection circuitry (pick one):
- I tried an Adafruit WipperSnapper compatible board with 3 touch sensors defined, and used the MQTT server to retreive the data (slower but MCP doesn't need to be run near machine as everything over wifi).
- I used a direct USB to GPIO board to get the touch sensors into an old laptop now running Luban with MCP next to the machine.
(Needs Python venv setup -- see readme), in particular a Raspberry Pi RP2040 board running U2-IF, but any CircuitPython compatible (Adafruit Blinka compatible actually) board should work.
- Optional USB-Camera
What's Changed
(abort retreat law: every aborted MCP procedure now raises straight up to the traverse height, never to a start height - after incident job fd7fa6cb6396 [See #90])
Full Changelog: v4.15.2-mcp-alpha.2...v4.15.2-mcp-alpha.3
MCP Server for CNC - Do Not Use This Software!!! (Alpha v2 - A.K.A. v4.15.2-mcp-alpha.2)
No warranty expressed or implied. Use at your own risk.
Ensure the safety of yourself and others and property at all times, following local laws and safety requirements, use Personal Protective Equipment, and an Enclosure for the CNC.
You must always be next to the machine ready to perform an emergency stop or switch the power off.
Using the MCP Server
- See the readme document here:
https://github.com/tyeth/Luban/blob/a03d3b8fe2416c47f71d4e0bdac65cfb84c5e929/src/server/services/mcp/README.md - Install the skills if desired, setup the MCP server options in Preferences.
- Connect the machine in the Workspace page.
- Ask your agent to fetch the current machine status.
Hardware Required
-
A tool setter with touch sensor and overtravel (ideally) for tool height detection.
-
A Probe tool that can be mounted in the tool head.
-
Some form of GPIO to USB / WiFi (MQTT) for the detection circuitry (pick one):
- I tried an Adafruit WipperSnapper compatible board with 3 touch sensors defined, and used the MQTT server to retreive the data (slower but MCP doesn't need to be run near machine as everything over wifi).
- I used a direct USB to GPIO board to get the touch sensors into an old laptop now running Luban with MCP next to the machine.
(Needs Python venv setup -- see readme), in particular a Raspberry Pi RP2040 board running U2-IF, but any CircuitPython compatible (Adafruit Blinka compatible actually) board should work.
- Optional USB-Camera
What's Changed
(refined skills / motion rules / mcp to avoid incident identified in proposed plan [See #89])
Full Changelog: v4.15.2-mcp-alpha.1...v4.15.2-mcp-alpha.2
MCP Server for CNC - Do Not Use This Software!!! (Alpha v1)
No warranty expressed or implied. Use at your own risk.
Ensure the safety of yourself and others and property at all times, following local laws and safety requirements, use Personal Protective Equipment, and an Enclosure for the CNC.
You must always be next to the machine ready to perform an emergency stop or switch the power off.
Using the MCP Server
See the readme document here:
https://github.com/tyeth/Luban/blob/e13e6f27b4605f7b9f6c4713517a2440d34aee62/src/server/services/mcp/README.md
Install the skills if desired, setup the MCP server options in Preferences.
Connect the machine in the Workspace page.
Ask your agent to fetch the current machine status.
Hardware Required
-
A tool setter with touch sensor and overtravel (ideally) for tool height detection.
-
A Probe tool that can be mounted in the tool head.
-
Some form of GPIO to USB / WiFi (MQTT) for the detection circuitry (pick one):
- I tried an Adafruit WipperSnapper compatible board with 3 touch sensors defined, and used the MQTT server to retreive the data (slower but MCP doesn't need to be run near machine as everything over wifi).
- I used a direct USB to GPIO board to get the touch sensors into an old laptop now running Luban with MCP next to the machine.
(Needs Python venv setup -- see readme), in particular a Raspberry Pi RP2040 board running U2-IF, but any CircuitPython compatible (Adafruit Blinka compatible actually) board should work.
- Optional USB-Camera
What's Changed
-
Improvement: machine profile from Luban Machine Settings; collate notes; H&S notice by @tyeth in #74
-
Feature: per-sensor enable switches, tolerant unplugged bridge, optional LAN access by @tyeth in #75
-
Improvement: job event log + long-poll status; even survey grid by @tyeth in #76
-
Fix: origin-offset transient aborted a verified march; procedures run detached by @tyeth in #77
-
Feature: Surface flatness scans - probe_surface_path and probe_surface_grid by @tyeth in #78
-
Fix: Console input box mirrored history (ANSI codes) once the circular buffer filled by @tyeth in #79
-
Fix: Position of record, either-frame heartbeat checks, slow zone, timing diagnostics by @tyeth in #80
-
Feature: probe_program composite survey, job timing breakdown, first-station floor by @tyeth in #81
-
Feature: New-stock survey program - derived references, jig geometry, keep-out, groups, procedure stop, stock outline by @tyeth in #82
-
Feature: CAM probing programs - run_probing_gcode translates G38 gcode, returns an inspection report by @tyeth in #83
-
Docs: Machine simulator specification - scene with provenance, collision prediction on the plan by @tyeth in #84
-
Perf: Paint the renderer before the backend handshake by @tyeth in #16
-
Perf: Load the app off disk instead of waiting for the server by @tyeth in #18
-
Perf: Bind the port before loading the heavy services by @tyeth in #19
-
Fix: Bound every outbound call so offline fails instead of hanging by @tyeth in #20
-
Perf: Make crash reporting opt-in and load the updater lazily by @tyeth in #22
-
Fix: Keep one saved token per machine (multi-machine token persistence) by @tyeth in #15
-
Feature: MCP server scaffold, flag-gated, loopback-only by @tyeth in #26
-
Feature: MCP machine profile and structured position tools by @tyeth in #28
-
Feature: MCP gcode validation and human-gated job submission by @tyeth in #29
-
Feature: MCP camera capture and bounded move_and_capture by @tyeth in #30
-
Feature: MCP persisted camera calibration and visual_servo by @tyeth in #31
-
Feature: Workspace console verbose toggle with machine state and MCP activity by @tyeth in #34
-
Feature: MCP server settings pane with live status by @tyeth in #35
-
Feature: goto_work_origin tool; home means machine home only by @tyeth in #37
-
Fix: Refuse socket.io handshakes during startup instead of parking them by @tyeth in #39
-
Improvement: Flag stale work offsets in get_position after homing by @tyeth in #40
-
Improvement: Mirror MCP gcode to console, M114 tool, Luban-style home sequence by @tyeth in #41
-
Docs: cnc-visual-alignment skill updated for the MCP tool era, kept in-repo by @tyeth in #42
-
Improvement: Timestamp verbose console lines by @tyeth in #43
-
Improvement: Warn on distance-mode hazards in gcode validation by @tyeth in #44
-
Feature: move_z - operator-confirmed direct Z move that persists by @tyeth in #45
-
Improvement: Frame-reading guidance and expected tool region on captures by @tyeth in #46
-
Improvement: Servo divergence tripwire and explicit sign convention by @tyeth in #47
-
Feature: track_feature - template matching between cached frames by @tyeth in #48
-
Improvement: Field fixes - jacobian check, tolerances, tool region, camera, batch Z by @tyeth in #49
-
Docs: MCP server README and field-report lessons in the skill by @tyeth in #54
-
Feature: Landmarks, stored-state overview, depth-plane and expectation checks by @tyeth in #55
-
Improvement: Show connecting state while the server starts by @tyeth in #56
-
Improvement: Bundle server dependencies into the production build by @tyeth in #57
-
Improvement: Make dispatch builds work on forks without signing keys by @tyeth in #58
-
Improvement: Prune packaged runtime dependencies to the unbundled set by @tyeth in #59
-
Feature: Probe sensor feed over MQTT with overtravel tripwire by @tyeth in #61
-
Feature: Tool height measurement via the tool setter and probe feed by @tyeth in #62
-
Fix: Survive a stray HSTS file occupying the userData path by @tyeth in #63
-
Feature: Tool change workflows with work-origin offset preservation by @tyeth in #64
-
Feature: Touch probe point measurement and whole-bed camera survey by @tyeth in #65
-
Fix: Motion laws after the probe crash - traverse height, obstacles, crash guard by @tyeth in #66
-
Fix: Motion tools resist misuse - required reasons, pacing guard, purpose docs by @tyeth in #67
-
Fix: File jobs reach a terminal state when the machine goes idle by @tyeth in #68
-
Feat: probe_vector + probe_circle, and the law-2 hardening they forced by @tyeth in #69
-
Fix: stale-heartbeat refusal, honest M114, probe_circle inside mode by @tyeth in #70
-
Feat: probe_sequence - a whole measurement circuit as ONE staged approval by @tyeth in #71
-
Feature: GPIO probe feed transport (Blinka/U2IF) with settings and sensor pills by @tyeth in #72
-
Fix: Linux camera capture (v4l2), Ubuntu 24.04 AppArmor launch crash, mac fork builds by @tyeth in #73
-
Feature: OAuth/DCR shim so Claude Code connects; LAN gate honoured on /mcp by @tyeth in #86
-
Docs: Terse per-tool reference for the 47-tool MCP surface by @tyeth in #87
-
Fix: Fusion probing post - probe on/off commands, G0 on B rotations, Inspect cycles by @tyeth in #88
New Contributors
Full Changelog: https://github.com/tyeth/Luban/commits/v4.15.2-mcp-alpha.1