Cocos创建者MCP
MCP(模型上下文协议) Cocos Creator 3.8+的服务器扩展。
像Claude这样的人工智能助手可以通过这个扩展来控制Cocos Creator编辑器——创建节点、编辑场景、管理预制件、构建项目等等。
特性
- 164工具 跨越13个类别——全面的编辑器自动化
- 流式HTTP(SSE) --原生支持MCP的流式HTTP传输
- JSON-RPC 2.0 --符合标准MCP协议
- 预制性能持久性 --保存预制件时,组件属性得到正确保留
- 在编辑器中预览 --以编程方式启动编辑器预览(无需手动点击按钮)
- 电脑屏幕截图工具 --捕获编辑器窗口和游戏预览屏幕截图(WebP/PNG)
- 视频录制 --通过预览录制器面板将游戏预览画布录制为视频(MP4/WebM)
- 游戏命令控制 --发送命令以运行游戏预览(截图、点击、导航、状态、检查)
- 客户端脚本 --插入TypeScript文件以集成游戏预览(
client/) - 自动启动 --当扩展加载时,服务器会自动启动
- 工具调用记录 --所有工具调用都记录了调试时间
- UUID验证 --输入验证助手以获得更好的错误消息
- 国际化 --英语、日语、中文
- 回归测试 --涵盖核心工具流的200多个断言
快速开始
1.安装
将此扩展复制或符号链接到您的Cocos Creator项目中 extensions/ 目录:
# Windows (Junction — no admin required)
mklink /J "your-project\extensions\cocos-creator-mcp" "path\to\cocos-creator-mcp"
# macOS / Linux
ln -s /path/to/cocos-creator-mcp your-project/extensions/cocos-creator-mcp2.建造
cd cocos-creator-mcp
npm install
npm run build3.在Cocos Creator中启用
- 在Cocos Creator中打开您的项目
- 首选 扩展>扩展管理器
- 启用 Cocos创建者MCP
- 打开面板: 扩展>Cocos Creator MCP>打开面板
- 点击 启动服务器 (或设置
autoStart: true在配置中)
4.从克劳德代码连接
从下面两种运输方式中选择一种。
选项A--stdio桥(建议用于Claude Code VSCode扩展)
Claude Code VSCode扩展目前有一个错误,它无条件地 尝试为HTTP类型的MCP服务器进行OAuth动态客户端注册,但失败 和 SDK auth failed (见上游问题 #26917, #38102, #29697). 为了完全避免这种情况,请使用捆绑的stdio网桥。它在上讲JSON-RPC stdin/stdout并在内部转发到HTTP服务器。
{
"mcpServers": {
"cocos-creator-mcp": {
"command": "node",
"args": [
"/cocos-creator-mcp/client/stdio-bridge.js"
]
}
}
}可选环境变量: COCOS_MCP_URL (默认值 http://127.0.0.1:3000/mcp).
选项B——直接HTTP
适用于Claude Code CLI、Cursor、Cline和其他不强制执行的客户端 HTTP MCP上的OAuth。服务器提供最少的虚拟OAuth端点 (/.well-known/oauth-*, /oauth/register|authorize|token)因此OAuth要求 客户端仍然可以在本地主机上完成形式流。
{
"mcpServers": {
"cocos-creator-mcp": {
"type": "http",
"url": "http://127.0.0.1:3000/mcp"
}
}
}一旦上游问题出现,虚拟OAuth端点将被删除 (#26917, #38102) 或者引入真正的身份验证。
5.验证
curl http://127.0.0.1:3000/health
# {"status":"ok","tools":164}可用工具(164)
Scene (6) — Scene lifecycle and hierarchy
| 工具 | 说明 |
|---|---|
scene_get_hierarchy | 获取节点树(包含可选组件信息) |
scene_open | 通过UUID或db://path打开场景 |
scene_save | 保存当前场景 |
scene_get_list | 列出所有.scene文件 |
scene_close | 关闭当前场景 |
scene_get_current | 获取当前场景的名称和UUID |
Scene Advanced (30) — Undo, clipboard, queries, property manipulation
| 工具 | 说明 |
|---|---|
scene_execute_script | 执行自定义场景脚本方法 |
scene_snapshot | 拍摄快照以进行撤消 |
scene_snapshot_abort | 中止当前撤消快照 |
scene_begin_undo | 开始记录撤消操作 |
scene_end_undo | 结束撤消录制 |
scene_cancel_undo | 取消撤消录制 |
scene_query_dirty | 检查场景是否有未保存的更改 |
scene_query_ready | 检查场景是否已完全加载 |
scene_query_classes | 列出所有可用的组件类 |
scene_query_components | 节点的查询组件 |
scene_query_component_has_script | 检查组件是否有脚本文件 |
scene_query_node_tree | 从编辑器获取原始节点树 |
scene_query_node | 获取节点的完整属性转储 |
scene_query_component | 获取组件的完整属性转储 |
scene_query_nodes_by_asset | 查找引用资源的节点 |
scene_query_scene_bounds | 获取场景边界矩形 |
scene_soft_reload | 软重载场景 |
scene_reset_node_transform | 将转换重置为默认值 |
scene_reset_property | 将特定属性重置为默认值 |
scene_reset_component | 将组件重置为默认值 |
scene_copy_node | 将节点复制到剪贴板 |
scene_paste_node | 从剪贴板粘贴节点 |
scene_cut_node | 将节点剪切到剪贴板 |
scene_create | 创建新的空场景 |
scene_save_as | 将场景保存到新文件 |
scene_set_parent | 使用官方API重新修复节点 |
scene_restore_prefab | 将预制节点恢复到原始状态 |
scene_execute_component_method | 调用组件上的方法 |
scene_move_array_element | 重新排序数组属性元素 |
scene_remove_array_element | 删除数组属性元素 |
Scene View (19) — Gizmo, camera, grid, viewport
| 工具 | 说明 |
|---|---|
view_change_gizmo_tool | 切换小控件工具(移动/旋转/缩放/定向) |
view_query_gizmo_tool | 获取当前小控件工具 |
view_change_gizmo_pivot | 更改枢轴模式(中心/枢轴) |
view_query_gizmo_pivot | 获取当前枢轴模式 |
view_change_gizmo_coordinate | 更改坐标系(局部/全局) |
view_query_gizmo_coordinate | 获取当前坐标系 |
view_change_mode_2d_3d | 切换二维/三维视图 |
view_query_mode_2d_3d | 获取当前视图模式 |
view_set_grid_visible | 显示/隐藏网格 |
view_query_grid_visible | 检查网格可见性 |
view_set_icon_gizmo_3d | 切换3D图标小控件 |
view_query_icon_gizmo_3d | 检查3D图标小控件状态 |
view_set_icon_gizmo_size | 设置图标小控件大小 |
view_query_icon_gizmo_size | 获取图标小控件大小 |
view_focus_on_node | 将相机聚焦在节点上 |
view_align_with_view | 将节点与摄影机视图对齐 |
view_align_view_with_node | 将相机与节点对齐 |
view_get_status | 一次获取所有视图设置 |
view_reset | 将场景视图重置为默认值 |
Node (14) — Create, edit, move, delete nodes
| 工具 | 说明 |
|---|---|
node_create | 创建节点(带可选组件) |
node_get_info | 获取节点详细信息(位置、比例、组件) |
node_find_by_name | 按名称查找节点 |
node_set_property | 设置节点属性 |
node_set_transform | 立即设置位置/旋转/比例 |
node_set_active | 设置节点可见性 |
node_set_layer | 设置节点层 |
node_delete | 删除节点 |
node_move | 将节点移动到新父节点 |
node_duplicate | 重复节点 |
node_get_all | 列出所有节点 |
node_detect_type | 检测节点类型(2D/3D/node) |
node_create_tree | 在一次调用中创建节点层次结构(v1.6) |
node_set_layout | 立即设置UITransform+Widget+颜色/不透明度(v1.13) |
Component (8) — Add, remove, configure components
| 工具 | 说明 |
|---|---|
component_add | 添加组件(例如。 cc.Label, cc.Sprite) |
component_remove | 移除组件 |
component_get_components | 列出节点上的组件 |
component_set_property | 设置组件属性(Label.string、fontSize等) |
component_get_info | 通过UUID获取完整的组件转储 |
component_get_available | 列出所有可用的组件类 |
component_auto_bind | 自动匹配 @property 按名称将字段转换为节点(v1.12) |
component_query_enum | 查询组件属性的枚举值(v1.6) |
Prefab (12) — Prefab lifecycle and validation
| 工具 | 说明 |
|---|---|
prefab_list | 列出所有预制件 |
prefab_create | 从节点创建预制件(保留特性) |
prefab_instantiate | 将预制件实例化到场景中 |
prefab_get_info | 获取预制资产信息 |
prefab_update | 应用预制更改 |
prefab_revert | 将预制实例还原为原始实例 |
prefab_duplicate | 将预制件复制到新路径 |
prefab_validate | 验证预制件是否有损坏的引用 |
prefab_open | 打开前言进行编辑(v1.5) |
prefab_close | 关闭预制编辑模式并返回场景(v1.5) |
prefab_create_and_replace | 在一次调用中创建预制件并替换实例(v1.5) |
prefab_create_from_spec | 一次调用创建节点树+自动绑定+prefab_Create(v1.12) |
Asset (18) — CRUD, queries, metadata, dependencies
| 工具 | 说明 |
|---|---|
asset_create | 创建新资产 |
asset_delete | 删除资产 |
asset_move | 移动/重命名资源 |
asset_copy | 复制资产 |
asset_save | 保存资产 |
asset_reimport | 再进口资产 |
asset_import | 将外部文件导入项目 |
asset_query_path | 获取UUID的文件路径 |
asset_query_uuid | 获取路径的UUID |
asset_query_url | 获取UUID的URL |
asset_get_details | 获取资产元数据 |
asset_get_dependencies | 获取资产依赖关系 |
asset_open_external | 在外部编辑器中打开 |
asset_save_meta | 保存资产元/导入器设置 |
asset_generate_available_url | 生成不冲突的资产路径 |
asset_query_ready | 检查资产数据库是否准备就绪 |
asset_query_users | 查找引用此资产的资产 |
asset_query_missing | 检查缺少的参考文献 |
Project (8) — Project info, settings, engine
| 工具 | 说明 |
|---|---|
project_get_info | 获取项目名称和路径 |
project_refresh_assets | 刷新资产数据库 |
project_get_asset_info | 通过UUID获取资产信息 |
project_find_asset | 按glob模式查找资产 |
project_get_settings | 获取项目设置 |
project_set_settings | 设置项目设置 |
project_get_engine_info | 获取引擎版本和路径 |
project_query_scripts | 查询所有脚本插件 |
Preferences (4) — Editor preferences
| 工具 | 说明 |
|---|---|
preferences_get | 获取偏好值 |
preferences_set | 设置首选项值 |
preferences_get_all | 获取协议的所有首选项 |
preferences_reset | 将首选项重置为默认值 |
Debug (22) — Editor info, logs, preview, screenshots, recording, game control
| 工具 | 说明 |
|---|---|
debug_get_editor_info | 获取编辑器版本和环境 |
debug_list_messages | 列出可用编辑器消息 |
debug_execute_script | 执行场景脚本方法 |
debug_get_console_logs | 获取控制台日志条目(场景+游戏预览) |
debug_clear_console | 清除编辑器控制台和日志缓冲区 |
debug_preview | 在编辑器中开始预览(播放按钮) |
debug_clear_code_cache | 清除代码缓存(开发人员>缓存) |
debug_screenshot | 捕获编辑器窗口截图 |
debug_game_command | 发送命令到游戏预览(截图/点击/导航/状态/检查) |
debug_batch_screenshot | 导航到多个页面并对每个页面进行截图 |
debug_record_start | 开始录制游戏预览画布(webm/mp4) |
debug_record_stop | 停止录制并保存视频文件 |
debug_reload_extension | 重新加载此MCP扩展(构建后) |
debug_list_extensions | 列出已安装的扩展 |
debug_get_extension_info | 获取扩展详细信息 |
debug_get_project_logs | 读取项目日志条目 |
debug_search_project_logs | 项目日志中的搜索模式 |
debug_get_log_file_info | 获取日志文件元数据 |
debug_validate_scene | 验证场景中的常见问题 |
debug_query_devices | 列出已连接的设备 |
debug_open_url | 在系统浏览器中打开URL |
debug_wait_compile | 等待TypeScript编译完成(v1.12) |
Server (7) — Editor server and network
| 工具 | 说明 |
|---|---|
server_query_ip_list | 获取编辑器服务器IP |
server_query_port | 获取编辑器服务器端口 |
server_get_status | 获取完整服务器状态 |
server_check_connectivity | 检查编辑器服务器是否可访问 |
server_get_network_interfaces | 获取网络接口详细信息 |
server_get_build_hash | 获取MCP dist文件的构建哈希(v1.6) |
server_check_code_sync | 检查运行时是否与dist-hash(v1.6)匹配 |
Builder (5) — Build and preview
| 工具 | 说明 |
|---|---|
builder_open_panel | 打开“构建”面板 |
builder_get_settings | 获取构建配置 |
builder_query_tasks | 查询活动生成任务 |
builder_run_preview | 启动预览服务器 |
builder_stop_preview | 停止预览服务器 |
Reference Image (11) — Scene overlay images
| 工具 | 说明 |
|---|---|
refimage_add | 添加参考图像 |
refimage_remove | 删除参考图像 |
refimage_list | 列出所有参考图像 |
refimage_clear_all | 删除所有参考图像 |
refimage_switch | 切换活动参考图像 |
refimage_set_position | 设置图像位置 |
refimage_set_scale | 设置图像比例 |
refimage_set_opacity | 设置图像不透明度 |
refimage_query_config | 获取参考图像配置 |
refimage_query_current | 获取当前活动图像信息 |
refimage_refresh | 刷新图像显示 |
客户端脚本
这 client/ 目录包含用于游戏预览和MCP服务器之间运行时通信的TypeScript文件。由于扩展安装在 extensions/,这些文件可以直接导入,无需复制。
McpConsoleCapture
捕获 console.log/warn/error 并将它们发送到MCP服务器。
// Import from extensions/ (adjust relative path as needed)
import { initMcpConsoleCapture } from "../../extensions/cocos-creator-mcp/client/McpConsoleCapture";
initMcpConsoleCapture();McpDebugClient
启用AI驱动的游戏控制:屏幕截图、节点点击和自定义命令。
import { initMcpDebugClient } from "../../extensions/cocos-creator-mcp/client/McpDebugClient";
initMcpDebugClient({
customCommands: {
// Add project-specific commands
state: () => ({ success: true, data: { dump: MyDb.dump() } }),
navigate: async (args) => {
await MyRouter.goTo(args.page);
return { success: true };
},
},
});内置命令 (无需设置):
screenshot--通过RenderTexture捕获游戏屏幕click--按名称单击节点
自定义命令 (项目特定):
- 通过注册任何处理程序
customCommands选项 - 通过拨打电话
debug_game_commandMCP工具
当MCP服务器未运行时,这两个脚本都会自动忽略,因此它们可以安全地留在开发版本中。
控制台日志捕获(详细信息)
debug_get_console_logs 从两个来源捕获日志:
场景处理日志(自动)
场景脚本的控制台输出(console.log/warn/error 在场景渲染过程中)被自动捕获。无需设置。
游戏预览日志(选择加入)
游戏代码在预览期间在浏览器中运行,这是一个单独的过程。要捕获游戏预览日志,您的游戏代码需要将日志发送到MCP服务器 /log 终点。
设置:
将控制台捕获脚本添加到您的游戏项目中:
const MCP_LOG_URL = "http://127.0.0.1:3000/log";
const FLUSH_INTERVAL = 500;
let buffer: Array = [];
function hook(level: string, original: (...args: any[]) => void) {
return function (...args: any[]) {
original.apply(console, args);
buffer.push({
timestamp: new Date().toISOString(),
level,
message: args.map(a => typeof a === "string" ? a : JSON.stringify(a)).join(" "),
});
};
}
console.log = hook("log", console.log);
console.warn = hook("warn", console.warn);
console.error = hook("error", console.error);
setInterval(() => {
if (buffer.length === 0) return;
const entries = buffer.splice(0, 50);
fetch(MCP_LOG_URL, {
method: "POST",
headers: { "Content-Type": "application/json" },
body: JSON.stringify(entries),
}).catch(() => {}); // silently ignore if MCP server is not running
}, FLUSH_INTERVAL);POST /log 格式:
[
{ "timestamp": "2026-03-26T12:00:00.000Z", "level": "log", "message": "Hello" },
{ "timestamp": "2026-03-26T12:00:01.000Z", "level": "error", "message": "Something failed" }
]当通过以下方式检索时,场景和游戏日志都会按时间顺序合并 debug_get_console_logs每个日志条目都包含一个 source 现场("scene" 或 "game")以区分起源。
配置
设置存储在 {project}/settings/cocos-creator-mcp.json:
{
"port": 3000,
"autoStart": true
}| 选项 | 默认值 | 描述 |
|---|---|---|
port | 3000 | HTTP服务器端口 |
autoStart | false | 加载扩展时自动启动服务器 |
测试
node test/regression.mjs # default port 3000
node test/regression.mjs 3001 # custom port版本历史记录
- v0.1 --MCP服务器+场景/节点工具(13个工具)
- v0.5 --组件、预制件、项目、调试工具(27个工具)
- v1.0 --全工具覆盖(145个工具,13个类别,224个测试断言)
- v1.1 --控制台日志捕获(场景过程自动捕获+游戏预览
/log端点) - v1.2 --AI自主开发:在编辑器中预览、截图、游戏命令控制、代码缓存清除、场景保存修复。用于游戏预览集成的客户端脚本(
client/) - v1.3 —
scene:set-property对于prefab保存支持,prefab_create覆盖保护,参数别名(component→componentType) - v1.5 —
prefab_create_and_replace,批次set_property,prefab_open - v1.6 —
debug_batch_screenshot中的小部件支持create_tree,component_query_enum,server_check_code_sync - v1.8.0 --预览记录器面板:
debug_record_start/debug_record_stop(通过canvas.captureStream、MP4/WebM、质量预设的MediaRecorder) - v1.8.1 --修复:
component_set_property未指定类型时,cc.资产引用(cc.Font等)回退到cc.Node - v1.8.2 --预览录制器:屏幕截图按钮(webp/png切换,最大宽度),基于部分的UI布局
- v1.9.0 --预览记录器自动存档旧记录+飞行前“预览未运行”检查
- v1.10.0 —
scene_create资产数据库回退、字符串化参数预防性验证、测试覆盖率扩展 - v1.11.0 --HTTP MCP OAuth解决方法(stdio桥+克劳德代码VSCode上游错误的虚拟OAuth端点)+场景切换工具的对话预防(
force参数,ensureSceneSafeToSwitch,safeSaveScene)+两者的回归测试 - v1.12.0 --预制创作效率:
component_auto_bind(自动匹配@property字段到节点名称),debug_wait_compile(等待TS编译完成),prefab_create_from_spec(在一次调用中创建节点树+自动绑定+prefab_create) - v1.13.0 —
nodeName组件/组件/自动绑定上的参数(不需要UUID),screenshot自动返回选项打开component_set_property/node_set_layout,node_set_layout统一工具(UITransform+Widget+颜色/不透明度在一次调用中),无标题+脏场景的对话框自动响应,共享截图/节点解析实用程序 - v1.14.0 --小工具
_alignFlags自动重新计算错误修复:setProperty/setProperties/node_set_layout现在重新查询isAlign*场景值和重建_alignFlagsisAlign更新后的位掩码(编辑器错误,位掩码未自动更新,导致序言保存为_alignFlags: 45卡住状态)。此外node_create组件添加现在等待编辑器反射(waitForComponent)修复片状测试
发展
npm run watch # Watch mode
npm run build # One-time build构建完成后,在Cocos Creator中重新加载扩展:
- 扩展管理器 --禁用然后重新启用
- 开发者>重新加载 --重新加载主进程
- 完全重新启动 --场景脚本或新类别更改所需
需求
- Cocos Creator 3.8+
- Node.js 18+
已知限制
scene_create:在Cocos Creator 3.8.x上不起作用,因为底层scene:new-scene该版本上未显示编辑器消息。作为解决方法,创建.sceneJSON文件直接位于db://assets/并呼叫project_refresh_assets所以编辑把它捡了起来。看 #13 了解详情。
prefab_create_from_spec--资产引用保存为原始UUID字符串:
当规格 properties 包含资产引用,如 cc.Sprite.spriteFrame 或 cc.Prefab 字段,它们被序列化为生成的 .prefab 作为原始UUID字符串,而不是必需的 {__uuid__, __expectedType__} 对象形式。Cocos运行时无法解析它们(例如。 Simple.updateUVs 抛出具有未解析spriteFrame的Sprite的每一帧)。解决方法:对生成的数据进行后处理 .prefab 用于包装资源引用的文件。
修复脚本示例:
// fix-prefab-asset-refs.js — run after prefab_create_from_spec
const re = /"_spriteFrame":\s*"([a-f0-9\-]+(?:@[a-z0-9]+)?)"/g;
content = content.replace(re, (_, uuid) =>
`"_spriteFrame": { "__uuid__": "${uuid}", "__expectedType__": "cc.SpriteFrame" }`
);设置时也适用相同的模式 cc.Prefab 字段通过 component_set_property --忽略值对象表单,并写入原始UUID。直接的 .prefab JSON编辑是可靠的解决方法,直到修复。
许可证
麻省理工学院
