Initial commit: funplay cocos mcp
This commit is contained in:
@@ -0,0 +1,290 @@
|
||||
# Funplay Cocos MCP
|
||||
|
||||
一个嵌入在 `Cocos Creator 3.x` 扩展里的 MCP Server,对齐了你现有 `unity-mcp` 的核心思路:
|
||||
|
||||
- 编辑器内嵌 HTTP MCP 服务
|
||||
- `execute_javascript` 作为统一主工具
|
||||
- `tools / resources / prompts` 三层能力
|
||||
- 场景树、节点、文件系统、项目上下文的统一访问
|
||||
|
||||
当前实现更偏向 Unity MCP 的 `core` 能力集,而不是一次性把全部 Unity 工具逐个照搬。
|
||||
|
||||
## 已实现能力
|
||||
|
||||
- MCP 协议:
|
||||
- `initialize`
|
||||
- `tools/list`
|
||||
- `tools/call`
|
||||
- `resources/list`
|
||||
- `resources/read`
|
||||
- `resources/templates/list`
|
||||
- `prompts/list`
|
||||
- `prompts/get`
|
||||
- 核心工具:
|
||||
- `execute_javascript`
|
||||
- `execute_scene_script`
|
||||
- `execute_editor_script`
|
||||
- `get_scene_info`
|
||||
- `get_hierarchy`
|
||||
- `find_nodes`
|
||||
- `inspect_node`
|
||||
- `list_components`
|
||||
- `inspect_component`
|
||||
- `list_cameras`
|
||||
- `list_animations`
|
||||
- `play_animation`
|
||||
- `stop_animation`
|
||||
- `get_project_info`
|
||||
- `list_scenes`
|
||||
- `open_scene`
|
||||
- `list_prefabs`
|
||||
- `list_assets`
|
||||
- `inspect_asset`
|
||||
- `open_asset`
|
||||
- `select_asset`
|
||||
- `get_editor_selection`
|
||||
- `read_file`
|
||||
- `get_file_snippet`
|
||||
- `write_file`
|
||||
- `replace_in_file`
|
||||
- `search_files`
|
||||
- `list_directory`
|
||||
- `exists`
|
||||
- `refresh_assets`
|
||||
- `run_script_diagnostics`
|
||||
- `get_script_diagnostic_context`
|
||||
- `capture_desktop_screenshot`
|
||||
- `capture_editor_screenshot`
|
||||
- `capture_scene_screenshot`
|
||||
- `capture_game_screenshot`
|
||||
- `capture_preview_screenshot`
|
||||
- `list_editor_windows`
|
||||
- `get_runtime_state`
|
||||
- `pause_runtime`
|
||||
- `resume_runtime`
|
||||
- `set_time_scale`
|
||||
- `emit_node_event`
|
||||
- `simulate_button_click`
|
||||
- `invoke_component_method`
|
||||
- `simulate_mouse_click`
|
||||
- `simulate_mouse_drag`
|
||||
- `simulate_key_press`
|
||||
- `simulate_key_combo`
|
||||
- `simulate_preview_input`
|
||||
- `full` 模式附加工具:
|
||||
- `create_node`
|
||||
- `delete_node`
|
||||
- `set_node_transform`
|
||||
- `add_component`
|
||||
- `remove_component`
|
||||
- `set_component_property`
|
||||
- `reset_component_property`
|
||||
- `create_canvas`
|
||||
- `create_label`
|
||||
- `create_button`
|
||||
- `create_sprite`
|
||||
- `create_camera`
|
||||
- `set_camera_properties`
|
||||
- `add_animation_clip`
|
||||
- `instantiate_prefab`
|
||||
- `run_scene_asset`
|
||||
- `delete_asset`
|
||||
- 资源:
|
||||
- `cocos://project/context`
|
||||
- `cocos://project/summary`
|
||||
- `cocos://scene/active`
|
||||
- `cocos://scene/current`
|
||||
- `cocos://selection/current`
|
||||
- `cocos://selection/asset`
|
||||
- `cocos://errors/scripts`
|
||||
- `cocos://mcp/interactions`
|
||||
|
||||
## 安装方式
|
||||
|
||||
把当前目录作为 Cocos Creator 扩展放到:
|
||||
|
||||
- 项目级:`<你的项目>/extensions/funplay-cocos-mcp`
|
||||
- 全局级:`<Cocos Creator 用户扩展目录>/funplay-cocos-mcp`
|
||||
|
||||
然后重启 Cocos Creator,扩展会默认自动启动 MCP 服务。
|
||||
|
||||
默认地址:
|
||||
|
||||
- `http://127.0.0.1:8765/`
|
||||
|
||||
## 图形化面板
|
||||
|
||||
扩展启用后,可以在 Cocos Creator 顶部菜单打开:
|
||||
|
||||
- `Funplay -> MCP Server`
|
||||
|
||||
面板里可以直接完成:
|
||||
|
||||
- 启动 / 停止 / 重启 MCP Server
|
||||
- 查看当前 URL、端口、Profile、项目名
|
||||
- 保存 `host / port / toolProfile / autostart` 配置
|
||||
- 一键写入 MCP Client 配置
|
||||
- 复制 Codex TOML 或 JSON MCP Client 配置
|
||||
- 查看工具列表、资源列表、最近交互日志
|
||||
- 直接从 Cocos 里调用工具并填写 JSON 参数
|
||||
- Quick Actions 优先给出 `execute_javascript`
|
||||
- 一键测试 `execute_javascript`、`get_project_info`、`get_scene_info`、`get_hierarchy`、截图、诊断等常用工具
|
||||
|
||||
一键配置当前支持:
|
||||
|
||||
- Claude Code / Claude Desktop:`~/.claude.json`
|
||||
- Cursor:`~/.cursor/mcp.json`
|
||||
- VS Code:`~/.vscode/mcp.json`
|
||||
- Trae:`~/.trae/mcp.json`
|
||||
- Kiro:`~/.kiro/settings/mcp.json`
|
||||
- Codex:`~/.codex/config.toml`
|
||||
|
||||
面板会使用当前端口写入 `funplay_cocos` MCP server。写入后请重启对应客户端。
|
||||
|
||||
## 可选配置
|
||||
|
||||
在 Cocos 项目根目录放一个 `funplay-cocos-mcp.config.json`:
|
||||
|
||||
```json
|
||||
{
|
||||
"host": "127.0.0.1",
|
||||
"port": 8765,
|
||||
"toolProfile": "core",
|
||||
"autostart": true,
|
||||
"maxInteractionLogEntries": 50
|
||||
}
|
||||
```
|
||||
|
||||
也支持环境变量:
|
||||
|
||||
- `COCOS_MCP_HOST`
|
||||
- `COCOS_MCP_PORT`
|
||||
- `COCOS_MCP_PROFILE`
|
||||
|
||||
## MCP Client 示例
|
||||
|
||||
### Codex
|
||||
|
||||
```toml
|
||||
[mcp_servers.funplay_cocos]
|
||||
url = "http://127.0.0.1:8765/"
|
||||
```
|
||||
|
||||
### Claude / Cursor
|
||||
|
||||
```json
|
||||
{
|
||||
"mcpServers": {
|
||||
"funplay_cocos": {
|
||||
"url": "http://127.0.0.1:8765/"
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
## 推荐首测
|
||||
|
||||
先在 MCP Client 里调用:
|
||||
|
||||
1. `get_project_info`
|
||||
2. `get_scene_info`
|
||||
3. `get_hierarchy`
|
||||
4. `resources/read` with `cocos://project/context`
|
||||
5. `execute_javascript`(`context: "scene"`)
|
||||
6. `execute_javascript`(`context: "editor"`)
|
||||
7. `run_script_diagnostics`
|
||||
8. `capture_desktop_screenshot`
|
||||
9. `list_components`
|
||||
10. `get_script_diagnostic_context`
|
||||
11. `get_runtime_state`
|
||||
12. `capture_editor_screenshot`
|
||||
13. `list_editor_windows`
|
||||
14. `capture_scene_screenshot`
|
||||
15. `simulate_mouse_click`
|
||||
|
||||
其中 `execute_javascript` 是统一主工具,`execute_scene_script` / `execute_editor_script` 主要保留给兼容调用。
|
||||
|
||||
`execute_javascript` 示例,场景上下文:
|
||||
|
||||
```json
|
||||
{
|
||||
"context": "scene",
|
||||
"code": "return { sceneName: scene.name, rootCount: scene.children.length };"
|
||||
}
|
||||
```
|
||||
|
||||
`execute_javascript` 示例,编辑器上下文:
|
||||
|
||||
```json
|
||||
{
|
||||
"context": "editor",
|
||||
"code": "return { projectPath: context.projectPath, toolCount: helpers.listTools().length };"
|
||||
}
|
||||
```
|
||||
|
||||
`execute_scene_script.code` 兼容示例:
|
||||
|
||||
```js
|
||||
return {
|
||||
sceneName: scene.name,
|
||||
rootChildren: scene.children.map((node) => node.name),
|
||||
};
|
||||
```
|
||||
|
||||
## 和 Unity MCP 的对应关系
|
||||
|
||||
- Unity `execute_code` → Cocos `execute_javascript`
|
||||
- Unity `execute_code` 的场景/编辑器兼容拆分入口 → `execute_scene_script` / `execute_editor_script`
|
||||
- Unity `get_scene_info` → Cocos `get_scene_info`
|
||||
- Unity `get_hierarchy` → Cocos `get_hierarchy`
|
||||
- Unity `read_file/write_file/search_files` → 同名 Cocos 文件工具
|
||||
- Unity `resources/prompts` → 同结构的 Cocos 资源与提示词
|
||||
- Unity `core/full` → Cocos `toolProfile=core|full`
|
||||
|
||||
## 当前边界
|
||||
|
||||
这版已经进入第二阶段,补上了:
|
||||
|
||||
- 资产查询 / 打开 / 删除 / 选中
|
||||
- TypeScript 脚本诊断
|
||||
- 本机桌面截图回传 MCP image
|
||||
|
||||
现在第三段也补上了:
|
||||
|
||||
- 组件增删查改
|
||||
- Scene / Prefab 资产工具
|
||||
- 脚本修复辅助链路:`get_script_diagnostic_context` + `replace_in_file`
|
||||
|
||||
第四段继续补上了:
|
||||
|
||||
- UI 专用工具:Canvas / Label / Button / Sprite 创建
|
||||
- Camera 专用工具:列出、创建、属性设置
|
||||
- Animation 专用工具:列出、添加 Clip、播放、停止
|
||||
- 运行态控制:暂停、恢复、时间缩放、状态查询
|
||||
- 输入/交互模拟:按钮点击、节点事件、组件方法调用
|
||||
- 截图增强:桌面截图、Editor 窗口截图、场景截图别名
|
||||
|
||||
这次把之前两块缺口也补了:
|
||||
|
||||
- `capture_scene_screenshot` 现在优先按 Editor 内部面板区域裁剪,不再只是整窗截图别名
|
||||
- 新增 `capture_game_screenshot` / `capture_preview_screenshot`
|
||||
- 新增 `list_editor_windows` 方便先看 Cocos/Electron 当前有哪些窗口
|
||||
- 新增基于 Electron `webContents.sendInputEvent` 的底层输入注入:
|
||||
- `simulate_mouse_click`
|
||||
- `simulate_mouse_drag`
|
||||
- `simulate_key_press`
|
||||
- `simulate_key_combo`
|
||||
- `simulate_preview_input`
|
||||
|
||||
暂时还没有直接补齐 Unity MCP 里的这些能力:
|
||||
|
||||
- 对 Scene/Game 面板做“语义级”识别仍然是 best-effort,依赖当前 Cocos 面板 DOM 结构
|
||||
- Preview/Simulator 底层输入已经支持,但不同窗口标题和焦点状态可能需要先用 `list_editor_windows` 确认目标
|
||||
- 动画曲线/状态机深度编辑
|
||||
|
||||
如果你要,我下一步可以继续补下一阶段,专门给你做:
|
||||
|
||||
1. `SceneView/GameView 精确截图裁剪`
|
||||
2. `Preview/Simulator 键鼠事件注入`
|
||||
3. `动画曲线和状态机编辑`
|
||||
4. `更像 unity-mcp 的完整工具分层`
|
||||
Reference in New Issue
Block a user