OpenSimulator MCP Server
Click on "Deploy 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., "@OpenSimulator MCP Servershow me the current uptime and version"
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.
OpenSimulator MCP Server
An MCP (Model Context Protocol) server that allows you to control OpenSimulator via console commands. Built with FastMCP.
Features
This MCP server exposes OpenSimulator console commands as tools, including:
General Commands: version, uptime, info, logging
Region Commands: create, delete, restart, change region context
User Commands: show users, alerts, kick, teleport, login control
Object Commands: show, delete, backup objects
Archive Commands: save/load OAR and IAR files
Terrain Commands: load, save, fill, elevate, lower terrain
Script Commands: start, stop, suspend, resume scripts
Estate Commands: show, reload, set estate properties
Stats Commands: show stats, monitor, queues, connections
Module Commands: list, load, unload modules
Land Commands: show, clear parcels
Asset Commands: cache status and management
Scene Commands: rotate, scale, translate scene
HyperGrid Commands: link/unlink regions
User Account Commands: create user, reset password, set user level
Related MCP server: factorio-mcp
Prerequisites
OpenSimulator must be running with the REST console enabled. Start OpenSimulator with:
./OpenSim -console=restConfigure the REST console in
OpenSim.iniunder[Network]:[Network] ConsoleUser = "admin" ConsolePass = "password" console_port = 0 ; Uses main HTTP port (default 9000)
Installation
# Clone the repository
cd /path/to/opensim-server-mcp
# Install with pip
pip install -e .
# Or with uv
uv pip install -e .Configuration
The server is configured via environment variables:
Variable | Description | Default |
| Path to OpenSimulator installation |
|
| URL of the REST console |
|
| REST console username | (empty) |
| REST console password | (empty) |
Usage
Running the Server
# Set environment variables
export OPENSIM_PATH=~/opensimulator
export OPENSIM_CONSOLE_URL=http://127.0.0.1:9000
export OPENSIM_CONSOLE_USER=admin
export OPENSIM_CONSOLE_PASS=secret
# Run the server
opensim-mcpConfiguring with Claude Desktop
Add to your Claude Desktop configuration (~/.config/claude/claude_desktop_config.json on Linux):
{
"mcpServers": {
"opensim": {
"command": "opensim-mcp",
"env": {
"OPENSIM_PATH": "/home/user/opensimulator",
"OPENSIM_CONSOLE_URL": "http://127.0.0.1:9000",
"OPENSIM_CONSOLE_USER": "admin",
"OPENSIM_CONSOLE_PASS": "secret"
}
}
}
}Configuring with Windsurf/Cascade
Add to your MCP settings:
{
"mcpServers": {
"opensim": {
"command": "opensim-mcp",
"env": {
"OPENSIM_PATH": "/home/rjodouin/opensimulator",
"OPENSIM_CONSOLE_URL": "http://127.0.0.1:9000",
"OPENSIM_CONSOLE_USER": "admin",
"OPENSIM_CONSOLE_PASS": "secret"
}
}
}
}Available Tools (only three)
All OpenSimulator console commands are issued through three MCP tools:
get(command, args="")– for read-only/show/info queries.set(command, args="")– for mutating/config/management actions.run(command)– for any raw console command (escape hatch).
Examples by category
General Server Commands
These commands work on both simulator and ROBUST consoles.
Command | Description | Example |
| Run a command script containing console commands |
|
| Shutdown the server |
|
| Show server information (version and startup path) |
|
| Show server startup time and uptime |
|
| Show server version |
|
| Print the current console logging level |
|
| Change the console logging level (e.g., off, debug) |
|
| Get general command list or help on a specific command |
|
Debug Commands
Command | Description | Example |
| Turn on/off extra logging for HTTP request debugging |
|
| Turn on/off logging of activity in the main threadpool |
|
Simulator Commands
General
Command | Description | Example |
| Select region for subsequent commands; "root" selects all |
|
| Turn on packet debugging for viewer communications |
|
| Turn emergency debugging monitoring on/off |
|
| Set local grid coordinate to map to remote hypergrid |
|
| Link a HyperGrid region |
|
| Unlink a hypergrid region |
|
| List modules |
|
| Load a module |
|
| Unload a module |
|
| Returns statistics about the current region/simulator |
|
| Set terrain texture heights on a corner |
|
| Set terrain texture by number |
|
| Set water height simulator-wide or per region |
|
| Show all registered capabilities URLs |
|
| Show agent circuit data |
|
| Show connections data |
|
| Show all registered HTTP handlers |
|
| List hypergrid linked regions |
|
| Show module data |
|
| Show pending objects in viewer queues |
|
| Show priority queue data for each client |
|
| Show queue data for agent connections |
|
| Show persistent threads registered with the system |
|
| Show throttle data for each client connection |
|
Appearance Commands
Command | Description | Example |
| Find which avatar uses a given asset as baked texture |
|
| Request user's viewer to rebake and reupload textures |
|
| Send appearance data for avatars to other viewers |
|
| Show appearance information for avatars |
|
Archive Commands
Command | Description | Example |
| Load user inventory archive |
|
| Load OpenSimulator region archive (replaces region) |
|
| Load region data from XML format (deprecated) |
|
| Load region data from XML2 format |
|
| Save user inventory archive |
|
| Save current region to OpenSimulator archive |
|
| Save named prim to XML2 |
|
| Save prims to XML |
|
| Save prims to XML2 format |
|
Asset Commands (fcache)
Command | Description | Example |
| Deep scan and cache all assets in all scenes |
|
| Remove all assets in cache (file/memory optional) |
|
| Clear negative cache entries if enabled |
|
| Purge cached assets older than specified date |
|
| Display cache status |
|
| Do JPEG2000 decoding of an asset |
|
Config Commands
Command | Description | Example |
| Get current configuration (section/key optional) |
|
| Save current configuration to a file |
|
| Set a particular configuration value |
|
| Synonym for config get |
|
Land Commands
Command | Description | Example |
| Show all parcels on the current region |
|
| Clear all parcels on the land |
|
Map Commands
Command | Description | Example |
| Save an image of the world map |
|
| Regenerate and store map tile |
|
Object Commands
Command | Description | Example |
| Persist unsaved object changes immediately |
|
| Delete scene objects by creator UUID |
|
| Delete scene object by UUID or localID |
|
| Delete scene object by name (supports --regex) |
|
| Delete all objects outside region boundaries |
|
| Delete scene objects by owner UUID |
|
| Dump object serialization to file for debugging |
|
| Change the scale of a named prim |
|
| Force region to send all clients updates about objects |
|
| Show details of object by UUID or localID |
|
| Show details of objects by name (supports --regex) |
|
| Show details of object part by UUID or localID |
|
| Show details of object parts by name (supports --regex) |
|
Estate Commands
Command | Description | Example |
| Create a new estate |
|
| Attach a region to an estate |
|
| Rename an estate |
|
| Change estate owner (by name or UUID) |
|
| Show estate name, ID, and owner for regions |
|
| Reload estate data |
|
Region Commands
Command | Description | Example |
| Select region for subsequent commands |
|
| Create a new region |
|
| Delete a region from disk |
|
| Show region parameters (name, UUID, location, etc.) |
|
| Abort a scheduled region restart |
|
| Schedule restart with dismissable bluebox notice |
|
| Schedule restart with transient notice |
|
| Set region parameters (agent-limit, max-agent-limit) |
|
| Remove a region from the simulator |
|
| Restart all sims in this instance |
|
| Set database flags for region |
|
| Show the local regions' neighbours |
|
| Show rating data |
|
| Show region parameters |
|
| Show all regions data (names, coords, ports, estates) |
|
Region Flags: DefaultRegion, FallbackRegion, RegionOnline, NoDirectLogin, Persistent, LockedOut, NoMove, Reservation, Authenticate, Hyperlink, DefaultHGRegion
Scene Commands
Command | Description | Example |
| Turn on scene debugging |
|
| Rotate scene around 128,128 axis (0-360 degrees) |
|
| Scale all scene objects by factor (1.0 = original) |
|
| Move entire scene to new coordinate |
|
Script Commands
Command | Description | Example |
| Resume all suspended scripts (or specific script) |
|
| Show script information |
|
| Start all stopped scripts (or specific script) |
|
| Stop all running scripts (or specific script) |
|
| Suspend all running scripts (or specific script) |
|
Stats Commands
Command | Description | Example |
| Show useful statistical information for this server |
|
| Record stats periodically to a separate log file |
|
| Save a snapshot of current stats to a file |
|
| Synonym for show stats |
|
Terrain Commands
Command | Description | Example |
| Save current terrain into region's baked map |
|
| Run a specified plugin effect (or list) |
|
| Raise current heightmap by specified amount |
|
| Fill current heightmap with specified value |
|
| Flip current terrain about X or Y axis |
|
| Load terrain from file |
|
| Load terrain from section of larger file |
|
| Lower current heightmap by specified amount |
|
| Set maximum terrain height |
|
| Set minimum terrain height |
|
| Area-of-effect terraforming with optional taper |
|
| Multiply heightmap by specified value |
|
| Enable experimental terrain brushes |
|
| Rescale terrain to fit between min/max heights |
|
| Load baked map terrain into heightmap |
|
| Save current heightmap to file |
|
| Save heightmap to section of larger file |
|
| Show terrain height at given coordinate |
|
| Show heightmap info for debugging |
|
Supported formats: .r32, .f32, .ter, .raw, .jpg, .jpeg, .bmp, .png, .gif, .tif, .tiff
Tree Commands
Command | Description | Example |
| Change activity state for trees module |
|
| Freeze/unfreeze activity for a defined copse |
|
| Load a copse definition from XML file |
|
| Start planting on a copse |
|
| Reset tree update rate (milliseconds) |
|
| Reload copse definitions from in-scene trees |
|
| Remove copse definition and all its trees |
|
| Log statistics about the trees |
|
User Commands
Command | Description | Example |
| Send in-world alert to everyone |
|
| Send in-world alert to specific user |
|
| Bypass in-world permission checks |
|
| Turn on permissions debugging |
|
| Force permissions on or off |
|
| Kick a user off the simulator |
|
| Disable user entry to this simulator |
|
| Enable user entry to this simulator |
|
| Show whether logins are enabled or disabled |
|
| Show info about connected users (full for child agents) |
|
| Teleport a user to a specific destination |
|
Windlight/LightShare Commands
Command | Description | Example |
| Disable the windlight plugin |
|
| Enable the windlight plugin |
|
| Load windlight profile from database and broadcast |
|
YEngine Commands
Command | Description | Example |
| Show compiler version value |
|
| Show YEngine help |
|
| List scripts (options: -full, -max, -topcpu, -queues) |
|
| Show/set migration version value |
|
| Post event to scripts |
|
| Reset scripts (-all or by name) |
|
| Resume script processing |
|
| Suspend script processing |
|
| Enable/disable call tracing |
|
| Enable/disable verbose output |
|
ROBUST Service Commands
These commands are available on the ROBUST console (or standalone console).
Asset Service
Command | Description | Example |
| Delete an asset from the database |
|
| Dump an asset to the filesystem |
|
| Show summary information about an asset |
|
Grid Service
Command | Description | Example |
| Deregister a region manually |
|
| Set database flags for region |
|
| Show details on region at given coordinate |
|
| Show details on a region by name |
|
| Show details on all regions |
|
User Service
Command | Description | Example |
| Create a new user account |
|
| Set a new password for a user |
|
| Show account details for given user |
|
Login Service
Command | Description | Example |
| Set minimum user level allowed to login |
|
| Reset login level to default value |
|
| Set text to display during login |
|
| Set user level (god status, login permission) |
|
HyperGrid Commands
Command | Description | Example |
| Set local grid coordinate for remote hypergrid mapping |
|
| Link a HyperGrid region at specified coordinates |
|
| List all hypergrid linked regions |
|
| Unlink a hypergrid region by local name |
|
Generic / Raw Commands
Command | Description | Example |
Any command | Execute any raw console command |
|
License
MIT License
Available Tools
3 toolsgetB
Run a read-only/info/show style command.
Examples:
show version
show uptime
show regions
show users full
monitor report
| Name | Required | Description | Default |
|---|---|---|---|
| command | Yes | ||
| args | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full burden. It discloses the read-only behavioral trait, which is helpful. However, it doesn't mention authentication needs, rate limits, error handling, or output format. The examples hint at command patterns but lack full behavioral context like what 'monitor report' entails.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is appropriately sized with a clear opening statement followed by examples. Every sentence earns its place by providing essential information and practical guidance. However, the examples could be more tightly integrated with the main description for better flow.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has an output schema, the description doesn't need to explain return values. However, with no annotations, 0% schema coverage, and 2 parameters, the description is incomplete—it lacks details on parameter usage, system context, and behavioral constraints. The examples help but don't fully compensate for the gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate. It provides no explicit information about the 'command' or 'args' parameters beyond the examples. The examples imply possible values but don't explain parameter roles, formats, or constraints. This leaves significant gaps in understanding how to use the parameters effectively.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states the tool runs 'read-only/info/show style commands', which gives a general purpose but lacks specificity about what resource or system it operates on. It distinguishes from siblings 'run' and 'set' by emphasizing read-only nature, but doesn't explicitly name what it retrieves. The examples provide concrete patterns but don't define scope.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description clearly indicates this is for read-only operations through the phrase 'read-only/info/show style command', which implicitly suggests when to use it versus write operations. However, it doesn't explicitly name alternatives like 'run' or 'set' or provide exclusion criteria. The examples offer practical guidance but no explicit when-not-to-use statements.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
runA
Run any raw OpenSimulator console command. Use this for commands not covered by get/set categorization.
| Name | Required | Description | Default |
|---|---|---|---|
| command | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full burden. It states the tool runs 'raw OpenSimulator console commands,' which implies it could execute any command, including potentially destructive or administrative ones, but doesn't disclose specific behavioral traits like safety risks, permission requirements, or rate limits. The description adds minimal context beyond the basic function.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences with zero waste: the first states the purpose, and the second provides usage guidelines. It is front-loaded and appropriately sized, with every sentence earning its place by adding critical information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (running arbitrary console commands) and the presence of an output schema (which handles return values), the description is reasonably complete. It covers purpose and usage well, but lacks behavioral details like safety warnings or execution context, which are important for such a powerful tool with no annotations.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, with one parameter 'command' undocumented in the schema. The description adds meaning by specifying it's for 'raw OpenSimulator console commands,' giving context to the parameter's purpose. However, it doesn't provide details on command syntax, examples, or constraints, so it partially compensates but not fully.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the specific action ('Run any raw OpenSimulator console command') and distinguishes it from siblings by mentioning 'commands not covered by get/set categorization.' It provides a verb+resource combination that is precise and differentiates from alternatives.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly states when to use this tool ('for commands not covered by get/set categorization') and implies when not to use it (for commands covered by get/set). It directly references sibling tools 'get' and 'set' as alternatives, providing clear contextual guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
setC
Run a mutating/management command (set/change/restart/save/etc.).
Examples:
set log level debug
change region MyRegion
region restart notice "Restarting" 60
save oar region.oar
terrain load myterrain.r32
| Name | Required | Description | Default |
|---|---|---|---|
| command | Yes | ||
| args | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It mentions 'mutating/management commands' and examples like 'restart' and 'save', implying destructive or state-changing operations, but fails to detail critical aspects such as required permissions, side effects, error handling, or rate limits, which are essential for safe tool invocation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is appropriately sized and front-loaded, starting with a clear purpose statement followed by relevant examples. Each example serves to illustrate usage without redundancy, making it efficient, though the lack of explicit guidelines slightly reduces its overall effectiveness.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (mutating operations with 2 parameters, 0% schema coverage, and no annotations) but with an output schema present, the description is moderately complete. It covers the tool's purpose and provides usage examples, but lacks details on behavioral traits and parameter semantics, which are crucial for a mutation tool without annotations.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate for undocumented parameters. It lists example commands that imply 'command' and 'args' parameters (e.g., 'set log level debug' uses both), but doesn't explain their semantics, valid values, or formatting rules beyond the examples, leaving significant gaps in parameter understanding.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states the tool runs 'mutating/management commands' with examples like 'set/change/restart/save/etc.', which clarifies it performs various administrative actions. However, it doesn't explicitly distinguish this from sibling tools like 'get' (likely read-only) or 'run' (possibly execution-focused), leaving the differentiation implied rather than explicit.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives like 'get' or 'run'. It lists example commands but doesn't specify contexts, prerequisites, or exclusions, such as whether it's for system-level changes or user-specific settings, leaving the agent to infer usage from examples alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
3 tool updates
- First observed
get - First observed
run - First observed
set
TDQS
Scored across 3 tools
The three tools have clearly distinct purposes: 'get' for read-only/info/show commands, 'set' for mutating/management commands, and 'run' as a fallback for any raw console commands not covered by the other two. There is no overlap or ambiguity between them, making it easy for an agent to select the correct tool based on the intended action.
All tool names follow a simple, consistent verb pattern: 'get', 'run', and 'set'. They are short, clear, and uniformly styled without any mixing of conventions, making them predictable and easy to understand for an agent.
With only 3 tools, the server feels thin for managing an OpenSimulator console, which typically involves many commands. However, the tools are well-scoped to cover read, write, and raw command categories, making the count borderline but functional for basic operations.
The tools provide a complete surface for the domain by categorizing commands into read-only ('get'), mutating ('set'), and a catch-all ('run') for any other console commands. This covers the core workflows of OpenSimulator management, though some specific operations might require using the raw 'run' tool instead of dedicated tools.
Maintenance
Related MCP Connectors
Manage FadeHost game servers, Discord bots and VPS: console, stats, backups, logs, lifecycle.
Manage brainCloud apps, cloud code, hooks and servers; API lookups to help generate client code.
This MCP server enables users to perform scientific computations regarding linear algebra and vect…
A MCP server built for developers enabling Git based project management with project and personal…
Related MCP Servers
- AlicenseAqualityDmaintenanceEnables Minecraft server management via RCON: execute commands, list players, get server info, manage whitelist and operators.91MIT
- FlicenseAqualityDmaintenanceEnables control and inspection of a Factorio 2.0 server via RCON, with tools for administration, player management, game state queries, and Lua execution.19-
- AlicenseAqualityCmaintenanceEnables management of Minecraft servers through the MCSManager panel API, including listing instances, checking status, starting/stopping/restarting/force-stopping, sending console commands, and waiting for status changes.10MIT
- AlicenseNot gradedqualityAmaintenanceEnables 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.8MIT