Going on vacation until August 29.
MikoStorm is a fork of the Firestorm Viewer for Second Life. The client codebase has been open source since 2007 and is available under the LGPL license.
This repository is not released by SecondLife or Firestorm!
MikoStorm aims to provide a viewer with many missing or unique features that enhance the Second Life experience. Anyone looking for a viewer with illegal features must look elsewhere — this is not the place for it.
This project is a one man show! So be patient
We develop on Linux because it offers a much better and much friendlier build environment. Compiling on Windows is a big hassle and needs many adjustments, so there will be fewer Windows builds than Linux builds. See Building on Windows and Building on Linux for details.
application in progress secondlife/third-party-viewers#12
See CHANGELOG.md for the full release history. The current version is 1.16.36.
There is and never will be a 32bit version
You can post them here on github or send me a mail. Email is in my profile here on github.
- Experimental Features — How to use all experimental features
- Camera Timeline — Record and playback camera movements
This viewer contains experimental features like
- a slider for Animationspeed
- Set individual IM sounds for your contacts
- photogrammetry tool for our fellow 3D Scanners an 3D Printers (i.e. to use with 3DF Zephyr Meshlab
- multiuser Posing system for photographers (Yes it has an IM request if someone wants to be posed)
- Voicebox TTS A tool to connect to an external voicebox server on your system, to read messages aloud.
- A unique color scheme
- New render pipeline from Ayastorm which gives you alot more advantages over the original
- LL-style Chat Window — Ported Linden Lab chat UI with mini profile icons and range filtering
- Three chat window styles: FS V1 (plain text), FS V7 (modern headers), LL Style
- Mini profile icons next to speaker names in nearby chat
- Range filtering: only shows speakers within your say range
- Flash effect for new IMs in conversation list
- Human/System & Object tab split for chat history
- Configurable via Preferences > Chat > Chat Window Style (requires restart)
- 3D Stream forked from Ayastorm which lets you stream music from prims.
- Script bulk upload — Specially made for scripters who want to upload their script repositories to SL.
- 3D Stream Audio — Positional streaming audio from prims with multi-speaker / 5.1ch support
- Set a prim's Description field to
[3dstream:{url:http://example.com/stream.mp3}] - Range:
[3dstream:{url:...}{range:30}](default 20m) - Distributed Stereo (multiple Speakers in Linkset)
- Optional Parameters:
binaural:on|off,venue:NAME,upmix:on|off,volume:0.8 - Activate: Preferences > Sound >
3D Stream Enabled
- Set a prim's Description field to
- 3D Stream Metadata Notifications — Display title/artist metadata from 3D streams
- Toast notifications when stream metadata changes (configurable)
- Optional script channel output for custom integrations
- Settings: Stream3DShowToast, Stream3DChatNotify, Stream3DChatChannel
- 3D Stream Preferences — Configure 3D stream behavior in Preferences > Sound > 3D Stream
- Scan linked child prims for stream tags (
Stream3DDescriptionScan) — Scan child prims for distributed-stereo speaker layouts - Scan avatar attachments for stream tags (
Stream3DScanAttachments) — Also scan worn objects and HUDs for stream tags (default: off) - Max concurrent streams (
Stream3DMaxConcurrent) — Limit simultaneous 3D streams (default: 4, 0 = unlimited)
- Scan linked child prims for stream tags (
- URL Phishing / Scam Link Detection — Warns before opening suspicious URLs
- Hide Local Chat — Toggle to hide chat in quick preferences
- MCP Server — Model Context Protocol for AI assistants (see MCP Documentation)
- Camera Timeline — Record and playback camera movements for machinima and photography
- Capture camera position, rotation, FOV as keyframes at any point on the timeline
- Smooth step interpolation between keyframes for natural camera motion
- Adjustable playback speed (0.25x–4x) and total duration (up to 600s)
- Scrub the timeline to preview camera positions at any time
- Select and delete individual keyframes to fine-tune your camera path
- Save/Load camera timelines as XML files for reuse and sharing
- Reset camera to previous position after playback stops
- HQ Depth of Field — High-quality circular bokeh DoF with foreground blur and chromatic aberration
- Shadow Softness — Adjustable PCF shadow sample tap radius
- 3D Color Grading LUT — Load .cube LUT files for cinematic color grading
- HDR Tonemapping — ACES and Khronos Neutral tonemapping operators
- CAS Sharpening — Contrast Adaptive Sharpening
- PBR Materials — Full GLTF/PBR material support with 16 shader variants
- AVX2 optimization
- FMOD audio
- 3D Stream (Ayastorm)
- OpenSim support
- MCP (Model Context Protocol)
MikoStorm includes a built-in MCP server that allows AI assistants like Claude Desktop, Cursor, and other MCP-compatible clients to interact with Second Life.
The MCP server implements the Model Context Protocol specification using JSON-RPC 2.0 over HTTP. It runs on localhost only and is disabled by default.
Enable the MCP server in Preferences > Network & Files > MCP Server:
| Setting | Description |
|---|---|
MCPEnabled |
Enable/disable the MCP server (default: false) |
MCPPort |
Port number (default: 13231) |
MCPAuthToken |
Optional Bearer token for authentication |
http://localhost:13231/mcp
| Tool | Description | Parameters |
|---|---|---|
chat_say |
Send a message in local chat | message (required), channel (optional, default: 0) |
chat_shout |
Send a shout in local chat (up to 100m range) | message (required), channel (optional, default: 0) |
chat_im |
Send an instant message to another avatar | target (UUID or name, required), message (required) |
| Tool | Description | Parameters |
|---|---|---|
avatar_sit |
Sit down on the ground or nearby object | None |
avatar_stand |
Stand up from sitting position | None |
avatar_walk_to |
Walk to a specific position in the current region | x, y, z (required) |
avatar_teleport |
Teleport to a location in any region | region, x, y, z (required) |
avatar_fly |
Enable or disable flying | enabled (required, boolean) |
| Tool | Description | Parameters |
|---|---|---|
get_position |
Get current avatar position, region, and rotation | None |
get_region_info |
Get information about the current region | None |
get_nearby_agents |
List nearby avatars with positions and distances | None |
get_nearby_objects |
List nearby objects with positions and distances | max_results, include_attachments (optional) |
get_parcel_info |
Get information about the current parcel | None |
get_self_info |
Get own avatar name, group, and state | None |
| Tool | Description | Parameters |
|---|---|---|
notecard_write |
Create a new notecard in your inventory | name, content (required) |
inventory_list |
List inventory folders and items at the root level | None |
inventory_search |
Search inventory folders and items by name | query (required), folder, type, max_results (optional) |
attachment_list |
List currently worn attachments | None |
Resources provide read-only access to viewer state:
| URI | Description |
|---|---|
mikostorm://position |
Current avatar position and region |
mikostorm://region |
Current region information |
mikostorm://nearby |
List of nearby avatars |
mikostorm://attachments |
Currently worn attachments |
mikostorm://parcel |
Current parcel information |
mikostorm://inventory |
Root-level inventory listing |
{
"mcpServers": {
"mikostorm": {
"command": "curl",
"args": ["-X", "POST", "-H", "Content-Type: application/json", "-d", "@-", "http://localhost:13231/mcp"]
}
}
}{
"mcpServers": {
"mikostorm": {
"url": "http://localhost:13231/mcp"
}
}
}{
"mcpServers": {
"mikostorm": {
"url": "http://localhost:13231/mcp",
"headers": {
"Authorization": "Bearer YOUR_TOKEN_HERE"
}
}
}
}The server supports the following JSON-RPC methods:
| Method | Description |
|---|---|
initialize |
Initialize the MCP session |
ping |
Health check |
tools/list |
List all available tools |
tools/call |
Call a specific tool |
resources/list |
List all available resources |
resources/read |
Read a specific resource |
notifications/initialized |
Notify that client is initialized |
curl -X POST http://localhost:13231/mcp \
-H "Content-Type: application/json" \
-d '{"jsonrpc":"2.0","id":1,"method":"tools/list"}'curl -X POST http://localhost:13231/mcp \
-H "Content-Type: application/json" \
-d '{"jsonrpc":"2.0","id":2,"method":"tools/call","params":{"name":"chat_say","arguments":{"message":"Hello from AI!"}}}'curl -X POST http://localhost:13231/mcp \
-H "Content-Type: application/json" \
-d '{"jsonrpc":"2.0","id":3,"method":"tools/call","params":{"name":"get_position"}}'curl -X POST http://localhost:13231/mcp \
-H "Content-Type: application/json" \
-d '{"jsonrpc":"2.0","id":4,"method":"tools/call","params":{"name":"avatar_teleport","arguments":{"region":"Ahern","x":128,"y":128,"z":25}}}'- The server binds to
localhostonly (127.0.0.1) - No external network access
- Optional Bearer token authentication
- All tool calls are executed on the main thread with proper synchronization
Record and play back camera movements for machinima and photography. Capture your camera's position, rotation, and field of view as keyframes, then play them back with smooth interpolated motion.
Click the Camera Timeline icon in the toolbar (Toybox). The floater appears as a bar above the bottom toolbar.
- Position your camera where you want the first keyframe
- Click Capture Camera to record the keyframe
- Move your camera to the next position and capture again
- Click Play to watch the playback (minimum 2 keyframes required)
- Use Save/Load to store timelines as XML files for reuse
| Control | Description |
|---|---|
| Capture Camera | Records current camera position, rotation, and FOV as a keyframe |
| Play | Starts timeline playback (requires 2+ keyframes) |
| Stop | Stops playback and restores camera to its pre-playback state |
| Duration | Total timeline length in seconds (0.5–600s, default: 30s) |
| Speed | Playback speed multiplier (0.25x–4.0x, default: 1.0x) |
| Timeline Slider | Scrub through the timeline to preview camera positions |
| Keyframes >> | Expands the keyframe management panel |
Expand the panel to view and manage your keyframes:
- Keyframe list — Shows index, time (seconds), position (x,y,z), and FOV for each keyframe
- Delete — Remove the selected keyframe
- Clear All — Remove all keyframes
- Save — Export timeline to a
.camera_timeline.xmlfile - Load — Import a previously saved timeline
Camera motion uses smooth step easing (3t² - 2t³) for natural acceleration and deceleration at each keyframe boundary. Position uses linear interpolation, rotation uses spherical linear interpolation (SLERP), and FOV is linearly interpolated.
- Capture keyframes at regular intervals for smoother, more predictable motion
- Use the timeline slider to preview the interpolated position at any point before playing
- Save your timelines to share with other MikoStorm users
- The camera always restores to its original position when playback stops
This project is licensed under the LGPL-2.1-only license. See LICENSE for details.
