refactor: 拆分 claude-dev-stack 为 windows-dev-stack 和 wsl-dev-stack
将原 claude-dev-stack 目录拆分为独立的 Windows 和 WSL 部署栈,便于分别维护和使用。 Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
This commit is contained in:
70
windows-dev-stack/godot-mcp-pro-v1.14.1/docs/architecture.md
Normal file
70
windows-dev-stack/godot-mcp-pro-v1.14.1/docs/architecture.md
Normal file
@@ -0,0 +1,70 @@
|
||||
# Architecture
|
||||
|
||||
## Overview
|
||||
|
||||
```
|
||||
┌─────────────┐ stdio/MCP ┌──────────────┐ WebSocket:6505 ┌──────────────────┐
|
||||
│ AI Client │ ←────────────────→ │ Node.js MCP │ ←──────────────────→ │ Godot Plugin │
|
||||
│ (Claude Code)│ │ Server │ JSON-RPC 2.0 │ (Editor Plugin) │
|
||||
└─────────────┘ └──────────────┘ └──────────────────┘
|
||||
```
|
||||
|
||||
## Communication Flow
|
||||
|
||||
1. AI client sends MCP tool call (e.g. `add_node`)
|
||||
2. Node.js server translates to JSON-RPC 2.0 request
|
||||
3. WebSocket sends to Godot plugin
|
||||
4. Plugin's command router dispatches to handler
|
||||
5. Handler executes via Godot Editor API (with UndoRedo)
|
||||
6. Result sent back as JSON-RPC 2.0 response
|
||||
7. Node.js formats as MCP tool result
|
||||
8. AI receives structured response
|
||||
|
||||
## Godot Plugin Structure
|
||||
|
||||
```
|
||||
plugin.gd (EditorPlugin)
|
||||
├── websocket_server.gd (TCP+WebSocket server)
|
||||
├── command_router.gd (dispatch hub)
|
||||
│ ├── project_commands.gd (6 commands)
|
||||
│ ├── scene_commands.gd (8 commands)
|
||||
│ ├── node_commands.gd (8 commands)
|
||||
│ ├── script_commands.gd (6 commands)
|
||||
│ └── editor_commands.gd (5 commands)
|
||||
└── ui/status_panel (connection monitor)
|
||||
```
|
||||
|
||||
## Key Design Decisions
|
||||
|
||||
### WebSocket over HTTP
|
||||
- Real-time bidirectional communication
|
||||
- Natural for editor integration (persistent connection)
|
||||
- Heartbeat keeps connection alive
|
||||
|
||||
### JSON-RPC 2.0
|
||||
- Standard protocol with well-defined error codes
|
||||
- Each request has unique ID for tracking
|
||||
- Easy to debug and extend
|
||||
|
||||
### UndoRedo Integration
|
||||
- All scene modifications go through `EditorUndoRedoManager`
|
||||
- Users can Ctrl+Z any AI-made change
|
||||
- Prevents accidental data loss
|
||||
|
||||
### Type Parsing
|
||||
- `PropertyParser` handles string → Godot type conversion
|
||||
- Supports Vector2/3, Color, Rect2, NodePath, etc.
|
||||
- AI can send simple strings, plugin handles the rest
|
||||
|
||||
## Error Codes
|
||||
|
||||
| Code | Meaning |
|
||||
|------|---------|
|
||||
| -32700 | Parse error (invalid JSON) |
|
||||
| -32600 | Invalid request |
|
||||
| -32601 | Method not found |
|
||||
| -32602 | Invalid params |
|
||||
| -32603 | Internal error |
|
||||
| -32000 | No scene open |
|
||||
| -32001 | Node/resource not found |
|
||||
| -32002 | Script compilation failed |
|
||||
73
windows-dev-stack/godot-mcp-pro-v1.14.1/docs/installation.md
Normal file
73
windows-dev-stack/godot-mcp-pro-v1.14.1/docs/installation.md
Normal file
@@ -0,0 +1,73 @@
|
||||
# Installation Guide
|
||||
|
||||
## Prerequisites
|
||||
|
||||
- Godot 4.3+ (tested with 4.6)
|
||||
- Node.js 18+
|
||||
- An MCP-compatible AI client (Claude Code, Claude Desktop, etc.)
|
||||
|
||||
## Step 1: Godot Plugin
|
||||
|
||||
1. Copy the `addons/godot_mcp/` folder into your Godot project
|
||||
2. Open Project → Project Settings → Plugins
|
||||
3. Find "Godot MCP Pro" and click Enable
|
||||
4. You should see "MCP Server" appear in the bottom panel
|
||||
5. The status should show "Waiting for connection..."
|
||||
|
||||
## Step 2: Node.js Server
|
||||
|
||||
```bash
|
||||
cd server
|
||||
npm install
|
||||
npm run build
|
||||
```
|
||||
|
||||
This creates the compiled server in `server/build/`.
|
||||
|
||||
## Step 3: MCP Client Configuration
|
||||
|
||||
### Claude Code (.mcp.json)
|
||||
|
||||
```json
|
||||
{
|
||||
"mcpServers": {
|
||||
"godot-mcp-pro": {
|
||||
"command": "node",
|
||||
"args": ["/absolute/path/to/godot-mcp-pro/server/build/index.js"]
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### Custom Port
|
||||
|
||||
Set the `GODOT_MCP_PORT` environment variable (default: 6505):
|
||||
|
||||
```json
|
||||
{
|
||||
"mcpServers": {
|
||||
"godot-mcp-pro": {
|
||||
"command": "node",
|
||||
"args": ["/absolute/path/to/server/build/index.js"],
|
||||
"env": { "GODOT_MCP_PORT": "6510" }
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
Also update the port in `plugin.gd` (line 3: `const PORT := 6505`).
|
||||
|
||||
## Troubleshooting
|
||||
|
||||
### Plugin doesn't appear
|
||||
- Make sure the `addons/godot_mcp/` directory is inside your Godot project
|
||||
- Check that `plugin.cfg` exists in the directory
|
||||
|
||||
### Connection fails
|
||||
- Verify the Godot editor is running with the plugin enabled
|
||||
- Check the bottom panel "MCP Server" tab for status
|
||||
- Ensure no firewall is blocking localhost port 6505
|
||||
|
||||
### Tools timeout
|
||||
- Commands have a 30-second timeout
|
||||
- Large operations (full filesystem scan) may need the `max_depth` parameter
|
||||
406
windows-dev-stack/godot-mcp-pro-v1.14.1/docs/tools-reference.md
Normal file
406
windows-dev-stack/godot-mcp-pro-v1.14.1/docs/tools-reference.md
Normal file
@@ -0,0 +1,406 @@
|
||||
# Tools Reference
|
||||
|
||||
## Project Tools
|
||||
|
||||
### get_project_info
|
||||
Returns project metadata including name, Godot version, viewport settings, renderer, and autoloads.
|
||||
|
||||
### get_filesystem_tree
|
||||
Scans the project directory and returns a tree structure.
|
||||
- `path` (optional): Root path (default: `res://`)
|
||||
- `filter` (optional): Glob pattern like `*.gd`, `*.tscn`
|
||||
- `max_depth` (optional): Maximum recursion depth (default: 10)
|
||||
|
||||
### search_files
|
||||
Fuzzy search for files by name.
|
||||
- `query` (required): Search string or glob pattern
|
||||
- `path` (optional): Root path
|
||||
- `file_type` (optional): Extension filter (`gd`, `tscn`, etc.)
|
||||
- `max_results` (optional): Limit results (default: 50)
|
||||
|
||||
### get_project_settings
|
||||
Read settings from project.godot.
|
||||
- `section` (optional): Filter by section prefix (e.g. `display/window`)
|
||||
- `key` (optional): Get a specific setting
|
||||
|
||||
### uid_to_project_path / project_path_to_uid
|
||||
Convert between UIDs (`uid://...`) and resource paths (`res://...`).
|
||||
|
||||
## Scene Tools
|
||||
|
||||
### get_scene_tree
|
||||
Returns the live node hierarchy of the currently edited scene.
|
||||
- `max_depth` (optional): Limit tree depth
|
||||
|
||||
### get_scene_file_content
|
||||
Reads the raw .tscn file.
|
||||
- `path` (required): Scene file path
|
||||
|
||||
### create_scene
|
||||
Creates a new scene file.
|
||||
- `path` (required): Where to save
|
||||
- `root_type` (optional): Root node type (default: `Node2D`)
|
||||
- `root_name` (optional): Root node name
|
||||
|
||||
### open_scene / delete_scene
|
||||
Open or delete a scene file by path.
|
||||
|
||||
### add_scene_instance
|
||||
Instance a scene as a child node.
|
||||
- `scene_path` (required): Scene to instance
|
||||
- `parent_path` (optional): Parent node (default: root)
|
||||
- `name` (optional): Instance name
|
||||
|
||||
### play_scene / stop_scene
|
||||
Run or stop scenes. `play_scene` accepts `mode`: `main`, `current`, or a file path.
|
||||
|
||||
## Node Tools
|
||||
|
||||
### add_node
|
||||
Add a node to the scene.
|
||||
- `type` (required): Node class name
|
||||
- `parent_path` (optional): Parent node path
|
||||
- `name` (optional): Node name
|
||||
- `properties` (optional): Dict of property values
|
||||
|
||||
### delete_node / duplicate_node / move_node
|
||||
Modify scene tree structure. All support undo.
|
||||
|
||||
### update_property
|
||||
Set any node property. Values are auto-parsed:
|
||||
- `"Vector2(100, 200)"` → Vector2
|
||||
- `"#ff0000"` or `"Color(1, 0, 0)"` → Color
|
||||
- `"true"` / `"false"` → bool
|
||||
- Numbers → int/float
|
||||
|
||||
### get_node_properties
|
||||
Get all editor-visible properties of a node.
|
||||
- `category` (optional): Filter prefix
|
||||
|
||||
### add_resource
|
||||
Create and assign a resource to a node property.
|
||||
- `resource_type`: Class name (e.g. `RectangleShape2D`)
|
||||
- `resource_properties` (optional): Properties for the resource
|
||||
|
||||
### set_anchor_preset
|
||||
Set anchor preset on Control nodes. Available presets: `top_left`, `center`, `full_rect`, etc.
|
||||
|
||||
### rename_node
|
||||
Rename a node in the current scene.
|
||||
- `node_path` (required): Path to the node
|
||||
- `new_name` (required): New name for the node
|
||||
|
||||
### connect_signal
|
||||
Connect a signal from one node to a method on another node.
|
||||
- `source_path` (required): Path to the source node (emitter)
|
||||
- `signal_name` (required): Signal name to connect
|
||||
- `target_path` (required): Path to the target node (receiver)
|
||||
- `method_name` (required): Method name on target to call
|
||||
|
||||
### disconnect_signal
|
||||
Disconnect a signal connection between two nodes.
|
||||
- `source_path` (required): Path to the source node (emitter)
|
||||
- `signal_name` (required): Signal name to disconnect
|
||||
- `target_path` (required): Path to the target node (receiver)
|
||||
- `method_name` (required): Method name on target
|
||||
|
||||
## Script Tools
|
||||
|
||||
### list_scripts
|
||||
Find all scripts with class/extends info.
|
||||
|
||||
### read_script / create_script
|
||||
Read or create script files.
|
||||
|
||||
### edit_script
|
||||
Edit scripts via:
|
||||
1. `replacements`: Array of `{search, replace, regex?}` operations
|
||||
2. `content`: Full file replacement
|
||||
3. `insert_at_line` + `text`: Insert at specific line
|
||||
|
||||
### attach_script
|
||||
Attach a script to a node in the current scene.
|
||||
|
||||
### get_open_scripts
|
||||
List scripts currently open in the script editor.
|
||||
|
||||
## Editor Tools
|
||||
|
||||
### get_editor_errors
|
||||
Get recent errors from the Godot log.
|
||||
|
||||
### get_editor_screenshot / get_game_screenshot
|
||||
Capture viewport as PNG (returned as base64 image).
|
||||
|
||||
### execute_editor_script
|
||||
Run arbitrary GDScript in the editor context. Use `_mcp_print(value)` to capture output.
|
||||
|
||||
### clear_output
|
||||
Clear the editor output panel.
|
||||
|
||||
### get_signals
|
||||
Get all signals of a node, including current connections.
|
||||
- `node_path` (required): Path to the node to inspect
|
||||
|
||||
### reload_plugin
|
||||
Reload the Godot MCP Pro plugin (disable/re-enable). Connection will briefly drop and auto-reconnect.
|
||||
|
||||
### reload_project
|
||||
Rescan the Godot project filesystem and reload changed scripts. No reconnection needed.
|
||||
|
||||
### save_scene
|
||||
Save the currently edited scene to disk.
|
||||
- `path` (optional): Path to save to (defaults to current scene path)
|
||||
|
||||
### set_project_setting
|
||||
Set a project setting value via the editor API.
|
||||
- `key` (required): Setting key (e.g. `display/window/size/viewport_width`)
|
||||
- `value` (required): Value to set (auto-parsed for Vector2, bool, int, float)
|
||||
|
||||
## Input Tools
|
||||
|
||||
### simulate_key
|
||||
Simulate a keyboard key press/release in the running game.
|
||||
- `keycode` (required): Key constant (e.g. `KEY_SPACE`, `KEY_W`)
|
||||
- `pressed` (optional): true for press, false for release
|
||||
- `ctrl`, `shift`, `alt` (optional): Modifier keys
|
||||
|
||||
### simulate_mouse_click
|
||||
Simulate a mouse button click at a position in the running game.
|
||||
- `x`, `y` (optional): Viewport position
|
||||
- `button` (optional): 1=left, 2=right, 3=middle
|
||||
- `pressed` (optional): true for press, false for release
|
||||
|
||||
### simulate_mouse_move
|
||||
Simulate mouse movement in the running game.
|
||||
- `x`, `y` (optional): Target position
|
||||
- `relative_x`, `relative_y` (optional): Relative movement
|
||||
|
||||
### simulate_action
|
||||
Simulate a Godot Input Action in the running game.
|
||||
- `action` (required): Action name from Input Map
|
||||
- `pressed` (optional): true for press, false for release
|
||||
- `strength` (optional): 0.0–1.0
|
||||
|
||||
### simulate_sequence
|
||||
Simulate a sequence of input events with frame delays.
|
||||
- `events` (required): Array of input events
|
||||
- `frame_delay` (optional): Frames between events
|
||||
|
||||
## Runtime Tools
|
||||
|
||||
### get_game_scene_tree
|
||||
Get the scene tree of the currently running game.
|
||||
- `max_depth` (optional): Maximum tree depth
|
||||
|
||||
### get_game_node_properties
|
||||
Get properties of a node in the running game.
|
||||
- `node_path` (required): Absolute node path
|
||||
- `properties` (optional): Specific property names to read
|
||||
|
||||
### capture_frames
|
||||
Capture multiple screenshots at regular frame intervals from the running game.
|
||||
- `count` (optional): Number of frames (1–30)
|
||||
- `frame_interval` (optional): Frames between captures
|
||||
- `half_resolution` (optional): Halve resolution to reduce data size
|
||||
|
||||
### monitor_properties
|
||||
Record property values over multiple frames from the running game.
|
||||
- `node_path` (required): Absolute node path
|
||||
- `properties` (required): Property names to monitor
|
||||
- `frame_count` (optional): Number of samples (1–600)
|
||||
- `frame_interval` (optional): Frames between samples
|
||||
|
||||
## Animation Tools
|
||||
|
||||
### list_animations
|
||||
List all animations in an AnimationPlayer node.
|
||||
- `node_path` (required): Path to the AnimationPlayer
|
||||
|
||||
### create_animation
|
||||
Create a new animation in an AnimationPlayer.
|
||||
- `node_path` (required): Path to the AnimationPlayer
|
||||
- `name` (required): Animation name
|
||||
- `length` (optional): Length in seconds (default: 1.0)
|
||||
- `loop_mode` (optional): 0=none, 1=linear, 2=pingpong
|
||||
|
||||
### add_animation_track
|
||||
Add a track to an animation.
|
||||
- `node_path` (required): Path to the AnimationPlayer
|
||||
- `animation` (required): Animation name
|
||||
- `track_path` (required): Node path and property (e.g. `Sprite2D:position`)
|
||||
- `track_type` (optional): value, position_2d, rotation_2d, scale_2d, method, bezier, blend_shape
|
||||
- `update_mode` (optional): continuous, discrete, capture
|
||||
|
||||
### set_animation_keyframe
|
||||
Insert a keyframe into an animation track.
|
||||
- `node_path` (required): Path to the AnimationPlayer
|
||||
- `animation` (required): Animation name
|
||||
- `track_index` (required): Track index
|
||||
- `time` (required): Time position in seconds
|
||||
- `value` (required): Keyframe value (auto-parsed)
|
||||
|
||||
### get_animation_info
|
||||
Get detailed info about an animation including all tracks and keyframes.
|
||||
- `node_path` (required): Path to the AnimationPlayer
|
||||
- `animation` (required): Animation name
|
||||
|
||||
### remove_animation
|
||||
Remove an animation from an AnimationPlayer.
|
||||
- `node_path` (required): Path to the AnimationPlayer
|
||||
- `name` (required): Animation name
|
||||
|
||||
## TileMap Tools
|
||||
|
||||
### tilemap_set_cell
|
||||
Set a single cell in a TileMapLayer.
|
||||
- `node_path` (required): Path to the TileMapLayer
|
||||
- `x`, `y` (required): Cell coordinates
|
||||
- `source_id` (optional): Tile source ID
|
||||
- `atlas_x`, `atlas_y` (optional): Atlas coordinates
|
||||
- `alternative` (optional): Alternative tile ID
|
||||
|
||||
### tilemap_fill_rect
|
||||
Fill a rectangular region with tiles.
|
||||
- `node_path` (required): Path to the TileMapLayer
|
||||
- `x1`, `y1`, `x2`, `y2` (required): Rectangle bounds
|
||||
- `source_id`, `atlas_x`, `atlas_y`, `alternative` (optional): Tile data
|
||||
|
||||
### tilemap_get_cell
|
||||
Get tile data at a specific cell.
|
||||
- `node_path` (required): Path to the TileMapLayer
|
||||
- `x`, `y` (required): Cell coordinates
|
||||
|
||||
### tilemap_clear
|
||||
Clear all cells in a TileMapLayer.
|
||||
- `node_path` (required): Path to the TileMapLayer
|
||||
|
||||
### tilemap_get_info
|
||||
Get TileMapLayer info including tile set sources and cell count.
|
||||
- `node_path` (required): Path to the TileMapLayer
|
||||
|
||||
### tilemap_get_used_cells
|
||||
Get a list of used (non-empty) cells.
|
||||
- `node_path` (required): Path to the TileMapLayer
|
||||
- `max_count` (optional): Maximum cells to return (default: 500)
|
||||
|
||||
## Theme Tools
|
||||
|
||||
### create_theme
|
||||
Create a new Theme resource file.
|
||||
- `path` (required): Save path (e.g. `res://themes/main.tres`)
|
||||
- `default_font_size` (optional): Default font size
|
||||
|
||||
### set_theme_color
|
||||
Set a theme color override on a Control node.
|
||||
- `node_path` (required): Path to the Control node
|
||||
- `name` (required): Color name (e.g. `font_color`)
|
||||
- `color` (required): Hex color string
|
||||
|
||||
### set_theme_constant
|
||||
Set a theme constant override on a Control node.
|
||||
- `node_path` (required): Path to the Control node
|
||||
- `name` (required): Constant name
|
||||
- `value` (required): Integer value
|
||||
|
||||
### set_theme_font_size
|
||||
Set a theme font size override on a Control node.
|
||||
- `node_path` (required): Path to the Control node
|
||||
- `name` (required): Font size name (e.g. `font_size`)
|
||||
- `size` (required): Font size in pixels
|
||||
|
||||
### set_theme_stylebox
|
||||
Set a StyleBoxFlat override on a Control node.
|
||||
- `node_path` (required): Path to the Control node
|
||||
- `name` (required): Style name (e.g. `panel`, `normal`)
|
||||
- `bg_color` (optional): Background color
|
||||
- `border_color` (optional): Border color
|
||||
- `border_width` (optional): Border width
|
||||
- `corner_radius` (optional): Corner radius
|
||||
- `padding` (optional): Content padding
|
||||
|
||||
### get_theme_info
|
||||
Get theme information and overrides for a Control node.
|
||||
- `node_path` (required): Path to the Control node
|
||||
|
||||
## Profiling Tools
|
||||
|
||||
### get_performance_monitors
|
||||
Get all Godot performance monitors (FPS, memory, draw calls, physics, navigation).
|
||||
- `category` (optional): Filter by prefix (e.g. `render`, `physics_2d`)
|
||||
|
||||
### get_editor_performance
|
||||
Get a quick performance summary (FPS, frame time, draw calls, memory).
|
||||
|
||||
## Batch & Refactoring Tools
|
||||
|
||||
### find_nodes_by_type
|
||||
Find all nodes of a specific type in the current scene.
|
||||
- `type` (required): Node class name
|
||||
- `recursive` (optional): Search recursively (default: true)
|
||||
|
||||
### find_signal_connections
|
||||
Find all signal connections in the current scene.
|
||||
- `signal_name` (optional): Filter by signal name
|
||||
- `node_path` (optional): Filter by node path
|
||||
|
||||
### batch_set_property
|
||||
Set a property on all nodes of a given type.
|
||||
- `type` (required): Node type to target
|
||||
- `property` (required): Property name
|
||||
- `value` (required): Value to set (auto-parsed)
|
||||
|
||||
### find_node_references
|
||||
Search through project files for a text pattern.
|
||||
- `pattern` (required): Text pattern to search for
|
||||
|
||||
### get_scene_dependencies
|
||||
Get all resource dependencies of a scene or resource file.
|
||||
- `path` (required): Path to the file
|
||||
|
||||
## Shader Tools
|
||||
|
||||
### create_shader
|
||||
Create a new shader file with template or custom content.
|
||||
- `path` (required): Shader file path
|
||||
- `shader_type` (optional): spatial, canvas_item, particles, sky
|
||||
- `content` (optional): Full shader code
|
||||
|
||||
### read_shader
|
||||
Read the content of a shader file.
|
||||
- `path` (required): Path to the shader file
|
||||
|
||||
### edit_shader
|
||||
Edit a shader file using full replacement or search-and-replace.
|
||||
- `path` (required): Path to the shader file
|
||||
- `content` (optional): Full replacement content
|
||||
- `replacements` (optional): Array of `{search, replace}` operations
|
||||
|
||||
### assign_shader_material
|
||||
Create a ShaderMaterial from a shader and assign to a node.
|
||||
- `node_path` (required): Target node path
|
||||
- `shader_path` (required): Path to the shader file
|
||||
|
||||
### set_shader_param
|
||||
Set a shader parameter on a node's ShaderMaterial.
|
||||
- `node_path` (required): Node with ShaderMaterial
|
||||
- `param` (required): Parameter name
|
||||
- `value` (required): Parameter value (auto-parsed)
|
||||
|
||||
### get_shader_params
|
||||
Get all shader parameters from a node's ShaderMaterial.
|
||||
- `node_path` (required): Node with ShaderMaterial
|
||||
|
||||
## Export Tools
|
||||
|
||||
### list_export_presets
|
||||
List all export presets configured in export_presets.cfg.
|
||||
|
||||
### export_project
|
||||
Get the export command for a preset.
|
||||
- `preset_name` (optional): Preset name
|
||||
- `preset_index` (optional): Preset index
|
||||
- `debug` (optional): Debug export (default: true)
|
||||
|
||||
### get_export_info
|
||||
Get export-related project info (executable path, templates directory, project path).
|
||||
Reference in New Issue
Block a user