beyond-mcp
Click on "Install 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., "@beyond-mcpstart the 'Intro' cue at 75% brightness"
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.
Beyond MCP
An MCP server for Pangolin BEYOND laser software. Exposes 117 tools across 20 categories covering show control, cue management, zone configuration, geometric correction, live parameter control, effects, projector alignment, safety limiters, and more — all via OSC.
Built for live production. Pairs with grandMA2 MCP, Resolume MCP, MADRIX MCP, and Companion MCP for full AI-driven show control.
Why this exists
Pangolin BEYOND is the industry-standard laser show software, but programming laser cues, adjusting zones, and tuning live parameters is entirely manual. An operator clicks through the BEYOND UI, one parameter at a time, across dozens of zones and cues.
This MCP server lets an AI assistant control BEYOND over OSC. It can trigger cues, adjust master brightness, mute zones, set BPM, control projector alignment, apply geometric corrections, manage safety limiters, and control live parameters — all from a single conversation. Combined with MA2 Agent, Resolume MCP, and Companion MCP, an AI assistant can orchestrate the entire show control stack.
Related MCP server: GMA2 MCP
Quick start
git clone https://github.com/drohi-r/beyond-mcp && cd beyond-mcp
uv sync
uv run python -m beyond_mcpMake sure BEYOND is running with OSC input enabled (configurable via BEYOND_OSC_PORT, defaults to 12000).
For remote control:
use LAN or WireGuard, not the public internet
allow UDP to
BEYOND_OSC_PORTset
BEYOND_HOSTto the remote machine and include it inBEYOND_ALLOWED_HOSTS
Live-Validated Build Notes
This repo has been exercised against a real BEYOND instance over LAN, not only mocked unit tests.
Live-confirmed tools on the validated build:
display_popupset_bpmselect_next_page/select_prev_pageselect_next_tab/select_prev_tabstart_cue_by_name/stop_cue_by_nameset_master_brightness
Build-specific notes:
load_cuesent cleanly but did not produce an obvious visible state change in the tested workspace.display_preview("main", ...)sent cleanly, butmaindid not appear to be the correct preview identifier for the validated BEYOND setup.
Full notes: docs/live-validation.md
See also:
Configuration
Variable | Default | Description |
|
| BEYOND instance IP |
|
| OSC receive port |
|
| Comma-separated allowlist for target hosts. Set |
|
| Safety preset: |
|
| Set to |
|
| Set to |
|
| MCP transport ( |
Architecture
graph TD
A["Beyond MCP Server<br/><code>beyond_mcp</code><br/>117 tools · 20 categories · safety gate"] --> B
B["OSC Client<br/>UDP fire-and-forget"] --> C
C["Pangolin BEYOND<br/>OSC input on port 12000"]
D["Safety Profiles<br/>lab · show-safe · read-only"] -.-> A
E["Preview Engine<br/>Dry-run OSC inspection"] -.-> A
F["Bundle Support<br/>Atomic multi-message delivery"] -.-> B
style A fill:#1a1a2e,stroke:#F59E0B,color:#fff
style B fill:#1a1a2e,stroke:#F59E0B,color:#fff
style C fill:#1a1a2e,stroke:#0f3460,color:#fff
style D fill:#0f3460,stroke:#0f3460,color:#fff
style E fill:#0f3460,stroke:#0f3460,color:#fff
style F fill:#0f3460,stroke:#0f3460,color:#fffSafety profiles
BEYOND_SAFETY_PROFILE gives you a sane starting point without having to remember multiple flags:
labread_only = falseconfirm_destructive = false
show-saferead_only = falseconfirm_destructive = true
read-onlyread_only = trueconfirm_destructive = true
Explicit environment flags still win if you need to override the profile:
BEYOND_SAFETY_PROFILE=show-safe \
BEYOND_CONFIRM_DESTRUCTIVE=0 \
uv run python -m beyond_mcpTools
System
Tool | What it does |
| Return current MCP server configuration and safety settings |
| Check if the BEYOND target is reachable and report resolved socket details |
| Send a raw OSC message for any address not wrapped by a named tool |
| Send multiple OSC messages as an atomic bundle |
| Preview an OSC message without sending it (dry-run inspection) |
| Preview an OSC bundle without sending it |
Master Controls
Tool | What it does |
| Set master brightness (0-100) |
| Activate blackout — disable all laser output |
| Enable laser output (undo blackout) |
| Disable laser output |
| Pause or unpause master playback |
| Pause or unpause master playback with time sync |
| Set master playback speed (0-10) |
| Stop all playback immediately |
| Stop all playback with synchronization fade |
| Stop all playback asynchronously with fade |
BPM / Beat
Tool | What it does |
| Set the BPM tempo value (1-999) |
| Adjust BPM by a delta value |
| Register a beat tap for tempo detection |
| Resynchronize beat timing |
| Set beat source to internal timer |
| Set beat source to audio input |
| Set beat source to manual tap |
Cue Mode
Tool | What it does |
| Set cue mode to Single Cue (one active cue at a time) |
| Set cue mode to One Per (one per group) |
| Set cue mode to Multi Cue (multiple simultaneous cues) |
Click Behavior
Tool | What it does |
| Set click behavior to Select mode |
| Set click behavior to Toggle mode |
| Set click behavior to Restart mode |
| Set click behavior to Flash mode |
| Set click behavior to Solo Flash mode |
| Set click behavior to Live mode |
| Set a click-scroll parameter (zoom, size, fade, vpoints, scanrate, color, anispeed, red, green, blue, alpha) |
Transitions
Tool | What it does |
| Set the transition type by index |
| Set the master transition effect index |
| Set the master transition time in seconds |
Cue / Cell Control
Tool | What it does |
| Select a cue by name |
| Start a cue by name |
| Stop a cue by name |
| Stop a specific cue immediately |
| Stop a specific cue with synchronization fade |
| Navigate cue selection downward |
| Navigate cue selection upward |
| Pause or unpause a cue |
| Restart a cue from the beginning |
| Focus on a cell by page and cue coordinates |
| Focus on a cell by linear index |
| Start the currently focused cell |
| Restart the currently focused cell |
| Stop the currently focused cell |
| Shift cell focus by direction offset |
| Move cell focus by delta X and Y |
| Deselect all active cues |
Workspace
Tool | What it does |
| Load a cue by name without starting it |
| Load a workspace by name |
Page / Tab / Category Navigation
Tool | What it does |
| Select a page by index |
| Navigate to the next page |
| Navigate to the previous page |
| Select a tab by index |
| Select a tab by name |
| Navigate to the next tab |
| Navigate to the previous tab |
| Select all content categories |
| Select a content category by index |
| Select a content category by name |
| Navigate to the next content category |
| Navigate to the previous content category |
Grid Management
Tool | What it does |
| Set the cue grid dimensions |
| Select a grid by index |
Zone Control
Tool | What it does |
| Mute a projection zone by index |
| Unmute a projection zone by index |
| Toggle mute state for a projection zone |
| Unmute all projection zones |
| Stop output on a zone with optional fade time |
| Stop output on a zone by name |
| Stop all zones assigned to a projector |
| Stop all zones of a projector by name |
| Select a projection zone |
| Select a projection zone by name |
| Unselect a projection zone |
| Unselect all projection zones |
| Toggle selection state for a projection zone |
| Store the current zone selection for later recall |
| Restore a previously stored zone selection |
| Set brightness for a specific zone (0-100) |
Live Control Parameters (Master scope)
Tool | What it does |
| Set master size X and Y (-400 to 400) |
| Set master position X and Y (-32768 to 32768) |
| Set master rotation angles X, Y, Z (-2880 to 2880) |
| Set master continuous rotation speed X, Y, Z (-1440 to 1440) |
| Set master color RGB (0-255 each) |
| Set master alpha/opacity (0-255) |
| Set master zoom (0-100) |
| Set master scan rate (10-200) |
| Set master visible points percentage (0-100) |
| Set master color slider (0-255) |
| Set master animation speed (0-400) |
Live Control: Effects (Master scope)
Tool | What it does |
| Set an effect on a master FX slot (slot 1-4, effect_index -1..47) |
| Set the action/intensity of a master FX slot (slot 1-4, value 0-100) |
Projector Control
Tool | What it does |
| Set projector output size X and Y (-100 to 100) |
| Set projector output position X and Y (-100 to 100) |
| Toggle projector X/Y axis swap |
| Toggle projector X-axis inversion |
| Toggle projector Y-axis inversion |
Zone Setup / Geometric Correction
Tool | What it does |
| Select a zone for geometric setup |
| Navigate to the next zone in setup |
| Navigate to the previous zone in setup |
| Select a geometric parameter by index for editing |
| Navigate to the next geometric parameter |
| Navigate to the previous geometric parameter |
| Set a zone geometric correction parameter (xsize, ysize, xposition, yposition, zrotation, keystone, pincussion, bow, shear, and more) |
Safety Limiter
Tool | What it does |
| Set a safety limiter (profile, per_zone, per_grid, flash, hold, beam, dmx, show) |
Display
Tool | What it does |
| Display a popup message in BEYOND |
| Show or hide a named preview window |
DMX / Channel Output
Tool | What it does |
| Send a value to a BEYOND output channel |
Control Scope
Tool | What it does |
| Set the live control target scope (master, cue, zone, track, projector, smart) |
Virtual LJ
Tool | What it does |
| Enable or disable Virtual LJ mode |
| Trigger a Virtual LJ effect |
Claude Desktop
{
"mcpServers": {
"beyond": {
"command": "uv",
"args": ["run", "--directory", "/path/to/beyond-mcp", "python", "-m", "beyond_mcp"],
"env": {
"BEYOND_HOST": "127.0.0.1",
"BEYOND_OSC_PORT": "12000"
}
}
}
}VS Code / Cursor
{
"servers": {
"beyond": {
"command": "uv",
"args": ["run", "--directory", "/path/to/beyond-mcp", "python", "-m", "beyond_mcp"],
"env": {
"BEYOND_HOST": "127.0.0.1",
"BEYOND_OSC_PORT": "12000"
}
}
}
}More examples, including LAN-targeted setups: docs/mcp-config-examples.md
Codex
Create a codex.json MCP config file:
{
"mcpServers": {
"beyond": {
"command": "uv",
"args": ["run", "--directory", "/path/to/beyond-mcp", "python", "-m", "beyond_mcp"],
"env": {
"BEYOND_HOST": "127.0.0.1",
"BEYOND_OSC_PORT": "12000"
}
}
}
}Then run Codex with:
codex --mcp-config codex.jsonProduction safety
This server is designed for live show environments where accidental commands can disrupt a running laser show. All 117 tools include full parameter validation.
UDP fire-and-forget -- BEYOND OSC control uses UDP, meaning commands are sent without acknowledgement. There is no rollback. Every tool call is a real action on the laser system.
Host allowlisting -- only
127.0.0.1,localhost, and::1are permitted by default. Add LAN hosts explicitly viaBEYOND_ALLOWED_HOSTS. Set*to allow any host.Read-only mode -- set
BEYOND_READ_ONLY=1to block all write operations. Onlyget_server_config,health_check,preview_osc, andpreview_osc_bundleremain available.Confirm-destructive gating -- set
BEYOND_CONFIRM_DESTRUCTIVE=1to requireconfirm=trueon destructive operations, including raw/bundle sends of destructive OSC addresses and disruptive named tools likeload_workspace,stop_zone, andstop_projector_by_name.Health check --
health_checkverifies BEYOND target reachability via DNS resolution and UDP socket test and reports the resolved address family/socket target.OSC bundle support --
send_osc_bundlesends multiple OSC messages as an atomic bundle, ensuring all-or-nothing delivery for coordinated multi-parameter changes.Preview before send --
preview_oscandpreview_osc_bundlereturn the exact packet details without transmitting anything. Use them before high-risk live operations.Input validation -- all 117 tools with documented parameter ranges enforce bounds before any OSC message is built. Brightness, zoom, scan rate, size, position, rotation, color, BPM, speed, fade times, effect slots, limiter types, geometric correction parameters, and non-negative indexes are all range-checked. Invalid inputs return structured JSON errors, never raw exceptions.
Error isolation -- all tools are wrapped in
_handle_errors. OSC send failures, JSON parse errors, validation failures, and unexpected exceptions return{"ok": false, "error": "...", "blocked": true}instead of crashing the MCP session.Transport validation -- only
stdio,sse, andstreamable-httptransports are accepted. Invalid transport values raise immediately at startup.Port validation --
BEYOND_OSC_PORTis validated as an integer in the 1-65535 range at config load time.Raw escape hatch --
send_osc_rawallows any OSC address for coverage beyond the named tools, but requires explicit JSON array input and validates structure before sending.
Suggested Operator Flow
For first use on a new BEYOND machine:
get_server_confighealth_checkdisplay_popupset_bpmpage/tab navigation
non-critical cue start/stop
live parameter tests like master brightness
More practical sequences: docs/operator-workflows.md
Development
uv sync
uv run python -m pytest -vLicense
This server cannot be installed
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Latest Blog Posts
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/drohi-r/beyond-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server