# 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 配置: ```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`: 坐标 - `scaleX`, `scaleY`: 缩放值 - `color`: HEX 颜色代码(如 #FF0000)(支持撤销操作) ### 6. open_scene - **描述**: 在编辑器中打开指定的场景文件 - **参数**: - `url`: 场景资源路径,如 `db://assets/NewScene.fire` ### 7. create_node - **描述**: 在当前场景中创建一个新节点 - **参数**: - `name`: 节点名称 - `parentId`: 父节点 UUID (可选,不传则挂在场景根部) - `type`: 节点预设类型(`empty`, `sprite`, `label`, `canvas`) ### 8. manage_components - **描述**: 管理节点组件 - **参数**: - `nodeId`: 节点 UUID - `action`: 操作类型(`add`, `remove`, `get`) - `componentType`: 组件类型,如 `cc.Sprite`(用于 `add` 操作) - `componentId`: 组件 ID(用于 `remove` 操作) - `properties`: 组件属性(用于 `add` 操作)。**智能特性**:如果属性期望组件类型但传入节点UUID,插件会自动查找匹配组件。 ### 9. manage_script - **描述**: 管理脚本文件,默认创建 TypeScript 脚本 - **参数**: - `action`: 操作类型(`create`, `delete`, `read`, `write`) - `path`: 脚本路径,如 `db://assets/scripts/NewScript.ts` - `content`: 脚本内容(用于 `create` 和 `write` 操作) - `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 - **描述**: 场景管理 - **参数**: - `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(用于 `create` 和 `update` 操作) - `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 - **描述**: 管理材质 - **参数**: - `action`: 操作类型(`create`, `delete`, `get_info`) - `path`: 材质路径,如 `db://assets/materials/NewMaterial.mat` - `properties`: 材质属性(用于 `create` 操作) - `uniforms`: 材质 uniforms ### 17. manage_texture - **描述**: 管理纹理 - **参数**: - `action`: 操作类型(`create`, `delete`, `get_info`) - `path`: 纹理路径,如 `db://assets/textures/NewTexture.png` - `properties`: 纹理属性(用于 `create` 操作) - `width`: 宽度 - `height`: 高度 - `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`: 开始位置(用于 `delete` 和 `replace` 操作) - `end`: 结束位置(用于 `delete` 和 `replace` 操作) - `text`: 文本内容(用于 `insert` 和 `replace` 操作) ### 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 差异,请根据实际情况调整 ## 贡献 欢迎提交 Issue 和 Pull Request 来改进这个插件! ## 许可证 GNU AFFERO GENERAL PUBLIC LICENSE Version 3, 19 November 2007 允许任何人获取、使用、修改和分发本软件,但必须遵守以下条件: 1. 分发修改后的版本时,必须以相同的许可证公开源代码 2. 通过网络提供服务时,也必须向用户提供源代码 3. 任何衍生作品也必须遵循相同的许可证条款 完整的许可证文本可在项目根目录的 LICENSE 文件中找到。