/ docs / README.zh.md
README.zh.md
  1  > **Language:** [English](../README.md) | [日本語](README.ja.md) | [Português (BR)](README.pt-br.md) | [Español](README.es.md) | [Русский](README.ru.md) | 简体中文 | [हिन्दी](README.hi.md)
  2  
  3  # Godot MCP Pro
  4  
  5  用于 AI 驱动 Godot 游戏开发的高级 MCP(Model Context Protocol)服务器。将 Claude 等 AI 助手直接连接到你的 Godot 编辑器,提供 **163 个强大工具**。
  6  
  7  ## 架构
  8  
  9  ```
 10  AI Assistant ←—stdio/MCP—→ Node.js Server ←—WebSocket:6505—→ Godot Editor Plugin
 11  ```
 12  
 13  - **实时通信**:WebSocket 连接意味着即时反馈,无需文件轮询
 14  - **编辑器集成**:完全访问 Godot 编辑器 API、UndoRedo 系统和场景树
 15  - **JSON-RPC 2.0**:带有正确错误代码和建议的标准协议
 16  
 17  ## 快速开始
 18  
 19  ### 1. 安装 Godot 插件
 20  
 21  将 `addons/godot_mcp/` 文件夹复制到你的 Godot 项目的 `addons/` 目录中。
 22  
 23  启用插件:**项目 → 项目设置 → 插件 → Godot MCP Pro → 启用**
 24  
 25  ### 2. 安装 MCP 服务器
 26  
 27  > **注意**:`server/` 目录仅包含在**完整包**(付费版)中。
 28  > 此 GitHub 仓库仅包含**插件(addon)**。
 29  > 请在 [godot-mcp.abyo.net](https://godot-mcp.abyo.net/) 购买完整包以获取服务器。
 30  
 31  ```bash
 32  cd server
 33  npm install
 34  npm run build
 35  ```
 36  
 37  ### 3. 配置 Claude Code
 38  
 39  在你的 `.mcp.json` 中添加:
 40  
 41  ```json
 42  {
 43    "mcpServers": {
 44      "godot-mcp-pro": {
 45        "command": "node",
 46        "args": ["D:/dev/godot-mcp-pro/server/build/index.js"],
 47        "env": {
 48          "GODOT_MCP_PORT": "6505"
 49        }
 50      }
 51    }
 52  }
 53  ```
 54  
 55  ### 4. 自动审批工具权限(推荐)
 56  
 57  Claude Code 每次调用工具时都会请求权限。要跳过这些提示,请将附带的权限预设复制到 Claude Code 设置中:
 58  
 59  **选项 A:保守模式**(默认 — 阻止破坏性工具)
 60  
 61  ```bash
 62  cp settings.local.json ~/.claude/settings.local.json
 63  ```
 64  
 65  自动允许 163 个工具中的 152 个。以下 11 个工具仍需每次手动批准:
 66  
 67  | 被阻止的工具 | 原因 |
 68  |---|---|
 69  | `delete_node` | 从场景中删除节点 |
 70  | `delete_scene` | 从磁盘删除场景文件 |
 71  | `remove_animation` | 删除动画 |
 72  | `remove_autoload` | 删除 autoload 单例 |
 73  | `remove_state_machine_state` | 删除状态机状态 |
 74  | `remove_state_machine_transition` | 删除状态机转换 |
 75  | `execute_editor_script` | 在编辑器中运行任意代码 |
 76  | `execute_game_script` | 在运行中的游戏中运行任意代码 |
 77  | `export_project` | 触发项目导出 |
 78  | `tilemap_clear` | 清除 TileMapLayer 的所有单元格 |
 79  
 80  **选项 B:宽松模式**(允许所有,拒绝危险命令)
 81  
 82  ```bash
 83  cp settings.local.permissive.json ~/.claude/settings.local.json
 84  ```
 85  
 86  允许所有 163 个工具和所有 Bash 命令。显式拒绝破坏性 shell 命令(`rm -rf`、`git push --force`、`git reset --hard` 等)以及上述相同的破坏性 MCP 工具。
 87  
 88  > **注意**:如果你已有 `settings.local.json`,请手动合并 `permissions` 部分,而不是覆盖。
 89  
 90  ### 5. Lite 模式(可选)
 91  
 92  如果你的 MCP 客户端有工具数量限制(例如 Windsurf:100,Cursor:~40),可以使用 Lite 模式,注册 76 个核心工具而不是 162 个:
 93  
 94  ```json
 95  {
 96    "mcpServers": {
 97      "godot-mcp-pro": {
 98        "command": "node",
 99        "args": ["D:/dev/godot-mcp-pro/server/build/index.js", "--lite"]
100      }
101    }
102  }
103  ```
104  
105  Lite 模式包含:project、scene、node、script、editor、input、runtime 和 input_map 工具。
106  
107  ### 6. 开始使用
108  
109  在启用插件的状态下打开你的 Godot 项目,然后使用 Claude Code 与编辑器交互。
110  
111  ## 全部 162 个工具
112  
113  ### 项目工具 (7)
114  | 工具 | 描述 |
115  |------|-------------|
116  | `get_project_info` | 项目元数据、版本、视口、autoloads |
117  | `get_filesystem_tree` | 带过滤的递归文件树 |
118  | `search_files` | 模糊/glob 文件搜索 |
119  | `get_project_settings` | 读取 project.godot 设置 |
120  | `set_project_setting` | 通过编辑器 API 设置项目设置 |
121  | `uid_to_project_path` | UID → res:// 转换 |
122  | `project_path_to_uid` | res:// → UID 转换 |
123  
124  ### 场景工具 (9)
125  | 工具 | 描述 |
126  |------|-------------|
127  | `get_scene_tree` | 带层级的实时场景树 |
128  | `get_scene_file_content` | .tscn 文件原始内容 |
129  | `create_scene` | 创建新场景文件 |
130  | `open_scene` | 在编辑器中打开场景 |
131  | `delete_scene` | 删除场景文件 |
132  | `add_scene_instance` | 将场景实例化为子节点 |
133  | `play_scene` | 运行场景(主场景/当前/自定义) |
134  | `stop_scene` | 停止运行中的场景 |
135  | `save_scene` | 将当前场景保存到磁盘 |
136  
137  ### 节点工具 (14)
138  | 工具 | 描述 |
139  |------|-------------|
140  | `add_node` | 添加指定类型和属性的节点 |
141  | `delete_node` | 删除节点(支持撤销) |
142  | `duplicate_node` | 复制节点及子节点 |
143  | `move_node` | 移动/重新设置父节点 |
144  | `update_property` | 设置任意属性(自动类型解析) |
145  | `get_node_properties` | 获取节点的所有属性 |
146  | `add_resource` | 向节点添加 Shape/Material 等 |
147  | `set_anchor_preset` | 设置 Control 锚点预设 |
148  | `rename_node` | 重命名场景中的节点 |
149  | `connect_signal` | 连接节点间的信号 |
150  | `disconnect_signal` | 断开信号连接 |
151  | `get_node_groups` | 获取节点所属的组 |
152  | `set_node_groups` | 设置节点的组成员关系 |
153  | `find_nodes_in_group` | 查找组中的所有节点 |
154  
155  ### 脚本工具 (8)
156  | 工具 | 描述 |
157  |------|-------------|
158  | `list_scripts` | 列出所有脚本及类信息 |
159  | `read_script` | 读取脚本内容 |
160  | `create_script` | 使用模板创建新脚本 |
161  | `edit_script` | 搜索/替换或完整编辑 |
162  | `attach_script` | 将脚本附加到节点 |
163  | `get_open_scripts` | 列出编辑器中打开的脚本 |
164  | `validate_script` | 验证 GDScript 语法 |
165  | `search_in_files` | 在项目文件中搜索内容 |
166  
167  ### 编辑器工具 (9)
168  | 工具 | 描述 |
169  |------|-------------|
170  | `get_editor_errors` | 获取错误和堆栈跟踪 |
171  | `get_editor_screenshot` | 截取编辑器视口 |
172  | `get_game_screenshot` | 截取运行中的游戏 |
173  | `execute_editor_script` | 在编辑器中运行任意 GDScript |
174  | `clear_output` | 清除输出面板 |
175  | `get_signals` | 获取节点的所有信号及连接 |
176  | `reload_plugin` | 重新加载 MCP 插件(自动重连) |
177  | `reload_project` | 重新扫描文件系统并重新加载脚本 |
178  | `get_output_log` | 获取输出面板内容 |
179  
180  ### 输入工具 (7)
181  | 工具 | 描述 |
182  |------|-------------|
183  | `simulate_key` | 模拟键盘按键按下/释放 |
184  | `simulate_mouse_click` | 模拟在指定位置的鼠标点击 |
185  | `simulate_mouse_move` | 模拟鼠标移动 |
186  | `simulate_action` | 模拟 Godot Input Action |
187  | `simulate_sequence` | 带帧延迟的输入事件序列 |
188  | `get_input_actions` | 列出所有输入动作 |
189  | `set_input_action` | 创建/修改输入动作 |
190  
191  ### 运行时工具 (19)
192  | 工具 | 描述 |
193  |------|-------------|
194  | `get_game_scene_tree` | 运行中游戏的场景树 |
195  | `get_game_node_properties` | 运行中游戏的节点属性 |
196  | `set_game_node_property` | 设置运行中游戏的节点属性 |
197  | `execute_game_script` | 在游戏上下文中运行 GDScript |
198  | `capture_frames` | 多帧截图捕获 |
199  | `monitor_properties` | 随时间记录属性值 |
200  | `start_recording` | 开始输入录制 |
201  | `stop_recording` | 停止输入录制 |
202  | `replay_recording` | 回放录制的输入 |
203  | `find_nodes_by_script` | 按脚本查找游戏节点 |
204  | `get_autoload` | 获取 autoload 节点属性 |
205  | `batch_get_properties` | 批量获取多个节点属性 |
206  | `find_ui_elements` | 查找游戏中的 UI 元素 |
207  | `click_button_by_text` | 通过文本点击按钮 |
208  | `wait_for_node` | 等待节点出现 |
209  | `find_nearby_nodes` | 查找位置附近的节点 |
210  | `navigate_to` | 导航到目标位置 |
211  | `move_to` | 移动角色到目标 |
212  
213  ### 动画工具 (6)
214  | 工具 | 描述 |
215  |------|-------------|
216  | `list_animations` | 列出 AnimationPlayer 中的所有动画 |
217  | `create_animation` | 创建新动画 |
218  | `add_animation_track` | 添加轨道(value/position/rotation/method/bezier) |
219  | `set_animation_keyframe` | 在轨道中插入关键帧 |
220  | `get_animation_info` | 包含所有轨道/关键帧的详细动画信息 |
221  | `remove_animation` | 删除动画 |
222  
223  ### TileMap 工具 (6)
224  | 工具 | 描述 |
225  |------|-------------|
226  | `tilemap_set_cell` | 设置单个瓦片单元格 |
227  | `tilemap_fill_rect` | 用瓦片填充矩形区域 |
228  | `tilemap_get_cell` | 获取单元格的瓦片数据 |
229  | `tilemap_clear` | 清除所有单元格 |
230  | `tilemap_get_info` | TileMapLayer 信息和瓦片集来源 |
231  | `tilemap_get_used_cells` | 已使用单元格列表 |
232  
233  ### 主题与 UI 工具 (6)
234  | 工具 | 描述 |
235  |------|-------------|
236  | `create_theme` | 创建 Theme 资源文件 |
237  | `set_theme_color` | 设置主题颜色覆盖 |
238  | `set_theme_constant` | 设置主题常量覆盖 |
239  | `set_theme_font_size` | 设置主题字体大小覆盖 |
240  | `set_theme_stylebox` | 设置 StyleBoxFlat 覆盖 |
241  | `get_theme_info` | 获取主题覆盖信息 |
242  
243  ### 性能分析工具 (2)
244  | 工具 | 描述 |
245  |------|-------------|
246  | `get_performance_monitors` | 所有性能监视器(FPS、内存、物理等) |
247  | `get_editor_performance` | 快速性能概览 |
248  
249  ### 批处理与重构工具 (8)
250  | 工具 | 描述 |
251  |------|-------------|
252  | `find_nodes_by_type` | 按类型查找所有节点 |
253  | `find_signal_connections` | 查找场景中所有信号连接 |
254  | `batch_set_property` | 为某类型的所有节点设置属性 |
255  | `find_node_references` | 在项目文件中搜索模式 |
256  | `get_scene_dependencies` | 获取资源依赖关系 |
257  | `cross_scene_set_property` | 跨所有场景设置属性 |
258  | `find_script_references` | 查找脚本/资源的使用位置 |
259  | `detect_circular_dependencies` | 检测场景循环依赖 |
260  
261  ### 着色器工具 (6)
262  | 工具 | 描述 |
263  |------|-------------|
264  | `create_shader` | 使用模板创建着色器 |
265  | `read_shader` | 读取着色器文件 |
266  | `edit_shader` | 编辑着色器(替换/搜索替换) |
267  | `assign_shader_material` | 将 ShaderMaterial 分配给节点 |
268  | `set_shader_param` | 设置着色器参数 |
269  | `get_shader_params` | 获取所有着色器参数 |
270  
271  ### 导出工具 (3)
272  | 工具 | 描述 |
273  |------|-------------|
274  | `list_export_presets` | 列出导出预设 |
275  | `export_project` | 获取预设的导出命令 |
276  | `get_export_info` | 与导出相关的项目信息 |
277  
278  ### 资源工具 (6)
279  | 工具 | 描述 |
280  |------|-------------|
281  | `read_resource` | 读取 .tres 资源属性 |
282  | `edit_resource` | 编辑资源属性 |
283  | `create_resource` | 创建新的 .tres 资源 |
284  | `get_resource_preview` | 获取资源缩略图 |
285  | `add_autoload` | 注册 autoload 单例 |
286  | `remove_autoload` | 删除 autoload 单例 |
287  
288  ### 物理工具 (6)
289  | 工具 | 描述 |
290  |------|-------------|
291  | `setup_physics_body` | 配置物理体属性 |
292  | `setup_collision` | 向节点添加碰撞形状 |
293  | `set_physics_layers` | 设置碰撞层/掩码 |
294  | `get_physics_layers` | 获取碰撞层/掩码信息 |
295  | `get_collision_info` | 获取碰撞形状详情 |
296  | `add_raycast` | 添加 RayCast2D/3D 节点 |
297  
298  ### 3D 场景工具 (6)
299  | 工具 | 描述 |
300  |------|-------------|
301  | `add_mesh_instance` | 添加带基本网格的 MeshInstance3D |
302  | `setup_camera_3d` | 配置 Camera3D 属性 |
303  | `setup_lighting` | 添加/配置灯光节点 |
304  | `setup_environment` | 配置 WorldEnvironment |
305  | `add_gridmap` | 设置 GridMap 节点 |
306  | `set_material_3d` | 设置 StandardMaterial3D 属性 |
307  
308  ### 粒子工具 (5)
309  | 工具 | 描述 |
310  |------|-------------|
311  | `create_particles` | 创建 GPUParticles2D/3D |
312  | `set_particle_material` | 配置 ParticleProcessMaterial |
313  | `set_particle_color_gradient` | 设置粒子颜色渐变 |
314  | `apply_particle_preset` | 应用预设(fire、smoke、sparks 等) |
315  | `get_particle_info` | 获取粒子系统详情 |
316  
317  ### 导航工具 (6)
318  | 工具 | 描述 |
319  |------|-------------|
320  | `setup_navigation_region` | 配置 NavigationRegion |
321  | `setup_navigation_agent` | 配置 NavigationAgent |
322  | `bake_navigation_mesh` | 烘焙导航网格 |
323  | `set_navigation_layers` | 设置导航层 |
324  | `get_navigation_info` | 获取导航设置信息 |
325  
326  ### 音频工具 (6)
327  | 工具 | 描述 |
328  |------|-------------|
329  | `add_audio_player` | 添加 AudioStreamPlayer 节点 |
330  | `add_audio_bus` | 添加音频总线 |
331  | `add_audio_bus_effect` | 向音频总线添加效果 |
332  | `set_audio_bus` | 配置音频总线属性 |
333  | `get_audio_bus_layout` | 获取音频总线布局信息 |
334  | `get_audio_info` | 获取音频相关节点信息 |
335  
336  ### AnimationTree 工具 (4)
337  | 工具 | 描述 |
338  |------|-------------|
339  | `create_animation_tree` | 创建 AnimationTree |
340  | `get_animation_tree_structure` | 获取树结构 |
341  | `set_tree_parameter` | 设置 AnimationTree 参数 |
342  | `add_state_machine_state` | 向状态机添加状态 |
343  
344  ### 状态机工具 (3)
345  | 工具 | 描述 |
346  |------|-------------|
347  | `remove_state_machine_state` | 从状态机中删除状态 |
348  | `add_state_machine_transition` | 添加状态间的转换 |
349  | `remove_state_machine_transition` | 删除状态转换 |
350  
351  ### 混合树工具 (1)
352  | 工具 | 描述 |
353  |------|-------------|
354  | `set_blend_tree_node` | 配置混合树节点 |
355  
356  ### 分析与搜索工具 (4)
357  | 工具 | 描述 |
358  |------|-------------|
359  | `analyze_scene_complexity` | 分析场景性能 |
360  | `analyze_signal_flow` | 映射信号连接 |
361  | `find_unused_resources` | 查找未引用的资源 |
362  | `get_project_statistics` | 获取项目整体统计 |
363  
364  ### 测试与 QA 工具 (6)
365  | 工具 | 描述 |
366  |------|-------------|
367  | `run_test_scenario` | 运行自动化测试场景 |
368  | `assert_node_state` | 断言节点属性值 |
369  | `assert_screen_text` | 检查屏幕上的文字 |
370  | `compare_screenshots` | 比较两张截图 |
371  | `run_stress_test` | 运行性能压力测试 |
372  | `get_test_report` | 获取测试结果报告 |
373  
374  ## 主要特性
375  
376  - **UndoRedo 集成**:所有节点/属性操作支持 Ctrl+Z
377  - **智能类型解析**:`"Vector2(100, 200)"`、`"#ff0000"`、`"Color(1,0,0)"` 自动转换
378  - **自动重连**:指数退避重连(1秒 → 2秒 → 4秒 ... → 最大60秒)
379  - **心跳检测**:10秒 ping/pong 保持连接活跃
380  - **友好的错误提示**:错误响应包含下一步操作建议
381  
382  ## 竞品对比
383  
384  ### 工具数量
385  
386  | 分类 | Godot MCP Pro | GDAI MCP ($19) | tomyud1 (free) | Dokujaa (free) | Coding-Solo (free) | ee0pdt (free) | bradypp (free) |
387  |----------|:---:|:---:|:---:|:---:|:---:|:---:|:---:|
388  | Project | 7 | 5 | 4 | 0 | 2 | 2 | 2 |
389  | Scene | 9 | 8 | 11 | 9 | 3 | 4 | 5 |
390  | Node | **14** | 8 | 0 | 8 | 2 | 3 | 0 |
391  | Script | **8** | 5 | 6 | 4 | 0 | 5 | 0 |
392  | Editor | **9** | 5 | 1 | 5 | 1 | 3 | 2 |
393  | Input | **7** | 2 | 0 | 0 | 0 | 0 | 0 |
394  | Runtime | **19** | 0 | 0 | 0 | 0 | 0 | 0 |
395  | Animation | **6** | 0 | 0 | 0 | 0 | 0 | 0 |
396  | TileMap | **6** | 0 | 0 | 0 | 0 | 0 | 0 |
397  | Theme/UI | **6** | 0 | 0 | 0 | 0 | 0 | 0 |
398  | Profiling | **2** | 0 | 0 | 0 | 0 | 0 | 0 |
399  | Batch/Refactor | **8** | 0 | 0 | 0 | 0 | 0 | 0 |
400  | Shader | **6** | 0 | 0 | 0 | 0 | 0 | 0 |
401  | Export | **3** | 0 | 0 | 0 | 0 | 0 | 0 |
402  | Resource | **6** | 0 | 0 | 0 | 0 | 0 | 0 |
403  | Physics | **6** | 0 | 0 | 0 | 0 | 0 | 0 |
404  | 3D Scene | **6** | 0 | 0 | 0 | 0 | 0 | 0 |
405  | Particle | **5** | 0 | 0 | 0 | 0 | 0 | 0 |
406  | Navigation | **6** | 0 | 0 | 0 | 0 | 0 | 0 |
407  | Audio | **6** | 0 | 0 | 0 | 0 | 0 | 0 |
408  | AnimationTree | **4** | 0 | 0 | 0 | 0 | 0 | 0 |
409  | State Machine | **3** | 0 | 0 | 0 | 0 | 0 | 0 |
410  | Blend Tree | **1** | 0 | 0 | 0 | 0 | 0 | 0 |
411  | Analysis | **4** | 0 | 0 | 0 | 0 | 0 | 0 |
412  | Testing/QA | **6** | 0 | 0 | 0 | 0 | 0 | 0 |
413  | Asset/AI | 0 | 0 | 1 | 6 | 0 | 0 | 0 |
414  | Material | 0 | 0 | 0 | 2 | 0 | 0 | 0 |
415  | Other | 0 | 0 | 9 | 5 | 5 | 2 | 1 |
416  | **总计** | **162** | ~30 | **32** | **39** | **13** | **19** | **10** |
417  
418  ### 功能矩阵
419  
420  | 功能 | Godot MCP Pro | GDAI MCP ($19) | tomyud1 (free) | Dokujaa (free) | Coding-Solo (free) |
421  |---------|:---:|:---:|:---:|:---:|:---:|
422  | **连接方式** | WebSocket(实时) | stdio (Python) | WebSocket | TCP Socket | Headless CLI |
423  | **Undo/Redo** | 支持 | 支持 | 不支持 | 不支持 | 不支持 |
424  | **JSON-RPC 2.0** | 支持 | 自定义 | 自定义 | 自定义 | N/A |
425  | **自动重连** | 支持(指数退避) | N/A | 不支持 | 不支持 | N/A |
426  | **心跳检测** | 支持(10秒 ping/pong) | 不支持 | 不支持 | 不支持 | 不支持 |
427  | **错误建议** | 支持(上下文提示) | 不支持 | 不支持 | 不支持 | 不支持 |
428  | **截图捕获** | 支持(编辑器 + 游戏) | 支持 | 不支持 | 不支持 | 不支持 |
429  | **游戏输入模拟** | 支持(键盘/鼠标/动作/序列) | 支持(基础) | 不支持 | 不支持 | 不支持 |
430  | **运行时检查** | 支持(场景树 + 属性 + 监控) | 不支持 | 不支持 | 不支持 | 不支持 |
431  | **信号管理** | 支持(连接/断开/检查) | 不支持 | 不支持 | 不支持 | 不支持 |
432  | **浏览器可视化** | 不支持 | 不支持 | 支持 | 不支持 | 不支持 |
433  | **AI 3D 网格生成** | 不支持 | 不支持 | 不支持 | 支持(Meshy API) | 不支持 |
434  
435  ### 独占分类(竞品没有的功能)
436  
437  | 分类 | 工具数 | 重要性 |
438  |----------|-------|----------------|
439  | **Animation** | 6 个工具 | 创建动画、添加轨道、设置关键帧 — 全部通过编程实现 |
440  | **TileMap** | 6 个工具 | 设置单元格、填充矩形、查询瓦片数据 — 2D 关卡设计必备 |
441  | **Theme/UI** | 6 个工具 | StyleBox、颜色、字体 — 无需手动编辑器操作即可构建 UI 主题 |
442  | **Profiling** | 2 个工具 | FPS、内存、绘制调用、物理 — 性能监控 |
443  | **Batch/Refactor** | 8 个工具 | 按类型查找、批量属性修改、跨场景更新、依赖分析 |
444  | **Shader** | 6 个工具 | 创建/编辑着色器、分配材质、设置参数 |
445  | **Export** | 3 个工具 | 列出预设、获取导出命令、检查模板 |
446  | **Physics** | 6 个工具 | 设置碰撞形状、物理体、射线检测和层管理 |
447  | **3D Scene** | 6 个工具 | 添加网格、摄像机、灯光、环境、GridMap 支持 |
448  | **Particle** | 5 个工具 | 创建带自定义材质、预设和渐变的粒子 |
449  | **Navigation** | 6 个工具 | 配置导航区域、代理、寻路、烘焙 |
450  | **Audio** | 6 个工具 | 完整的音频总线系统、效果、播放器、实时管理 |
451  | **AnimationTree** | 4 个工具 | 构建带转换和混合树的状态机 |
452  | **State Machine** | 3 个工具 | 复杂动画的高级状态机管理 |
453  | **Testing/QA** | 6 个工具 | 自动化测试、断言、压力测试、截图对比 |
454  | **Runtime** | 19 个工具 | 运行时检查和控制游戏:检查、录制、回放、导航 |
455  
456  ### 架构优势
457  
458  | 方面 | Godot MCP Pro | 典型竞品 |
459  |--------|--------------|-------------------|
460  | **协议** | JSON-RPC 2.0(标准、可扩展) | 自定义 JSON 或基于 CLI |
461  | **连接** | 带心跳的持久 WebSocket | 每命令子进程或原始 TCP |
462  | **可靠性** | 指数退避自动重连(1秒→60秒) | 需要手动重连 |
463  | **类型安全** | 智能类型解析(Vector2、Color、Rect2、十六进制颜色) | 仅字符串或有限类型 |
464  | **错误处理** | 带代码 + 建议的结构化错误 | 通用错误消息 |
465  | **撤销支持** | 所有修改通过 UndoRedo 系统 | 直接修改(无法撤销) |
466  | **端口管理** | 自动扫描端口 6505-6509 | 固定端口,可能冲突 |
467  
468  ## 许可证
469  
470  专有许可 — 详见 [LICENSE](../LICENSE)。购买包含 v1.x 终身更新。