一个全面的模型上下文协议(MCP)服务器,用于与Godot游戏引擎无缝集成AI助手。
Godot MCP通过提供标准化的模型上下文协议接口,弥合了AI助手与Godot游戏引擎之间的差距。这种强大的集成使像Claude、Cursor和Cline这样的AI助手能够通过一系列全面的工具直接与Godot项目进行交互。
服务器作为AI助手和Godot之间的中间层,将自然语言命令转换为特定的Godot操作。当你让AI助手“创建一个带有精灵的玩家场景”时,MCP服务器:
这创造了一个强大的反馈循环,其中AI助手可以从实际的Godot行为中学习,从而生成更准确的代码和调试辅助。
# 克隆仓库
git clone https://github.com/bradypp/godot-mcp.git
cd godot-mcp
# 安装依赖
npm install
# 构建项目
npm run build
添加到你的Cline MCP设置文件中:
{
"mcpServers": {
"godot": {
"command": "node",
"args": ["/绝对路径/to/godot-mcp/build/index.js"],
"env": {
"DEBUG": "false",
"READ_ONLY": "false",
"GODOT_PATH": "/path/to/godot"
},
"disabled": false,
"autoApprove": [
"launch_editor",
"run_project",
"get_debug_output",
"stop_project",
"get_godot_version",
"list_projects",
"get_project_info",
"create_scene",
"add_node",
"edit_node",
"remove_node",
"load_sprite",
"export_mesh_library",
"save_scene",
"get_uid",
"update_project_uids"
]
}
}
}
godot命令node /绝对路径/to/godot-mcp/build/index.js在项目根目录创建.cursor/mcp.json:
{
"mcpServers": {
"godot": {
"command": "node",
"args": ["/绝对路径/to/godot-mcp/build/index.js"],
"env": {
"DEBUG": "false",
"GODOT_PATH": "/path/to/godot",
"READ_ONLY_MODE": "false"
}
}
}
}
| 变量 | 描述 | 默认值 | 示例 |
|---|---|---|---|
GODOT_PATH | Godot可执行文件的路径 | 自动检测 | /usr/bin/godot4 |
DEBUG | 启用详细日志 | false | true |
READ_ONLY_MODE | 限制为只读操作 | false | true |
get_godot_version获取已安装的Godot版本信息。
参数:无
示例响应:
{
"version": "4.2.1.stable",
"platform": "linux.x86_64"
}
launch_editor启动特定项目的Godot编辑器。
参数:
projectPath (字符串,必需):Godot项目的目录路径示例:
{
"projectPath": "/home/user/my-game"
}
run_project执行Godot项目并捕获输出。
参数:
projectPath (字符串,必需):Godot项目的目录路径scene (字符串,可选):要运行的具体场景示例:
{
"projectPath": "/home/user/my-game",
"scene": "scenes/MainMenu.tscn"
}
list_projects在指定目录中查找Godot项目。
参数:
directory (字符串,必需):要搜索项目的目录recursive (布尔值,可选):是否递归搜索(默认:false)get_project_info检索Godot项目的详细元数据。
参数:
projectPath (字符串,必需):Godot项目的目录路径示例响应:
{
"name": "我的精彩游戏",
"path": "/home/user/my-awesome-game",
"godotVersion": "4.2.1.stable.official",
"structure": {
"scenes": 12,
"scripts": 8,
"assets": 45,
"other": 3
}
}
create_scene在Godot项目中创建一个新的场景。
参数:
projectPath (字符串,必需):Godot项目的目录路径scenePath (字符串,必需):新场景文件的路径(相对于项目)rootNodeType (字符串,可选):根节点的类型(默认:"Node2D")示例:
{
"projectPath": "/home/user/my-game",
"scenePath": "scenes/Player.tscn",
"rootNodeType": "CharacterBody2D"
}
add_node向现有场景添加一个节点。
参数:
projectPath (字符串,必需):Godot项目的目录路径scenePath (字符串,必需):场景文件的路径(相对于项目)nodeType (字符串,必需):要添加的节点类型(例如:"Sprite2D","CollisionShape2D")nodeName (字符串,必需):新节点的名称parentNodePath (字符串,可选):父节点的路径(默认为根)properties (对象,可选):要设置的附加属性示例:
{
"projectPath": "/home/user/my-game",
"scenePath": "scenes/Player.tscn",
"nodeType": "Sprite2D",
"nodeName": "PlayerSprite",
"properties": {
"position": { "x": 100, "y": 50 },
"scale": { "x": 2.0, "y": 2.0 }
}
}
edit_node编辑场景中现有节点的属性。
参数:
projectPath (字符串,必需):Godot项目的目录路径scenePath (字符串,必需):场景文件的路径(相对于项目)nodePath (字符串,必需):要编辑的节点路径properties (对象,必需):要更新的属性示例:
{
"projectPath": "/home/user/my-game",
"scenePath": "scenes/Player.tscn",
"nodePath": "PlayerSprite",
"properties": {
"position": { "x": 200, "y": 100 },
"modulate": { "r": 1.0, "g": 0.5, "b": 0.5, "a": 1.0 }
}
}
remove_node从场景中移除一个节点。
参数:
projectPath (字符串,必需):Godot项目的目录路径scenePath (字符串,必需):场景文件的路径(相对于项目)nodePath (字符串,必需):要移除的节点路径load_sprite将纹理加载到Sprite2D节点。
参数:
projectPath (字符串,必需):Godot项目的目录路径scenePath (字符串,必需):场景文件的路径(相对于项目)nodePath (字符串,必需):Sprite2D节点的路径texturePath (字符串,必需):纹理文件的路径(相对于项目)save_scene保存场景,可选地作为新的变体。
参数:
projectPath (字符串,必需):Godot项目的目录路径scenePath (字符串,必需):场景文件的路径(相对于项目)newPath (字符串,可选):作为变体保存的新路径get_debug_output检索正在运行项目的当前调试输出和错误。
参数:无
stop_project停止任何正在运行的Godot项目。
参数:无
get_uid获取Godot项目中特定文件的UID。
参数:
projectPath (字符串,必需):Godot项目的目录路径filePath (字符串,必需):文件的路径(相对于项目)update_project_uids通过重新保存资源来更新项目中的UID引用。
参数:
projectPath (字符串,必需):Godot项目的目录路径Godot MCP服务器遵循一种模块化的架构设计,旨在提高可维护性和扩展性:
src/
├── config/ # 配置管理
├── core/ # 核心功能
│ ├── GodotExecutor.ts # Godot命令执行
│ ├── PathManager.ts # 路径检测和验证
│ ├── ProcessManager.ts # 进程生命周期管理
│ └── ParameterNormalizer.ts # 输入参数处理
├── server/ # MCP服务器实现
│ ├── GodotMCPServer.ts # 主服务器类
│ └── types.ts # 类型定义
├── tools/ # 工具实现
│ ├── BaseToolHandler.ts # 共享工具功能
│ ├── ToolRegistry.ts # 工具注册和过滤
│ ├── debug/ # 调试相关工具
│ ├── project/ # 项目管理工具
│ ├── scene/ # 场景操作工具
│ ├── system/ # 系统信息工具
│ └── uid/ # UID管理工具
├── utils/ # 实用函数
└── scripts/ # Godot操作脚本
工具在ToolRegistry中注册,带有指示其能力的元数据:
export interface ToolRegistration {
definition: ToolDefinition;
handler: (args: any) => Promise<ToolResponse>;
readOnly: boolean;
}
注册表根据当前模式(只读或全访问)自动过滤工具,并提供统一的工具发现和执行接口。
复杂的Godot操作采用集中的GDScript方法:
godot_operations.gd这种架构提供了比为每个操作生成临时脚本更好的性能、可维护性和可靠性。
"为我在/path/to/my-game启动Godot编辑器"
"运行我的Godot项目并显示任何错误"
"获取有关我的项目结构和设置的信息"
"创建一个带有CharacterBody2D根节点的新玩家场景"
"在我的玩家场景中添加一个名为'PlayerSprite'的Sprite2D节点"
"将角色纹理'textures/player.png'加载到PlayerSprite节点"
"将玩家的位置设置为(100, 50),比例设置为2x"
"在玩家根节点下创建一个CollisionShape2D子节点"
"创建一个带有开始游戏、设置和退出按钮的完整UI场景"
"导出我的3D级别模型作为GridMap使用的MeshLibrary"
"分析我的项目结构并提出性能改进"
"调试这个GDScript错误并帮助我修复角色控制器"
"创建一个带有文件I/O节点和数据管理的保存系统场景"
只读模式提供了一种安全的方式来分析Godot项目而不进行任何修改。这对于CI