GitHunt
DG

dgflash/mcp-bridge

这是一个为 Cocos Creator 设计的 MCP (Model Context Protocol) 桥接插件,用于连接外部 AI 工具与 Cocos Creator 编辑器,实现对场景、节点等资源的自动化操作。

MCP Bridge 插件

这是一个为 Cocos Creator 设计的 MCP (Model Context Protocol) 桥接插件,用于连接外部 AI 工具与 Cocos Creator 编辑器,实现对场景、节点等资源的自动化操作。

适用版本

此插件适用于 Cocos Creator 2.4.x 版本。由于使用了特定的编辑器 API,可能不兼容较新或较老的版本。

功能特性

  • HTTP 服务接口: 提供标准 HTTP 接口,外部工具可以通过 MCP 协议调用 Cocos Creator 编辑器功能
  • 场景节点操作: 获取、创建、修改场景中的节点
  • 资源管理: 创建场景、预制体,打开指定资源
  • 组件管理: 添加、删除、获取节点组件
  • 脚本管理: 创建、删除、读取、写入脚本文件
  • 批处理执行: 批量执行多个 MCP 工具操作,提高效率
  • 资产管理: 创建、删除、移动、获取资源信息
  • 实时日志: 提供详细的操作日志记录和展示
  • 自动启动: 支持编辑器启动时自动开启服务
  • 编辑器管理: 获取和设置选中对象,刷新编辑器
  • 游戏对象查找: 根据条件查找场景中的节点
  • 材质管理: 创建和管理材质资源
  • 纹理管理: 创建和管理纹理资源
  • 菜单项执行: 执行 Cocos Creator 编辑器菜单项
  • 代码编辑增强: 应用文本编辑操作到文件
  • 控制台读取: 读取编辑器控制台输出
  • 脚本验证: 验证脚本语法正确性
  • 全局搜索: 在项目中搜索文本内容
  • 撤销/重做: 管理编辑器的撤销栈
  • 特效管理: 创建和修改粒子系统
  • 工具说明: 测试面板提供详细的工具描述和参数说明

安装与使用

安装

将此插件复制到 Cocos Creator 项目的 packages 目录下即可。

启动

  1. 打开 Cocos Creator 编辑器
  2. 在菜单栏选择 MCP Bridge/Open Panel 打开测试面板
  3. 在面板中点击 "Start" 按钮启动服务
  4. 服务默认运行在端口 3456 上

配置选项

  • 端口: 可以自定义 HTTP 服务监听的端口,默认为 3456
  • 自动启动: 可以设置编辑器启动时自动开启服务

连接 AI 编辑器

在 AI 编辑器(如 Cursor / VS Code)中配置

如果你的 AI 编辑器提供的是 Type: command 或 Stdio 选项:

Command: node
Args: [Cocos Creator 项目的绝对路径]/packages/mcp-bridge/mcp-proxy.js

例如,在你的项目中,完整路径应该是:

Args: [你的项目所在盘符]:/[项目路径]/packages/mcp-bridge/mcp-proxy.js

或者添加 JSON 配置:

{
	"mcpServers": {
		"cocos-creator": {
			"command": "node",
			"args": ["[Cocos Creator 项目的绝对路径]/packages/mcp-bridge/mcp-proxy.js"]
		}
	}
}

注意:请将上述配置中的路径替换为你自己项目中 mcp-proxy.js 文件的实际绝对路径。

API 接口

服务提供以下 MCP 工具接口:

1. get_selected_node

  • 描述: 获取当前编辑器中选中的节点 ID
  • 参数: 无

2. set_node_name

  • 描述: 修改指定节点的名称
  • 参数:
    • id: 节点的 UUID
    • newName: 新的节点名称

3. save_scene

  • 描述: 保存当前场景的修改
  • 参数: 无

4. get_scene_hierarchy

  • 描述: 获取当前场景的完整节点树结构(包括 UUID、名称和层级关系)
  • 参数: 无

5. update_node_transform

  • 描述: 修改节点的坐标、缩放或颜色
  • 参数:
    • id: 节点 UUID
    • x, y: 坐标
    • width, height: 节点宽高 (新增支持)
    • scaleX, scaleY: 缩放值
    • color: HEX 颜色代码(如 #FF0000)
  • 重要提示: 执行前必须调用 get_scene_hierarchy 确保 id 有效,防止操作不存在的节点。

6. open_scene

  • 描述: 在编辑器中打开指定的场景文件。这是一个异步且耗时的操作,打开后请等待几秒。重要提示:如果是新创建或空的场景,请务必先创建并初始化基础节点(Canvas/Camera)。
  • 参数:
    • url: 场景资源路径,如 db://assets/NewScene.fire

7. create_node

  • 描述: 在当前场景中创建一个新节点。
  • 重要提示:
    1. 如果指定了 parentId,必须先通过 get_scene_hierarchy 确认该 UUID 对应的父节点仍然存在。
    2. 预设类型差异
      • empty: 纯空节点,无组件,不带贴图。
      • sprite: 自动添加 Sprite 组件,默认尺寸 100x100,并带有引擎默认贴图占位。
      • button: 自动添加 Sprite 和 Button 组件,默认尺寸 150x50,背景色设为深色以便看清文字,并带有默认贴图。
      • label: 自动添加 Label 组件,默认尺寸 120x40。
  • 参数:
    • name: 节点名称
    • parentId: 父节点 UUID (可选)
    • type: 节点预设类型(empty, sprite, label, button

8. manage_components

  • 描述: 管理节点组件。
  • 重要最佳实践:
    1. 引用验证:操作前必须调用 get_scene_hierarchy 确认 nodeId 对应的节点真实存在(防止由于场景重置或节点删除导致的引用失效)。
    2. 在执行 add 操作前,建议先通过 get 操作检查是否已存在同类组件。
    3. 添加 cc.Sprite 后请务必设置其 spriteFrame 属性,否则节点将不显示。
    4. 创建按钮时,请确保目标节点有正数尺寸(width/height)作为点击区域。
  • 参数:
    • nodeId: 节点 UUID
    • action: 操作类型(add, remove, get, update
    • componentType: 组件类型,如 cc.Sprite(用于 add/update 操作)
    • componentId: 组件 ID(用于 remove/update 操作)
    • properties: 组件属性(用于 add/update 操作)。
  • 智能特性
    1. 如果属性期望组件类型但传入节点 UUID,插件会自动查找匹配组件。
    2. 对于资源类属性(如 cc.Prefab, cc.Material),传递资源的 UUID,插件会自动处理异步加载与序列化。
    3. 资产数组支持: 针对 materials 等数组属性,支持传入 UUID 数组,插件将自动并发加载所有资源并同步更新编辑器 UI。
  • 操作规则 (Subject Validation Rule):赋值或更新前必须确保目标属性在组件上真实存在。

9. manage_script

  • 描述: 管理脚本文件,默认创建 TypeScript 脚本
  • 参数:
    • action: 操作类型(create, delete, read, write
    • path: 脚本路径,如 db://assets/scripts/NewScript.ts
    • content: 脚本内容(用于 createwrite 操作)
    • name: 脚本名称(用于 create 操作)
  • 默认模板: 当未提供 content 时,会使用 TypeScript 格式的默认模板

10. batch_execute

  • 描述: 批处理执行多个操作
  • 参数:
    • operations: 操作列表
      • tool: 工具名称
      • params: 工具参数

11. manage_asset

  • 描述: 管理资源
  • 参数:
    • action: 操作类型(create, delete, move, get_info
    • path: 资源路径,如 db://assets/textures
    • targetPath: 目标路径(用于 move 操作)
    • content: 资源内容(用于 create 操作)

12. scene_management

  • 描述: 场景管理。创建并通过 open_scene 打开后,请务必初始化基础节点(如 Canvas 和 Camera)。
  • 参数:
    • action: 操作类型(create, delete, duplicate, get_info
    • path: 场景路径,如 db://assets/scenes/NewScene.fire
    • targetPath: 目标路径(用于 duplicate 操作)
    • name: 场景名称(用于 create 操作)

13. prefab_management

  • 描述: 预制体管理
  • 参数:
    • action: 操作类型(create, update, instantiate, get_info
    • path: 预制体路径,如 db://assets/prefabs/NewPrefab.prefab
    • nodeId: 节点 ID(用于 createupdate 操作)
    • parentId: 父节点 ID(用于 instantiate 操作)

14. manage_editor

  • 描述: 管理编辑器
  • 参数:
    • action: 操作类型(get_selection, set_selection, refresh_editor
    • target: 目标类型(node, asset)(用于 set_selection 操作)
    • properties: 操作属性
      • nodes: 节点 UUID 数组(用于 set_selection 操作)
      • assets: 资源 UUID 数组(用于 set_selection 操作)

15. find_gameobjects

  • 描述: 查找游戏对象
  • 参数:
    • conditions: 查找条件
      • name: 节点名称(包含匹配)
      • tag: 节点标签
      • component: 组件类型
      • active: 激活状态
    • recursive: 是否递归查找(默认:true)

16. manage_material

  • 描述: 管理材质资源。支持适配 Cocos Creator 2.4.x 的 _effectAsset_techniqueData 结构。
  • 参数:
    • action: 操作类型(create, delete, update, get_info
    • path: 材质路径,如 db://assets/materials/NewMaterial.mat
    • properties: 材质属性(用于 createupdate 操作)
      • shaderUuid: 指定使用的着色器 UUID
      • defines: 宏定义对象(用于 update 时会与现有值合并)
      • uniforms: Uniform 参数对象(用于 update 时会与现有值合并,对应引擎内的 props

17. manage_shader

  • 描述: 管理着色器 (Effect) 资源。
  • 参数:
    • action: 操作类型(create, read, write, delete, get_info
    • path: 着色器路径,如 db://assets/effects/MyShader.effect
    • content: 文本内容(用于 createwrite 操作)

18. manage_texture

  • 描述: 管理纹理
  • 参数:
    • action: 操作类型(create, delete, get_info, update
    • path: 纹理路径,如 db://assets/textures/NewTexture.png
    • properties: 纹理属性(用于 create/update 操作)
      • type: 纹理类型(如 sprite, texture, raw)(用于 update)
      • border: 九宫格边距数组 [top, bottom, left, right] (用于 update,仅当 type 为 sprite 时有效)
      • subMetas: (内部使用)
      • width: 宽度 (用于 create 生成占位图)
      • height: 高度 (用于 create 生成占位图)
      • native: 原生路径

18. execute_menu_item

  • 描述: 执行菜单项
  • 参数:
    • menuPath: 菜单项路径,如 Assets/Create/Folder。支持映射常用命令:File/New Scene, File/Save Scene, Edit/Undo, Edit/Redo, Project/Build 等。

19. apply_text_edits

  • 描述: 应用文本编辑
  • 参数:
    • filePath: 文件路径,如 db://assets/scripts/TestScript.ts
    • edits: 编辑操作列表
      • type: 操作类型(insert, delete, replace
      • position: 插入位置(用于 insert 操作)
      • start: 开始位置(用于 deletereplace 操作)
      • end: 结束位置(用于 deletereplace 操作)
      • text: 文本内容(用于 insertreplace 操作)

20. read_console

  • 描述: 读取控制台
  • 参数:
    • limit: 输出限制(可选)
    • type: 输出类型(log, error, warn)(可选)

21. validate_script

  • 描述: 验证脚本
  • 参数:
    • filePath: 脚本路径,如 db://assets/scripts/TestScript.ts
    • 注意:对于 TypeScript 文件,仅进行基础语法结构检查,不进行完整编译验证。

22. find_in_file

  • 描述: 全局文件搜索
  • 参数:
    • query: 搜索关键词
    • extensions: 文件后缀列表 (可选,默认 ['.js', '.ts', '.json', '.fire', '.prefab', '.xml', '.txt', '.md'])
    • includeSubpackages: 是否搜索子包 (可选,默认 true)

23. manage_undo

  • 描述: 撤销/重做管理
  • 参数:
    • action: 操作类型 (undo, redo, begin_group, end_group, cancel_group)
    • description: 撤销组描述 (用于 begin_group)

24. manage_vfx

  • 描述: 特效(粒子)管理。重要提示:操作前必须确认父节点或目标节点的有效性。
  • 参数:
    • action: 操作类型 (create, update, get_info)
    • nodeId: 节点 UUID (用于 update, get_info)
    • name: 节点名称 (用于 create)
    • parentId: 父节点 UUID (用于 create)
    • properties: 粒子属性对象
      • duration, emissionRate, life, lifeVar, startColor, endColor
      • startSize, endSize, speed, angle, gravity, file (plist/texture)

25. manage_animation

  • 描述: 管理节点的动画组件
  • 参数:
    • action: 操作类型 (get_list, get_info, play, stop, pause, resume)
    • nodeId: 节点 UUID
    • clipName: 动画剪辑名称 (用于 play 操作,可选,默认播放 defaultClip)

26. get_sha

  • 描述: 获取指定文件的 SHA-256 哈希值
  • 参数:
    • path: 文件路径,如 db://assets/scripts/Test.ts

技术实现

架构设计

插件采用了典型的 Cocos Creator 扩展架构,包含以下几个部分:

  • main.js: 插件主入口,负责启动 HTTP 服务和处理 MCP 请求
  • scene-script.js: 场景脚本,负责实际执行节点操作
  • panel/: 面板界面,提供用户交互界面
    • index.html: 面板 UI 结构
    • index.js: 面板交互逻辑

HTTP 服务

插件内置了一个 HTTP 服务器,提供了两个主要接口:

  • GET /list-tools: 返回所有可用的 MCP 工具定义
  • POST /call-tool: 执行具体的工具操作

MCP 协议集成

插件遵循 MCP (Model Context Protocol) 标准,使得外部 AI 工具能够理解并调用 Cocos Creator 的功能。

数据流

  1. 外部工具发送 MCP 请求到插件的 HTTP 接口
  2. main.js 接收请求并解析参数
  3. 通过 Editor.Scene.callSceneScript 将请求转发给 scene-script.js
  4. scene-script.js 在场景线程中执行具体操作
  5. 将结果返回给外部工具

开发指南

添加新功能

要在插件中添加新的 MCP 工具,需要:

  1. 在 main.js 的 /list-tools 响应中添加工具定义
  2. 在 handleMcpCall 函数中添加对应的处理逻辑
  3. 如需在场景线程中执行,需要在 scene-script.js 中添加对应函数

日志管理

插件会记录所有操作的日志,包括:

  • 服务启动/停止
  • MCP 请求接收
  • 操作成功/失败状态
  • 错误信息

注意事项

  • 插件需要在 Cocos Creator 环境中运行
  • HTTP 服务会占用指定端口,请确保端口未被其他程序占用
  • 插件会自动标记场景为"已修改",请注意保存场景
  • 不同版本的 Cocos Creator 可能会有 API 差异,请根据实际情况调整

AI 操作安全守则 (Subject Validation Rule)

为了保证自动化操作的稳定性,AI 在使用本插件工具时必须遵循以下守则:

  1. 确定性优先:任何对节点、组件、属性的操作,都必须建立在“主体已确认存在”的基础上。
  2. 校验流程
    • 节点校验:操作前必须使用 get_scene_hierarchy 确认节点。
    • 组件校验:操作组件前必须使用 get(通过 manage_components)确认组件存在。
    • 属性校验:更新属性前必须确认属性名准确无误。
  3. 禁止假设:禁止盲目尝试对不存在的对象或属性进行修改。

贡献

欢迎提交 Issue 和 Pull Request 来改进这个插件!

许可证

GNU AFFERO GENERAL PUBLIC LICENSE
Version 3, 19 November 2007

允许任何人获取、使用、修改和分发本软件,但必须遵守以下条件:

  1. 分发修改后的版本时,必须以相同的许可证公开源代码
  2. 通过网络提供服务时,也必须向用户提供源代码
  3. 任何衍生作品也必须遵循相同的许可证条款

完整的许可证文本可在项目根目录的 LICENSE 文件中找到。

dgflash/mcp-bridge | GitHunt