Skip to main content
Glama

Server Configuration

Describes the environment variables required to run the server.

NameRequiredDescriptionDefault
O3DE_EDITOR_HOSTNoEditor remote console host. Default: 127.0.0.1
O3DE_EDITOR_PORTNoEditor remote console port. Default: 4600
O3DE_ENGINE_NAMENoSelect engine by name when multiple are registered. Default: First valid engine
O3DE_ENGINE_PATHNoOverride automatic engine discovery. Default: Auto-detected from manifest
O3DE_BUILD_TIMEOUTNoCMake build timeout (seconds). Default: 1800
O3DE_EDITOR_TIMEOUTNoEditor command timeout (seconds). Default: 10
O3DE_EXPORT_TIMEOUTNoProject export timeout (seconds). Default: 3600
O3DE_CMAKE_GENERATORNoCMake generator for builds. Default: Auto-detected per platform
O3DE_CONFIGURE_TIMEOUTNoCMake configure timeout (seconds). Default: 600

Instructions

Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.

This server publishes no instructions, or was last inspected before Glama recorded them.

Capabilities

Features and capabilities supported by this server

Protocol revision2025-11-25

CapabilityDetails
tools
{
  "listChanged": false
}
prompts
{
  "listChanged": false
}
resources
{
  "subscribe": false,
  "listChanged": false
}
experimental
{}

Tools

Functions exposed to the LLM to take actions

NameDescription
get_capabilitiesA

Check what O3DE MCP capabilities are currently available.

Call this first to determine whether the editor is connected (for editor tools) and whether the O3DE CLI is available (for project tools). This avoids wasting tokens on tools that will fail.

Tool categories are discovered dynamically — any new tools added to the server will automatically appear in the response.

Returns: JSON object with editor, cli, and tool_categories sections describing current availability and configuration.

run_editor_pythonA

Execute a Python script inside the running O3DE Editor.

The script runs in the editor's embedded Python interpreter and has access to the full azlmbr (EditorPythonBindings) API. Use this for custom editor automation that isn't covered by other tools.

Args: script: Python code to execute. Has access to azlmbr modules. timeout: Optional per-call execution timeout in seconds. The editor runs the script synchronously and does not reply until it finishes, so raise this for known-heavy operations. Omit to use the O3DE_EDITOR_TIMEOUT default (600s).

get_scene_snapshotA

Return the full scene state as JSON, served natively by the AiCompanion gem.

Entities, components, transforms and hierarchy in one call, produced by the gem's C++ SceneSnapshotProvider rather than an editor Python script. Cheaper than list_entities plus per-entity queries, and it still works when the AgentServer runs in secure mode.

get_entity_treeA

Return the entity hierarchy as a nested JSON tree.

Served natively by the AiCompanion gem, without editor Python.

validate_sceneA

Run the AiCompanion gem's scene validation and return the report as JSON.

Flags common problems (missing cameras, entities without transforms, physics bodies without colliders, and similar) without executing any editor Python.

list_entitiesA

List all entities in the currently open O3DE level.

Returns a JSON array of objects with 'id' and 'name' fields.

create_entityA

Create a new entity in the current O3DE level.

Args: name: Name for the new entity. parent_id: Optional entity ID of the parent. None for root-level.

delete_entityB

Delete an entity from the current O3DE level.

Args: entity_id: The entity ID to delete.

duplicate_entityA

Duplicate an entity (and its children) in the current O3DE level.

Args: entity_id: The entity ID to duplicate.

get_entity_componentsA

List all components attached to an entity.

Args: entity_id: The entity ID to inspect.

Returns: JSON array of objects with 'component_id' and 'type' fields.

add_componentA

Add a component to an entity.

Args: entity_id: The entity ID to add the component to. component_type: Component type name (e.g. 'Mesh', 'PhysX Dynamic Rigid Body').

get_component_propertyA

Get a property value from a component on an entity.

Args: entity_id: The entity ID. component_type: Component type name (e.g. 'Transform'). property_path: Property path using '|' separator (e.g. 'Controller|Configuration|Model Asset').

set_component_propertyB

Set a property value on a component.

Args: entity_id: The entity ID. component_type: Component type name (e.g. 'Transform'). property_path: Property path using '|' separator (e.g. 'Controller|Configuration|Model Asset'). value: The value to set (as a string — booleans as 'true'/'false', numbers as their string representation).

assign_assetC

Assign an asset to a component property by resolving the asset path.

remove_componentC

Remove a component from an entity.

set_transformA

Set the world transform of an entity (only provided components are changed).

get_transformA

Get the world transform of an entity.

set_parentA

Set the parent of an entity (reparent in the hierarchy).

run_console_commandC

Execute an O3DE console command in the running editor.

get_cvarB

Get the value of an O3DE console variable (CVAR).

set_cvarB

Set the value of an O3DE console variable (CVAR).

load_levelB

Open a level in the O3DE Editor.

Args: level_path: Path to the level relative to the project (e.g. 'Levels/MyLevel').

get_level_infoA

Get information about the currently loaded level.

Returns: JSON object with 'level_name' and 'level_path' fields.

save_levelA

Save the currently open level.

create_levelA

Create a new empty level in the current O3DE project.

list_levelsC

List all levels available in an O3DE project.

enter_game_modeA

Enter game mode (play-in-editor) in the O3DE Editor.

exit_game_modeA

Exit game mode and return to edit mode.

undoB

Undo the last editor action.

redoA

Redo the last undone editor action.

get_viewport_cameraA

Get the position and rotation of the active editor viewport camera.

Returns JSON with position (3 floats) and rotation (3 Euler angles in degrees). FOV is not available via the Python bindings.

set_viewport_cameraC

Set the active editor viewport camera transform.

focus_entityB

Focus the viewport camera on an entity.

capture_viewportA

Capture a screenshot of the editor viewport.

Tries PySide6 widget grab first (captures the viewport widget including UI overlays). Falls back to azlmbr.atom FrameCaptureRequestBus.CaptureScreenshot which captures the actual rendered frame and works on platforms where PySide6 is not importable in the editor's embedded interpreter.

Args: output_path: File path for the screenshot (.png, .jpg, .jpeg, .bmp, or .tga). width: Optional width to scale the screenshot to (PySide6 path only). height: Optional height to scale the screenshot to (PySide6 path only).

instantiate_prefabC

Instantiate a prefab in the current level.

create_prefab_from_entityA

Write a prefab file to disk from an existing entity.

The path is relative to the project root. The level is not modified; use instantiate_prefab afterwards to place the saved prefab.

save_prefabA

Report where a prefab instance came from.

Propagating live entity edits back to a .prefab file is not reachable from the editor's Python API: PrefabPublicRequestBus reflects no save event, and the only serialiser, SaveTemplateToString, is keyed by template id with nothing exposed to map an entity to one. This returns the owning prefab path and says so, rather than reporting a success that never happened. To get a prefab onto disk, use create_prefab_from_entity.

begin_sessionA

Begin a persistent Python session in the O3DE editor.

exec_in_sessionB

Execute Python code in a persistent session.

end_sessionB

End a persistent Python session and clean up its namespace.

get_session_varsA

List the variable names in a persistent Python session.

get_bus_schemaB

Discover the scripting API of any O3DE gem's reflected EBuses.

get_bus_schema_liveC

Query the running editor's BehaviorContext for a bus schema.

capture_renderdoc_frameA

Trigger a RenderDoc frame capture in the O3DE editor.

Attempts to trigger a RenderDoc capture via GraphicsProfilerBus (reflected in the BehaviorContext but not exposed as a Python bus function in O3DE 2.7.0). If the bus call is not available, reports the limitation and suggests manual alternatives.

Returns: JSON with status ok if the capture was triggered, error on failure, or manual_required if the Python API cannot trigger the capture and manual action is needed.

get_engine_infoA

Get information about the local O3DE engine installation.

Returns: JSON object with engine metadata, or an error message if no engine is found.

list_projectsA

List all O3DE projects registered on this machine.

Returns: JSON array of project objects, or a message if none are found.

list_gemsA

List all external gems registered on this machine.

Returns: JSON array of gem objects, or a message if none are found.

list_project_gemsA

List gems enabled in a specific O3DE project.

Args: project_path: Path to the O3DE project.

create_projectA

Create a new O3DE project.

Args: name: Project name (alphanumeric, hyphens, underscores). path: Directory where the project will be created. template: Project template to use (default: DefaultProject).

register_gemA

Register an external gem with an O3DE project.

Args: gem_path: Path to the gem directory. project_path: Path to the project to add the gem to.

enable_gemC

Enable a gem in an O3DE project.

Args: gem_name: Name of the gem to enable. project_path: Path to the project.

build_projectB

Build an O3DE project using CMake.

This runs CMake configure followed by CMake build. Timeouts are configurable via O3DE_CONFIGURE_TIMEOUT and O3DE_BUILD_TIMEOUT environment variables.

Args: project_path: Path to the O3DE project. config: Build configuration -- profile, debug, or release (default: profile).

disable_gemB

Disable a gem in an O3DE project.

Args: gem_name: Name of the gem to disable. project_path: Path to the project.

create_gemB

Create a new O3DE gem.

Args: name: Gem name (alphanumeric, hyphens, underscores). path: Directory where the gem will be created. template: Gem template to use (default: DefaultGem).

export_projectA

Export an O3DE project for distribution.

This is a long-running operation. Timeout is configurable via the O3DE_EXPORT_TIMEOUT environment variable (default: 3600s).

Args: project_path: Path to the O3DE project to export. output_path: Directory where the exported project will be written. config: Build configuration -- profile, debug, or release (default: profile).

edit_project_propertiesB

Edit properties of an existing O3DE project.

Args: project_path: Path to the project. project_name: New name for the project (optional). origin: New origin URL or description (optional).

list_templatesA

List available O3DE project and gem templates.

Scans the engine's Templates directory for template definitions.

Returns: JSON array of template objects with name, summary, and path.

register_engineA

Register an O3DE engine installation with the O3DE manifest.

Args: engine_path: Path to the engine root directory (must contain engine.json).

set_active_engineA

Set the active O3DE engine by name (in-process, not persistent).

Args: name: Name of the registered engine to activate.

start_buildA

Start a CMake build in the background and return a build ID.

Unlike build_project, this returns immediately with a build ID that can be polled via get_build_status. Output is drained on a background thread to prevent pipe stalls on large builds.

Args: project_path: Path to the O3DE project. config: Build configuration -- profile, debug, or release (default: profile). target: Optional CMake target to build (default: all targets).

get_build_statusA

Check the status of a background build.

Args: build_id: Build ID returned by start_build.

get_asset_processor_statusB

Check whether the O3DE Asset Processor is running.

wait_for_assetsB

Wait for the Asset Processor to finish processing (or until timeout).

refresh_assetsC

Trigger an Asset Processor rescan for a project.

tail_logB

Read the last N lines of an O3DE log file.

get_log_errorsC

Extract error lines from an O3DE log file.

Prompts

Interactive templates invoked by user choice

NameDescription

No prompts

Resources

Contextual data attached and managed by the client

NameDescription

No resources

TDQS

B3.2/5.0

Scored across 66 tools

Disambiguation3/5

The toolset covers many distinct areas, but several near-overlapping pairs exist: build_project/start_build, run_editor_python/exec_in_session, get_bus_schema/get_bus_schema_live, and get_scene_snapshot/get_entity_tree/list_entities. Descriptions help clarify the differences, but the sheer number of similarly-purposed tools makes misselection likely.

Naming Consistency4/5

The dominant verb_noun snake_case pattern is consistent and predictable across most tools (list_*, create_*, get_*, set_*, enable_*, disable_*). Minor outliers like undo, redo, exec_in_session, and wait_for_assets break the pattern slightly without causing major confusion.

Tool Count1/5

66 tools is far beyond what is typically appropriate for a coherent MCP surface, even for a complex engine. Many tools could be consolidated, such as blocking vs background builds, one-off vs persistent Python execution, and multiple scene/entity listing variants, making the set heavy and difficult for an agent to navigate.

Completeness4/5

The surface is remarkably comprehensive for the O3DE domain: engine registration, project and gem management, builds, asset processing, logs, levels, entities, components, prefabs, viewport control, Python sessions, bus schemas, and console commands are all covered. Minor lifecycle gaps exist, such as no delete project/gem/level or entity rename, but core workflows do not hit dead ends.

Maintenance

ActivityMaintained
ResponsivenessSlow