by nickschuetz
Automates Open 3D Engine workflows via AI-driven commands, providing editor control, project and build management through an MCP server.
O3de Mcp offers a programmable interface to the Open 3D Engine (O3DE). It exposes 96 tools covering editor automation, engine introspection, project/build handling, asset pipelines, track view, and animation. The tools are callable over the Model Context Protocol, allowing AI agents or scripts to drive the engine without manual interaction.
pip install o3de-mcp
o3de-mcp
mcpServers entry:
{
"mcpServers": {
"o3de": { "command": "o3de-mcp" }
}
}
get_capabilities(), create_entity(), build_project(). Use get_capabilities first to discover which categories are available in the current environment (editor running, CLI only, etc.).create_entity) while hiding engine internals.Q: Do I need the O3DE editor running?
A: Only tools under Editor Automation, Track View, and Animation require a live editor with the o3de-ai-companion-gem and EditorPythonBindings enabled. All other categories work headlessly.
Q: Which Python version is required? A: Python 3.10 or newer.
Q: How are tool versions managed?
A: The server reports gem, API, and protocol versions via get_capabilities. Tools automatically fall back to legacy transports when newer native requests are unavailable.
Q: Can I run the server on a remote machine?
A: Yes. Set O3DE_EDITOR_HOST and O3DE_EDITOR_PORT to the remote editor’s address and enable TLS (O3DE_EDITOR_TLS=1 and optionally O3DE_EDITOR_TLS_VERIFY=1).
Q: What if the editor becomes unresponsive?
A: The server uses a fast‑fail mechanism with a short connect timeout (O3DE_EDITOR_CONNECT_TIMEOUT) and a configurable command timeout (O3DE_EDITOR_TIMEOUT, default 600 s).
Q: How do I generate a software bill of materials?
A: Run python scripts/generate-sbom.py after installing the package.
Automate Open 3D Engine (O3DE) with AI, an MCP server for editor control, project & build management.
See the architecture documentation for a detailed system diagram and communication flow.
96 tools across seven categories. See docs/tool-reference.md for every parameter.
Capability Detection (1 tool):
get_capabilities: check editor connectivity, whether the AiCompanion gem's AgentServer is answering (with its gem, API and protocol versions), and CLI availability before using other toolsEditor Automation (41 tools, requires a running O3DE Editor with the AiCompanion + EditorPythonBindings gems):
azlmbr API)get_scene_snapshot / get_entity_tree / get_entity / validate_scene), no editor Python involved, available even in the gem's secure modeset_parentcreate_entity, set_transform and delete_entity try the gem's native request types first (gem 0.5.0 or later, validated in C++, available in secure mode) and fall back to editor Python on older gems or the legacy transportsave_prefab reports that and names the owning prefab)begin_session / exec_in_session / get_session_vars / end_session) that keep Python state alive across callsEngine Introspection (3 tools):
azlmbr stubs and live from the editorProject & Build Management (17 tools, CLI-based, no editor required):
build_project) or in the background (start_build / get_build_status)Asset Pipeline (9 tools; 5 need no editor):
wait_for_asset, which waits until a specific asset is built or reports why it failedTrack View (8 tools, requires a running editor):
azlmbr.legacy.trackview, no gem needed. Track and keyframe authoring are not exposed (the reflected API makes them unreliable to drive)Animation (17 tools, requires a running editor):
O3DE_ENGINE_PATH env var)
~/.o3de/o3de_manifest.json%USERPROFILE%\.o3de\o3de_manifest.jsonget_capabilities() to check what's available.pip install o3de-mcp
Or run it without installing, straight from an MCP client config, with uv:
uvx o3de-mcp
To work on o3de-mcp itself, install from a checkout instead:
pip install -e . # or: uv pip install -e .
o3de-mcp
Add to your MCP config (or use a project-level .mcp.json):
~/.claude/mcp.json%USERPROFILE%\.claude\mcp.json{
"mcpServers": {
"o3de": {
"command": "o3de-mcp"
}
}
}
skills/o3de-headless-and-editor-automation/
is an Agent Skill (a SKILL.md plus reference notes
and scripts) that teaches an agent the repeatable workflow around this server on
Windows and Linux: AssetProcessor-first launch order and how to tell when it is
idle, rendering a level on the real GPU and capturing it with ffmpeg (Xvfb when
there is no monitor), in-renderer screenshots from editor Python, driving the
editor through o3de-mcp and the AiCompanion gem, wiring asset GUIDs into prefab
JSON offline, and proving engine changes with a ScriptContext test. It records
the traps that cost hours (the prefab segfault on a missing template, killing
your own shell by command-line pattern, the AP idle line living in AP_GUI.log).
The Linux path has been run end to end; the Windows path is written from the
engine layout and still needs a run on a Windows machine.
Install it by copying or symlinking the directory into your skills folder, then
invoke it with /o3de-headless-and-editor-automation:
ln -s "$(pwd)/skills/o3de-headless-and-editor-automation" ~/.claude/skills/
Other clients that read the Agent Skills layout can point at the same directory.
Add to your Claude Desktop config:
{
"mcpServers": {
"o3de": {
"command": "o3de-mcp"
}
}
}
MCP Inspector provides a web UI for interactively testing tools without an AI assistant. Useful for verifying tool behavior, inspecting responses, and debugging.
npx @modelcontextprotocol/inspector o3de-mcp
This opens the Inspector UI at http://localhost:6274. From there you can browse all registered tools, invoke them with custom parameters, and see raw responses.
To pass environment variables (e.g., a custom engine path or editor port):
npx @modelcontextprotocol/inspector -e O3DE_ENGINE_PATH=/path/to/engine -e O3DE_EDITOR_PORT=4600 o3de-mcp
# Install with dev dependencies
pip install -e ".[dev]"
# Run tests
pytest
# Run a single test
pytest tests/test_project.py::TestValidateName::test_valid_simple
# Lint and format
ruff check src/ tests/
ruff format src/ tests/
# Type checking
mypy src/
A CycloneDX SBOM is generated on every CI run and uploaded as a build artifact. To generate one locally:
python scripts/generate-sbom.py # JSON + XML
python scripts/generate-sbom.py --format json # JSON only
The script creates an isolated virtual environment with only runtime dependencies, so the SBOM accurately reflects what ships, without the dev and build tooling.
GitHub Actions runs lint, type checking, tests, and SBOM generation on every push and PR to main. See .github/workflows/ci.yml.
json.dumps / json.loads when passed into editor scripts, never raw string interpolation.| Document | Audience | Description |
|---|---|---|
| AGENTS.md | AI agents | Token-efficient usage guide, decision trees, error handling |
| docs/architecture.md | Developers & agents | System architecture diagram and communication flows |
| docs/tool-reference.md | Agents & developers | Compact parameter reference for all 96 tools |
| docs/recipes.md | Agents & developers | Composable patterns for scenes, physics, lighting, scripting |
| docs/components.md | Agents & developers | O3DE component name catalog with dependency chains |
| skills/o3de-headless-and-editor-automation/ | AI agents | Installable skill (Windows and Linux): render capture, editor automation, offline asset GUIDs, ScriptContext proofs, and the traps around each |
Progressive walkthroughs from project creation to a complete game:
| Environment Variable | Description | Default |
|---|---|---|
O3DE_ENGINE_PATH |
Override automatic engine discovery | Auto-detected from manifest |
O3DE_ENGINE_NAME |
Select engine by name when multiple are registered | First valid engine |
O3DE_PROJECT_PATH |
Select the project for asset, introspection and list_levels tools |
Single registered project |
O3DE_EDITOR_HOST |
Editor AgentServer host | 127.0.0.1 |
O3DE_EDITOR_PORT |
Editor AgentServer port | 4600 |
O3DE_EDITOR_TIMEOUT |
Per-command editor execution timeout (seconds) | 600 |
O3DE_EDITOR_CONNECT_TIMEOUT |
Editor TCP connect timeout (seconds) | 5 |
O3DE_CAPTURE_WAIT |
How long to wait for a viewport capture to reach disk (seconds) | 15 |
O3DE_EDITOR_TLS |
Wrap the editor connection in TLS (1 or true to enable) |
0 (disabled) |
O3DE_EDITOR_TLS_VERIFY |
Verify the editor's certificate and hostname | 0 (disabled) |
O3DE_EDITOR_TLS_CA |
CA bundle used when verification is enabled | System defaults |
O3DE_CMAKE_GENERATOR |
CMake generator for builds | Auto-detected per platform |
O3DE_CONFIGURE_TIMEOUT |
CMake configure timeout (seconds) | 600 |
O3DE_BUILD_TIMEOUT |
CMake build timeout (seconds) | 1800 |
O3DE_EXPORT_TIMEOUT |
Project export timeout (seconds) | 3600 |
Editor timeouts: the editor runs each submitted script synchronously and does not reply until it finishes, so
O3DE_EDITOR_TIMEOUTis effectively "how long an editor operation may take." It defaults to 600s because real operations (level loads, game-mode entry, on-demand asset compilation) routinely exceed tens of seconds, and a too-short value cuts them off while the editor is still working. An unreachable editor is caught in milliseconds by the separateO3DE_EDITOR_CONNECT_TIMEOUTand the fast-fail window, so a large command timeout costs nothing on the healthy path.run_editor_pythonalso accepts a per-calltimeoutargument.
Editor TLS: the connection is plaintext by default, which is the right default for the normal case of an editor on
127.0.0.1. If you pointO3DE_EDITOR_HOSTat a remote machine, setO3DE_EDITOR_TLS=1andO3DE_EDITOR_TLS_VERIFY=1. Enabling TLS on its own leaves certificate and hostname checking off, which encrypts the channel but does not authenticate the peer.
The server also reads the O3DE manifest for registered engines, projects, and gems:
~/.o3de/o3de_manifest.json%USERPROFILE%\.o3de\o3de_manifest.jsonThis project is dual-licensed under Apache 2.0 or MIT (your choice), matching the O3DE engine license. Free for commercial and non-commercial use.
SPDX-License-Identifier: Apache-2.0 OR MIT
Please log in to share your review and rating for this MCP.
Explore related MCPs that share similar capabilities and solve comparable challenges
by headroomlabs-ai
Compress tool outputs, logs, files, RAG chunks, and conversation history before they reach the LLM, keeping answers identical while saving up to 95% of tokens for JSON payloads.
by modelcontextprotocol
A Model Context Protocol server for Git repository interaction and automation.
by zed-industries
A high‑performance, multiplayer code editor designed for speed and collaboration.
by modelcontextprotocol
Model Context Protocol Servers
by modelcontextprotocol
A Model Context Protocol server that provides time and timezone conversion capabilities.
by cline
An autonomous coding assistant that can create and edit files, execute terminal commands, and interact with a browser directly from your IDE, operating step‑by‑step with explicit user permission.
by upstash
Provides up-to-date, version‑specific library documentation and code examples directly inside LLM prompts, eliminating outdated information and hallucinated APIs.
by daytonaio
Provides a secure, elastic infrastructure that creates isolated sandboxes for running AI‑generated code with sub‑90 ms startup, unlimited persistence, and OCI/Docker compatibility.
by continuedev
Enables faster shipping of code by integrating continuous AI agents across IDEs, terminals, and CI pipelines, offering chat, edit, autocomplete, and customizable agent workflows.