Skip to content

MCP Server

The Estella editor includes a built-in MCP (Model Context Protocol) bridge that allows AI assistants like Claude to read and modify your scene in real-time. The MCP server acts as a thin wrapper that translates MCP tool calls into HTTP requests to the running editor.

Prerequisites

  • Estella editor v0.11.0 or later
  • Node.js 18+
  • An MCP-compatible AI client (e.g., Claude Desktop, Claude Code, Cursor)

Installation

Configure your AI client to use the MCP server. No separate install step is needed — npx fetches it directly from GitHub.

Add to your project’s .mcp.json:

{
"mcpServers": {
"estella-editor": {
"command": "npx",
"args": ["-y", "github:esengine/estella-mcp-server"]
}
}
}

3. Start the editor

Open your project in the Estella editor. The MCP bridge automatically registers itself at ~/.esengine/bridge-<port>.json, which the MCP server discovers on startup.

How It Works

AI Client ←→ MCP Server (stdio) ←→ HTTP Bridge ←→ Estella Editor
  1. The editor starts an HTTP bridge server on a random available port
  2. It writes a discovery file to ~/.esengine/bridge-<port>.json
  3. The MCP server reads the discovery file to find the running editor
  4. AI tool calls are translated to HTTP GET/POST requests

Available Tools

Scene Inspection

ToolDescription
get_hierarchyList all entities in the scene tree
get_entityGet entity data (all components and properties)
get_componentGet a specific component’s properties
get_childrenList child entities
list_assetsList project assets by type
read_assetRead an asset file’s content

Entity Operations

ToolDescription
create_entityCreate a new entity (optionally under a parent)
delete_entityDelete an entity
rename_entityRename an entity
reparent_entityMove an entity to a new parent
add_componentAdd a component to an entity
remove_componentRemove a component from an entity

Property Editing

ToolDescription
set_propertySet a component property value (with undo support)
get_selectionGet the currently selected entity
select_entitySelect an entity in the editor

Timeline

ToolDescription
get_timelineRead timeline data for an entity
update_timelineModify timeline tracks, keyframes, or properties
write_assetWrite modified asset data back to disk

Play Mode

ToolDescription
playEnter play mode
stopExit play mode
pausePause/resume play mode
set_play_speedAdjust playback speed

UI Creation

Create fully configured UI widget hierarchies with a single tool call. Entities are auto-parented under the Canvas.

ToolDescription
create_textCreate a text label with content, fontSize, color, and alignment
create_imageCreate an image element with tint color and size
create_panelCreate a panel with background and mask
create_buttonCreate a button with background and interactable
create_input_fieldCreate a text input field with placeholder and initial value
create_toggleCreate a toggle/checkbox
create_sliderCreate a slider with fill bar and handle
create_progress_barCreate a progress bar with fill
create_scroll_viewCreate a scrollable container
create_dropdownCreate a dropdown/select with options

Editor State

ToolDescription
get_console_logsGet recent console logs, optionally filtered by level
get_panel_layoutGet editor panel positions
get_project_settingsGet project settings
get_build_statusGet recent build history
get_render_statsGet frame timing and performance data
get_asset_infoGet detailed info about an asset by UUID or path

Visual

ToolDescription
capture_editorCapture a screenshot of the editor (whole window or specific panel)
capture_diffCompare two screenshots pixel-by-pixel

Example Prompts

Once configured, you can ask your AI assistant things like:

  • “Show me all the entities in the scene”
  • “Change the player’s position to (100, 200)”
  • “Add a Sprite component to the Background entity”
  • “Set the idle animation speed to 0.5x”
  • “Take a screenshot and tell me what’s on screen”

Troubleshooting

MCP server says “No running ESEngine editor found”

  • Make sure the Estella editor is running with a project open
  • Check that ~/.esengine/ contains a bridge-*.json file
  • If the file exists but the editor was closed, delete stale bridge files

Connection refused errors

The bridge server binds to 127.0.0.1. If using a proxy, ensure localhost traffic is not proxied:

Terminal window
curl --noproxy '*' http://127.0.0.1:<port>/health

Tools return errors

  • Ensure the editor has a scene loaded
  • Entity IDs are numeric — use get_hierarchy first to find valid IDs
  • Component names are case-sensitive (e.g., Transform, Sprite, SpineAnimation)