RC

romarogov/cocos-code-mode

Developer tools
52 stars 13 forks Quality 69 Trend 13Apache-2.0

AI Code Mode extension for Cocos Creator featuring UTCP Server with MCP wrapper

Overview

turns the Cocos Creator Editor into an AI-controllable tool. It runs an HTTP server inside the editor that exposes scene manipulation, asset management, and property inspection as structured tool calls via UTCP Protocol — letting AI agents build, inspect, and modify Cocos Creator projects the same way a developer would through the UI. These tools are combined in UTCP Code Mode environment to achieve maximum performance and token efficiency for AI agents, letting them call the tools in isolated JS sandbox. 1. Install extension in the Cocos Creator project 2. Integrate extension with CodeMode MCP Server 3. Design a system prompt for you agent or use provided example 4. Ask AI to help you and see how it learns! In contrast to rigid MCP tool defenitions, which always kept in LLM context, CodeMode is an approach which helps AI to call tools in the most familiar way - by writing JavaScript code based on TypeScript defenitions of tools.

README

Code Mode for Cocos Creator

Code Mode turns the Cocos Creator Editor into an AI-controllable tool. It runs an HTTP server inside the editor that exposes scene manipulation, asset management, and property inspection as structured tool calls via UTCP Protocol — letting AI agents build, inspect, and modify Cocos Creator projects the same way a developer would through the UI. These tools are combined in UTCP Code Mode environment to achieve maximum performance and token efficiency for AI agents, letting them call the tools in isolated JS sandbox.

Quickstart

  1. Install extension in the Cocos Creator project
  2. Integrate extension with CodeMode MCP Server
  3. Design a system prompt for you agent or use provided example
  4. Ask AI to help you and see how it learns!

What is Code Mode?

In contrast to rigid MCP tool defenitions, which always kept in LLM context, CodeMode is an approach which helps AI to call tools in the most familiar way - by writing JavaScript code based on TypeScript defenitions of tools. This helps AI to keep token consumption low, implement loops and chained calls for complex tasks, organize output in compact form and reuse output from different existing servers and endpoints in one JavaScript execution context, isolating LLM context from unnecessary data. This opens endless possibilities for interaction between different environments. Here is some examples:

  1. Move scene from blender with Blender MCP, exporting particular objects as FBX straight into Cocos project
  2. Use Figma MCP to fetch UI layout from figma and implement these layouts in your project in the smart way instead of blindly recreating every panel
  3. Use Unity Code Mode to perform game porting between engines
  4. Bring your own examples 🙃

All this becomes possible with community-friendly, flexible and open solution from UTCP team: CodeMode and it’s MCP Server. You can read more about Code Mode concept in papers from Anthropic, Apple and Cloudflare.

Tools

Category Tools Purpose
Scene nodeGetTree, nodeGetAtPath, nodeCreate, nodeCreatePrimitive, nodeOperate Navigate and build scene hierarchy
Components nodeComponentsGet, nodeComponentAdd, nodeComponentRemove, nodeGetAvailableComponentTypes Attach, remove, and discover components
Inspector inspectorGetInstanceDefinition, inspectorGetSettingsDefinition, inspectorGetInstanceProperties, inspectorGetSettingsProperties, inspectorSetInstanceProperties, inspectorSetSettingsProperties Introspect types and read/write properties
Assets assetGetTree, assetGetAtPath, assetCreate, assetImport, assetOperate, assetGetPreview Browse, create, and manage project assets
Editor editorOperate, editorGetLogs, editorGetScenePreview Control editor state and capture previews

How It Works

This extension architecture follows a discover, then act pattern. AI agents never guess at property names or component structures — they query for the real definitions first.

1. Get the scene tree         →  find the node you need
2. Get its type definition    →  learn its actual properties
3. Set properties by name     →  make precise changes

Example

// Find the camera node
const tree = CocosEditor.nodeGetTree({});
const cameraRef = tree.children[0].components[0]; // component reference

// Discover what properties Camera has
const def = CocosEditor.inspectorGetInstanceDefinition({ reference: cameraRef });
// → "export class Camera { fov: number; near: number; far: number; ... }"

// Set multiple properties in one call
CocosEditor.inspectorSetInstanceProperties({
  reference: cameraRef,
  propertyPaths: ["fov", "near", "far"],
  values: [60, 0.1, 1000]
});

Architecture

Tool Execution

The extension runs an Express.js HTTP server on a configurable port (default: auto-assigned). Tool handlers execute asynchronously using Cocos Creator’s Editor Message API — all editor interactions go through Editor.Message.request, which marshals calls to the appropriate editor subsystem.

  • Read tools (GET) — query scene state and return structured data immediately.
  • Write tools (POST) — mutate scene state and call Editor.Message.request('scene', 'snapshot') to register the change as an undoable step.

This means AI agents can safely chain read calls and batch writes without blocking the editor.

Tool Discovery

Tools are TypeScript class methods decorated with @utcpTool. The ToolRegistry collects them at startup, builds JSON schemas from the inline definitions, and serves a UTCP manual at the /utcp endpoint.

export class SceneTools {

    @utcpTool(
        'nodeGetTree',
        'Get the hierarchy tree of specific node or scene root if no reference is provided.',
        {
            type: 'object',
            properties: {
                reference: InstanceReferenceSchema
            }
        },
        SceneTreeItemSchema, "GET", ['scene', 'graph', 'node', 'hierarchy', 'tree']
    )
    async nodeGetTree(args: { reference?: IInstanceReference }): Promise {
        // ...
    }
}

Instance References

Nodes, components, and assets are passed around as lightweight UUID-based handles:

{ id: "a1b2c3d4-...", type: "cc.Camera" }

Returned by tree queries, component lookups, and creation tools. Passed back to any tool that needs to target a specific object.

TypeScript Definitions

Code Mode dynamically generates TypeScript class definitions from the live editor property dump. When an AI agent calls inspectorGetInstanceDefinition, it receives a complete TypeScript class with the correct field names, types, enums, and decorator hints — including @property attributes like min, max, unit, and tooltip.

// Example output for a Transform-like node
export class Node {
    readonly uuid: string;
    /** World position */
    worldPosition: Vec3;
    /** World rotation (euler angles) */
    worldRotation: Vec3;
    worldScale: Vec3;
    active: boolean;
}

Components without special handling are reflected automatically from the serialized property dump. Common Cocos math types (Vec2, Vec3, Vec4, Color, Rect, Quat, Mat4, Gradient, etc.) are always available via inspectorGetSettingsDefinition({ settingsType: 'CommonTypes' }).

Settings Inspection

Two special settings types can be inspected and modified directly:

  • CurrentSceneGlobals — ambient light, skybox, shadows, and other scene-level rendering settings.
  • ProjectSettings — engine and project configuration.

Installation

From release

  1. Download last release from this repository.
  2. Open Cocos Creator, go to Extension → Extension Manager, and click Import Extension File(.zip) button (icon with arrow).
  3. Select the downloaded zip file.
  4. The UTCP server starts automatically and registers itself in ~/.utcp_config.json by default.

Build from source

  1. Clone this repository.
  2. Install node and npm.
  3. run
git clone https://github.com/romarogov/cocos-code-mode.git
cd cocos-code-mode
npm i
npm run package
  1. If everything builds fine, cocos-code-mode.zip file should appear in repository root.
  2. Install it in Cocos Creator with Extension Manager.

Adding Custom Tools

You should add custom tools right in extension package and build it from source as described above.

Implementation example:

import { utcpTool } from './utcp/decorators';

export class MyTools {

    @utcpTool(
        'myCustomTool',
        'Describe what this tool does',
        {
            type: 'object',
            properties: {
                input: { type: 'string' },
                count: { type: 'number', default: 10 }
            },
            required: ['input']
        },
        { type: 'object', properties: { result: { type: 'string' } } },
        "POST",
        ['custom', 'tags']
    )
    async myCustomTool(args: { input: string, count?: number }): Promise {
        // Implementation
    }
}

Register the class by importing it in utcp-server.ts. Tools are served automatically at startup. No additional registration needed.

UTCP Call Templates Configuration

The extension provides a Configuration panel accessible from the Code Mode top menu. It shows the current server port, the path to the UTCP config file, and lets you manage additional UTCP call templates to connect other UTCP-compatible tool providers (including MCP servers) into the same Code Mode execution context.

You can find Call Template structures in UTCP documentation:

The extension automatically maintains a CocosEditor entry in UTCP Config pointing to the running server port.

Integration

Code Mode works with any UTCP-compatible client, including the Code Mode MCP server for AI assistants.

MCP Server Config

{
  "mcpServers": {
    "code-mode": {
      "command": "npx",
      "args": ["@utcp/code-mode-mcp"],
      "env": {
        "UTCP_CONFIG_FILE": "~/.utcp_config.json"
      }
    }
  }
}

Claude Code Configuration

To set up a Claude Code agent to use Code Mode, open your project and run:

Linux/MacOS:

claude mcp add --transport stdio --env UTCP_CONFIG_FILE="~/.utcp_config.json" -- code-mode npx @utcp/code-mode-mcp

Windows:

claude mcp add --transport stdio --env UTCP_CONFIG_FILE="%userprofile%/.utcp_config.json" -- code-mode cmd /c npx @utcp/code-mode-mcp
View the full README on GitHub

Install

npx @utcp/code-mode-mcp
New to MCP? Start with the mcpskill.org guide →

Configuration

{ "mcpServers": { "code-mode": { "command": "npx", "args": ["@utcp/code-mode-mcp"], "env": { "UTCP_CONFIG_FILE": "~/.utcp_config.json" } } } }