Funplay Godot MCP 把 execute_code 当作 105 个工具里的"主入口"——当一段 GDScript 能一次性把事做完时,AI 助手不需要串联多个窄口径工具。它是 Godot 4.2+ 编辑器扩展里的通用逃生门,覆盖编辑器时态和运行时态两种执行上下文。
工具定位
Funplay MCP for Godot 当前版本 0.4.0,是该四仓库家族中的旗舰(工具数量最多)。工具被拆成 core 与 full 两档,默认 core 只暴露高信号子集。服务绑定在本地 http://127.0.0.1:8765/,若被占用会自动回退到下一个可用端口,并把值写入 user://funplay_mcp_settings.cfg。
execute_code 的独特之处在于它和 Godot 的语言策略耦合:在 GDScript 项目里它运行 GDScript,在 Godot .NET(C#)项目里暴露 .NET 相关工具,混合项目两边都给。语言感知是 0.4.0 明确新增的——同一段提示在不同语言项目里会得到正确的脚本语境。
什么场景用它
- 场景结构化操作:一句话搭建 HUD——
create_ui_root+create_control+create_label是狭义工具,但当需要根据条件分支批量创建 Control 树、统一应用 theme override、再连接一堆 signal 时,execute_code里一段 GDScript 循环更直接。 - 运行时断言:0.4.0 新增的
assert_node_exists、assert_node_property、assert_signal_connected是断言型窄工具,但组合成"进入 Play → 发多个simulate_action→ 读get_console_logs→ 一次性判断一组条件"时,execute_code里用await+get_tree().create_timer()写更干净。 - 项目初始化:
ProjectSettings/InputMap/autoload管理在 0.4.0 加入了底层工具,但批量填写 10 个 input action、配合 key 绑定和 rumble 阈值,写成一段脚本比串联 20 次调用更可维护。
一段示例
# 批量注册平台跳跃游戏的输入动作
var actions := {
"move_left": KEY_A,
"move_right": KEY_D,
"jump": KEY_SPACE,
"attack": KEY_J,
}
for name in actions:
InputMap.add_action(name)
var ev := InputEventKey.new()
ev.keycode = actions[name]
InputMap.action_add_event(name, ev)
这段在 execute_code 里一次跑完,等价于调用 8 次狭义工具。
什么时候不该用
execute_code 是最大功率档。以下情况优先选窄工具:写单个节点属性(用 set_node_property)、查找节点(find_nodes)、创建 AnimationPlayer(create_animation_player)。窄工具返回结构化 payload,方便 AI 助手接续推理;execute_code 的返回是自由格式文本,需要额外解析。
另外它不是沙箱,一段错误代码可能让编辑器陷入不一致状态——重的操作建议先在分支场景里试一次。
安装与延伸
把 addons/funplay_mcp 目录拷进你的 Godot 项目 res://addons/ 下,启用插件后即获得编辑器 dock。项目主页 funplay-godot-mcp。兄弟仓库 funplay-unity-mcp 与 funplay-cocos-mcp 用相同设计哲学覆盖 Unity 与 Cocos。更多内容见 gamebooom.ai/zh/blog/。