Cocos MCP Log Bridge
by czh2774
Verified
# Cocos MCP 扩展使用指南
## 简介
Cocos MCP 是一个连接 Cocos Creator 编辑器和 Cursor AI 的桥接工具,允许 Cursor AI 直接与 Cocos Creator 项目交互。本扩展的主要功能包括:
- 日志查询和过滤
- 日志清除
- 场景信息获取和节点查询
- 场景操作(打开场景等)
- TCP 通信桥接
## 安装
### 前置条件
- Cocos Creator 3.8.0 或更高版本
- Python 3.7 或更高版本(用于 Cursor MCP 服务)
- uv 包管理器(用于管理 Python 依赖)
### 安装步骤
1. **安装扩展到 Cocos Creator**
将 `cocos-mcp` 文件夹复制到 Cocos Creator 项目的 `extensions` 目录下。路径结构应如下:
```
your-cocos-project/
├── assets/
├── extensions/
│ └── cocos-mcp/
│ ├── Editor/
│ ├── Python/
│ ├── dist/
│ └── package.json
└── ...
```
2. **安装 Python 依赖**
```bash
cd your-cocos-project/extensions/cocos-mcp/Python
uv pip install -r requirements.txt
```
3. **在 Cocos Creator 中启用扩展**
打开 Cocos Creator,进入 `扩展 -> 扩展管理器`,确保 `cocos-mcp` 扩展已启用。
## 配置 Cursor AI
1. 打开 Cursor AI 设置
2. 进入 MCP 配置页面
3. 添加以下命令来启动 MCP 服务器:
```bash
uv --directory "/path/to/your-cocos-project/extensions/cocos-mcp/Python" run server.py
```
注意:请将路径替换为实际的 cocos-mcp/Python 目录路径
## 功能详解
### 日志查询
日志查询功能允许你从 Cocos Creator 编辑器获取日志信息,并可以按类型过滤。
#### 在 Cursor AI 中查询日志
```python
response = await mcp.query_logs({
"show_logs": True, # 是否显示普通日志
"show_warnings": True, # 是否显示警告
"show_errors": True # 是否显示错误
})
```
#### 使用搜索词过滤日志
```python
response = await mcp.query_logs({
"show_logs": True,
"show_warnings": True,
"show_errors": True,
"search_term": "error" # 只显示包含 "error" 的日志
})
```
### 清除日志
```python
response = await mcp.clear_logs()
```
### 检查连接状态
```python
status = await mcp.connection_status()
```
### 场景工具
#### 获取当前场景信息
获取当前打开场景的基本信息,包括名称、UUID和节点数量。
```python
scene_info = await mcp.get_scene_info()
```
示例返回数据:
```json
{
"success": true,
"data": {
"name": "scene-2d",
"uuid": "2ba0a28b-5be6-420b-b7d3-c7ba097f13fa",
"nodeCount": 38
}
}
```
#### 列出场景中的所有节点
获取场景中所有节点的详细信息,包括名称、UUID、路径等。
```python
nodes = await mcp.list_scene_nodes()
```
示例返回数据(部分):
```json
{
"success": true,
"data": {
"nodeCount": 38,
"nodes": [
{
"name": "scene-2d",
"uuid": "2ba0a28b-5be6-420b-b7d3-c7ba097f13fa",
"path": "scene-2d",
"childCount": 3,
"active": true
},
{
"name": "Canvas",
"uuid": "beI88Z2HpFELqR4T5EMHpg",
"path": "scene-2d/Canvas",
"childCount": 1,
"active": true
},
// ... 更多节点
]
}
}
```
#### 打开场景
通过UUID打开指定的场景。
```python
result = await mcp.open_scene("2ba0a28b-5be6-420b-b7d3-c7ba097f13fa")
```
示例返回数据:
```json
{
"success": true,
"message": "Scene opened successfully"
}
```
## 工作原理
1. Cocos MCP 扩展在 Cocos Creator 中启动一个 TCP 服务器(默认端口:6400)
2. Python MCP 服务器连接到这个 TCP 服务器,并同时启动一个 WebSocket 服务器(默认端口:8765)
3. Cursor AI 通过 WebSocket 与 MCP 服务器通信,间接控制 Cocos Creator
## 技术说明
### 日志查询实现
Cocos MCP 扩展使用 `Editor.Logger.query()` API 获取 Cocos Creator 的日志,然后根据请求的参数进行过滤。由于 Cocos Creator 的 API 限制,所有日志都会先被获取,然后在内存中进行过滤。
### 场景脚本实现
场景工具通过 Cocos Creator 的场景脚本机制实现,主要包括以下步骤:
1. 在扩展的 `package.json` 中注册场景脚本
2. 实现场景脚本,访问场景和节点信息
3. 通过 TCP 通信桥将场景操作暴露给 Cursor AI
### TCP 通信协议
TCP 通信使用 JSON 格式的消息:
```json
{
"type": "COMMAND_TYPE",
"params": {
"param1": "value1",
"param2": "value2"
}
}
```
支持的命令类型:
- `QUERY_LOGS`: 查询日志
- `CLEAR_LOGS`: 清除日志
- `GET_SCENE_INFO`: 获取场景信息
- `LIST_SCENE_NODES`: 列出场景节点
- `OPEN_SCENE`: 打开场景
- `ping`: 连接测试
## 应用场景
### 场景一:调试游戏运行时错误
当你的 Cocos Creator 游戏在运行时出现错误时,可以使用 Cursor AI 快速分析问题:
1. 在 Cocos Creator 中运行游戏
2. 出现错误后,在 Cursor AI 中查询错误日志:
```python
errors = await mcp.query_logs({
"show_logs": False,
"show_warnings": False,
"show_errors": True
})
print("Found errors:", len(errors.get("logs", [])))
```
3. 让 Cursor AI 分析错误原因并提供解决方案
### 场景二:追踪特定模块的日志
当你需要关注游戏中特定模块(例如物理引擎)的日志时:
```python
physics_logs = await mcp.query_logs({
"show_logs": True,
"show_warnings": True,
"show_errors": True,
"search_term": "physics"
})
```
### 场景三:分析场景结构
当你需要了解当前场景的结构和组织方式时:
```python
# 获取场景信息
scene_info = await mcp.get_scene_info()
print(f"当前场景: {scene_info['data']['name']}, 包含 {scene_info['data']['nodeCount']} 个节点")
# 获取所有节点
nodes = await mcp.list_scene_nodes()
# 分析节点层次结构
root_nodes = [node for node in nodes['data']['nodes'] if '/' not in node['path']]
print(f"根节点数量: {len(root_nodes)}")
# 查找特定类型的节点,如相机
cameras = [node for node in nodes['data']['nodes'] if 'Camera' in node['name']]
print(f"找到 {len(cameras)} 个相机节点")
```
### 场景四:快速切换场景
在开发过程中需要频繁切换不同场景进行测试时:
```python
# 存储常用场景的UUID
scenes = {
"主菜单": "uuid-of-main-menu-scene",
"战斗": "uuid-of-battle-scene",
"商店": "uuid-of-shop-scene"
}
# 快速切换到指定场景
await mcp.open_scene(scenes["战斗"])
print("已切换到战斗场景")
```
## 高级用法
### 结合 Cursor AI 分析功能
你可以结合 Cursor AI 的强大分析能力,自动识别和解决问题:
```python
# 获取所有错误日志
errors = await mcp.query_logs({
"show_logs": False,
"show_warnings": False,
"show_errors": True
})
# 让 Cursor AI 分析每个错误并提供解决方案
for log in errors.get("logs", []):
print(f"分析错误: {log['message']}")
# Cursor AI 分析代码...
```
### 场景结构分析与优化
使用场景节点信息来分析游戏性能瓶颈:
```python
nodes = await mcp.list_scene_nodes()
# 查找子节点数量过多的节点(可能导致性能问题)
complex_nodes = []
for node in nodes['data']['nodes']:
if node['childCount'] > 20: # 假设超过20个子节点为复杂节点
complex_nodes.append(node)
print(f"发现 {len(complex_nodes)} 个复杂节点可能需要优化:")
for node in complex_nodes:
print(f" - {node['path']} (子节点数: {node['childCount']})")
```
### 自动清理日志
在开发过程中定期清理日志,保持日志简洁:
```python
# 每次测试前清理日志
await mcp.clear_logs()
print("日志已清理,开始新的测试...")
```
### 持续监控
设置定期查询,持续监控项目状态:
```python
import time
while True:
errors = await mcp.query_logs({
"show_logs": False,
"show_warnings": False,
"show_errors": True
})
if errors.get("logs", []):
print(f"检测到 {len(errors['logs'])} 个错误!")
# 处理错误...
time.sleep(5) # 每 5 秒检查一次
```
## 常见问题
### 日志查询返回空结果
如果日志查询返回空结果:
1. 确认 Cocos Creator 编辑器中有日志输出
2. 检查连接状态是否为 `connected: true`
3. 尝试清除日志后再生成新的日志
4. 重新启用 cocos-mcp 扩展
### 连接问题
如果 Cursor AI 无法连接到 Cocos Creator:
1. 确认 Cocos Creator 已启动并加载了 cocos-mcp 扩展
2. 检查 TCP 端口(6400)是否被占用
### 场景操作失败
如果场景相关操作失败:
1. 确认 Cocos Creator 处于编辑模式而非运行模式
2. 检查提供的场景 UUID 是否正确
3. 重新启动 Cocos Creator 和 MCP 服务器
## 最佳实践
1. **定期清除日志**:长时间运行会积累大量日志,影响查询性能
2. **使用精确的搜索词**:更精确的搜索词可以帮助你更快找到相关日志
3. **按类型过滤**:大多数情况下,错误和警告比普通日志更重要
4. **结合 Cursor AI 分析**:让 Cursor AI 自动分析日志,提供解决方案
5. **自动化工作流**:创建自动化脚本,简化日常开发任务
## 更新日志
### v1.0.0 (2025-03-21)
- 修复了日志查询功能
- 更新了类型定义
- 移除了不必要的调试代码
- 改进了错误处理