Skip to main content
Glama

Firestorm MCP

Let AI agents inspect exports, operate mesh previews and capture evidence in the Firestorm viewer for Second Life.

Download · Install · Tools · Agent guide · Contribute

0.3.0a3 · Alpha · MIT

Firestorm MCP connects your agent to an installed Firestorm viewer through its LEAP interface. It runs locally beside the viewer and works with MCP hosts that support stdio servers.

Built mostly by AI coding agents, under human direction. People and AI agents are welcome to contribute.

Download

Download the setup ZIP — includes the installer, source, guides and tests.

Python wheel · Checksums · Release notes

Optional: mesh-preview agent skill. It teaches the importer workflow; install the MCP separately. Skill setup.

Downloads are on GitHub Releases. The project is not yet on PyPI or the MCP Registry.

Related MCP server: Blender-Mind-MCP

Install

  1. Install Python 3.11–3.14 and a compatible Firestorm viewer. Live control requires both on the same desktop and user account.

  2. Extract the setup ZIP into a permanent, user-writable folder.

  3. Run Install.cmd on Windows or sh Install.sh in a terminal on Linux/macOS. The installer creates its own Python environment and prints your MCP configuration.

  4. Add the printed entry to your agent's MCP settings. Use the configuration generator for Codex or VS Code. Keep your other server entries.

  5. Run Start-FirestormMCP.cmd or sh Start-FirestormMCP.sh, sign in, then run the matching Check-FirestormMCP script.

The launcher leaves an already-running viewer alone. Close it normally when convenient, then start through the launcher: LEAP connects at viewer startup.

Custom paths, diagnostics and upgrades.

Platforms

System

Current support

Windows x64

Live viewer workflow tested. Automated package tests cover Python 3.11–3.14.

Linux x64

Package tests pass. Viewer launch is experimental; select files manually.

macOS Intel / Apple Silicon

Package tests pass on both architectures. Viewer launch is experimental; select files manually.

Linux ARM64 / Raspberry Pi

Ubuntu ARM64 package tests pass. Pi hardware, Raspberry Pi OS and a compatible Firestorm viewer are unverified.

Headless / remote systems

Offline file tools may work. Remote viewer control is not implemented.

Automated tests use simulated viewers. They do not certify live desktop control. Platform details.

What it can do

Area

Capabilities

Export inspection

Read COLLADA, glTF, GLB and image metadata, hashes, dimensions and references.

Mesh previews

Open Local Mesh or the model importer; inspect LODs, physics, warnings, dimensions and displayed fees; adjust the preview camera.

Viewer UI

Find and inspect controls, click registered buttons, enter text, send targeted keys and invoke menus. Windows supports recognized native file pickers.

Camera and images

Set the world camera, capture images and orbit views, save manifests and compare pixels.

Avatar and scene

Read position, start/poll/stop walking, query nearby objects and search an inventory folder.

Settings and events

Read/change viewer settings, subscribe to events and coordinate agents through control leases.

Live viewer APIs

Discover additional operations, including teleport, appearance, gestures and chat, through viewer_call.

The server has 43 workflow tools. A signed-in Firestorm 7.2.4.80712 exposed 94 further operations across 18 APIs. Availability varies by viewer and login state; discovery is not test coverage.

Generated configuration uses the compact profile: 43 listed tools, with discovered operations available through viewer_call. The all profile also lists those operations individually after refresh. Both profiles have the same authority.

Tool reference · Input schemas · MCP compatibility

For agents

  1. Check connection_status, including platform support and the control owner. Refresh live capabilities with capabilities_refresh.

  2. Inspect unfamiliar operations with viewer_api_inspect. For mesh work, read the preview skill.

  3. Acquire a bounded control lease and keep the same MCP session. An existing preview may belong to someone else; establish permission before opening, focusing or replacing it.

  4. Use scoped UI queries, verify state after input and inspect captured images. Distinguish source metadata, local preview and simulator results.

  5. Restore temporary settings where supported and release your lease in cleanup. Preserve the user's requested final state.

Agent guide and SDK example.

Known limits

  • Viewer behavior varies. Some combos require selection followed by commit; some checkboxes require a targeted key. The agent guide records the tested procedures.

  • Preview evidence has limits. Filenames do not prove loaded file bytes, displayed fees may be stale, and a nonblank image may show the wrong subject. Upload and simulator behavior need separate verification.

  • Controls are incomplete. No one-call multi-file import, full object/face/material or script lifecycle suite, exact camera restoration, or Unicode text-entry fallback is provided.

  • Control is cooperative. Leases do not block human input. Cancelling an MCP request does not undo an action already sent to the viewer.

  • Consequential actions need authority. Uploads, spending, chat and inventory/world changes require the user's permission. Generic tools do not enforce a universal no-spend policy. Local Mesh's Rez Selected creates simulator objects.

Tested scope

The suite has 85 tests, with eight CI jobs covering Windows, Linux x64/ARM64 and macOS Intel/ARM64. Checks include fresh installs, MCP protocol behavior and the official Inspector.

Live evidence comes from the Windows 0.3.0a1 workflow: explicit LOD/physics imports, control readback, preview zoom/orbit, captures and cleanup. The public release does not add live platform acceptance. Verification record.

Contribute

Help improve installation, platform support, viewer tools or agent workflows. Open an issue with a small reproducible example, or use Discussions for questions and ideas.

Read CONTRIBUTING.md and AGENTS.md before a pull request. Keep credentials, private captures and product assets out of contributions.

Pull requests must pass CI and security checks. For private vulnerability reports and security boundaries, see SECURITY.md.

This independent project uses the MIT licence. Firestorm and other dependencies keep their own licences; see THIRD_PARTY.md.

Available Tools

43 tools
asset_inspectA
Read-only

Inspect a local COLLADA/glTF/GLB/texture export and record its SHA256. This checks file metadata, not upload eligibility, LOD quality, land impact or in-world appearance.

Inputs: filename (required).

avatar_movement_statusB
Read-only

Read autopilot progress and current avatar position.

Inputs: no named parameters.

avatar_positionA
Read-only

Read avatar position/orientation from the viewer.

Inputs: no named parameters.

avatar_stopB
Destructive

Cancel automatic movement and read its resulting state.

Inputs: no named parameters.

avatar_walk_toA
Destructive

Start walking to GLOBAL coordinates. Poll avatar_movement_status and verify position; this is not pathfinding success.

Inputs: global_position (required), allow_flying, stop_distance.

camera_releaseA
Destructive

Release scripted camera control. This returns to viewer camera behavior, not an exact saved manual camera pose.

Inputs: no named parameters.

camera_setB
Destructive

Set a fixed camera and focus in REGION coordinates. Viewport capture is needed to verify composition.

Inputs: focus (required), position (required).

capabilities_refreshA
Read-only

Discover all APIs and operations exposed by this running viewer; refresh dynamic MCP tool discovery.

Inputs: no named parameters.

capture_manifest_readC
Read-only

Read a saved capture manifest created by this server.

Inputs: filename (required).

capture_orbitC
Destructive

Capture repeatable orbit views around a REGION-coordinate focus and save a manifest. Releases scripted camera in finally. Caller must identify whether the subject is local preview or a server asset.

Inputs: focus (required), label, views, radius, +3 more.

connection_statusA
Read-only

Check whether the local Firestorm LEAP helper is connected. Does not log in or change the viewer.

Inputs: no named parameters.

control_acquireB
Destructive

Acquire a workflow control lease. Other clients can still read status/events. Renew before expiry and release in finally; human input remains possible.

Inputs: label, seconds.

control_releaseA
Destructive

Release this client's exclusive control lease.

Inputs: no named parameters.

events_readA
Read-only

Read subscribed viewer events after a cursor. The dropped flag identifies buffer overflow; do not infer missing events.

Inputs: after.

events_subscribeB
Destructive

Subscribe to a named viewer event stream, such as StartupState or LLAutopilot. Events are bounded and remain local until read.

Inputs: source (required).

events_unsubscribeC
Destructive

Stop subscribing to a viewer event stream.

Inputs: source (required).

floater_listA
Read-only

List registered viewer floaters and their XUI files.

Inputs: no named parameters.

floater_openC
Destructive

Open a registered viewer floater and check its visibility.

Inputs: name (required).

image_compareA
Destructive

Compare two same-size images and save an absolute-difference PNG. Metrics do not establish semantic or material correctness.

Inputs: observed (required), reference (required).

local_mesh_auto_reloadC
Destructive

Set local mesh automatic reload so Blender exports can refresh in the viewer. Returns the previous settings for restoration.

Inputs: enabled (required), seconds.

local_mesh_openA
Destructive

Open Firestorm's Local Mesh panel. Its local replacements are visible only in this viewer and do not prove server upload.

Inputs: no named parameters.

local_mesh_statusA
Read-only

Read Local Mesh's selected item/object and displayed import log. This is local preview evidence, not a simulator upload.

Inputs: no named parameters.

mesh_preview_cameraA
Destructive

Drag the mesh uploader's preview camera; world camera stays unchanged. Fractions are bounded to -0.45..0.45 of the inspected rectangle. Positive vertical zooms in; zoom needs horizontal=0. Capture to verify. No exact pose readback or restoration.

Inputs: mode, vertical, horizontal.

mesh_upload_openA
Destructive

Open the standard mesh upload preview workflow. Does not submit an upload or authorize an upload fee.

Inputs: no named parameters.

mesh_upload_statusA
Read-only

Read importer LOD files/counts, physics, dimensions, warnings, weights, displayed fee and visibility. Does not calculate or upload. Readback is non-atomic; quote freshness and file bytes remain unverified.

Inputs: no named parameters.

native_file_chooseB
Destructive

Select a file in a freshly discovered Windows Firestorm Open dialog. Checks ownership and filename; verify import afterward. Confirm which workflow opened it. Other platforms need manual selection.

Inputs: filename (required), dialog_id (required).

native_file_dialogsA
Read-only

List recognized Windows Open-file dialogs owned by this Firestorm installation. English common dialogs only; unsupported layouts require manual selection.

Inputs: no named parameters.

setting_getC
Read-only

Read a named viewer setting; default group is Global.

Inputs: key (required), group.

setting_setB
Destructive

Change a viewer setting and return before/after readback. Some settings persist across restarts.

Inputs: key (required), value (required), group.

snapshotB
Read-only

Capture Firestorm's rendered image and return an MCP image plus saved PNG and hash. Render evidence alone does not prove upload or visibility to others.

Inputs: label, layer, width, height, +2 more.

ui_clickB
Destructive

Click a visible, enabled control. A registered floater invokes a unique button callback; otherwise uses coordinates. observe_path returns before/after state. Verify the effect from readback.

Inputs: path (required), button, floater, observe_path.

ui_findB
Read-only

Search paths or basenames, case-insensitively, within a narrow under path. max_depth=1 includes root and children. Follow next_offset for more results; each page still enumerates the requested subtree.

Inputs: query (required), limit, match, under, +4 more.

ui_get_valueA
Read-only

Read the value of a specific discovered UI control. Use targeted paths to avoid unrelated chat or private fields.

Inputs: path (required).

ui_inspectA
Read-only

Read a known UI path's geometry and enabled/visible state without opening or focusing it. Discover children with scoped ui_find.

Inputs: path.

ui_invoke_menuA
Destructive

Invoke an actual menu entry from installed XUI by exact name; unknown callback names are never dispatched. This may open a native file picker.

Inputs: name (required).

ui_list_menusA
Read-only

List viewer menu entries from this installation's XUI, filter by name/label/function. These describe menus, not guaranteed enabled actions.

Inputs: query.

ui_press_keyB
Destructive

Focus a required visible, enabled path, press/release a key and read back state. Modifiers: CTL/ALT/SHIFT/MAC_CONTROL. Enter can commit forms. Human input and shortcuts can interfere; verify the result.

Inputs: path (required), keysym (required), modifiers, observe_path.

ui_selectA
Destructive

Select a visible enabled combobox item by actual value, when supported by the viewer, and compare selected-value readback. Older viewers require path-targeted ui_press_key with readback.

Inputs: path (required), value (required).

ui_set_textB
Destructive

Replace text in a discovered edit control using viewer input, then read back its value. Does not press Enter.

Inputs: path (required), text (required).

viewer_api_inspectA
Read-only

Read the live description and required arguments for an API or operation. Discover before calling unfamiliar operations.

Inputs: api (required), operation.

viewer_callB
Destructive

Invoke any discovered viewer API operation. arguments can contain typed LLSD values: {$uuid: string}, {$uri: string}, {$binary_base64: string}. Read state after writes; timeouts must not be blindly retried.

Inputs: api (required), operation (required), timeout, arguments, +1 more.

world_objectsB
Read-only

List nearby objects as reported by the viewer. Availability depends on simulator interest and viewer loading.

Inputs: distance.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

Loading tool schema changelog…

    TDQS

    B3.3/5.0

    Scored across 43 tools

    Disambiguation4/5

    The descriptions are unusually careful about boundaries (e.g. local_mesh_status explicitly disclaims being a server upload, ui_get_value vs ui_inspect separate value/geometry reads). Still, the 9-tool ui_* group and the camera/snapshot/capture cluster have meaningful surface overlap where an agent could plausibly pick the wrong tool.

    Naming Consistency4/5

    Everything is consistent snake_case grouped by subsystem (ui_*, events_*, camera_*, avatar_*, local_mesh_*). The only quirk is mixed ordering within groups (camera_set vs asset_inspect), but it remains predictable and readable.

    Tool Count3/5

    43 tools is heavy even for a complex viewer-automation server; the ui_*, capture, and control/event groups in particular could be consolidated. The breadth is partly justified by the genuinely multi-subsystem domain, but the surface is large enough to feel unwieldy.

    Completeness4/5

    Coverage spans camera, avatar movement, UI interaction, events, settings, mesh import, inventory, native dialogs, and snapshots, with viewer_call/viewer_api_inspect acting as a catch-all for undiscovered operations. Minor gaps exist (no chat/IM or teleport/login lifecycle tools), but core workflows are covered.

    Maintenance

    ActivityStale
    ResponsivenessNo recent community issues

    Related MCP Connectors

    Related MCP Servers

    • A
      license
      A
      quality
      D
      maintenance
      Enables AI agents to control and manipulate live 3D scenes across frameworks like Three.js, A-Frame, and Babylon.js using a comprehensive set of object and environment tools. It features an integrated in-world chat system that allows for real-time scene modifications directly from within the 3D canvas.
      33
      15 npm
      3
      MIT
    • A
      license
      A
      quality
      D
      maintenance
      Enables AI-driven 3D modeling in Blender by providing tools to create primitives, apply modifiers and materials, set up lighting and cameras, capture viewport snapshots, export assets, inspect scenes, and execute Python commands via natural language.
      10
      MIT
    • A
      license
      Not graded
      quality
      B
      maintenance
      Enables natural language control of the Resonite social VR platform, allowing users to command worlds, customize avatars, inspect sessions, spawn inventory assets, and monitor telemetry through AI chat assistants.
      10
      MIT
    • A
      license
      A
      quality
      B
      maintenance
      Gives LLM agents spatial awareness inside Autodesk Maya, enabling scene inspection and measurement, aesthetic and engineering audits, camera planning, checkpoint/rollback safety, asset import, and viewport or render previews. Agents can also execute arbitrary Python in Maya to build and verify 3D scenes against engineering rules instead of writing blind.
      25
      76 PyPI
      5
      MIT