@hybridlabor-api/bdb-antigravity-skills 1.2.0 → 1.2.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/Project-overview.html +5 -4
- package/installer.js +1 -0
- package/mcp_config.json +4 -0
- package/mcps/__pycache__/adobe_mcp.cpython-313.pyc +0 -0
- package/mcps/adobe_mcp.py +31 -1
- package/mcps/davinci-resolve-mcp-free/LICENSE +21 -0
- package/mcps/davinci-resolve-mcp-free/README.md +220 -0
- package/mcps/davinci-resolve-mcp-free/examples/mcp.json +8 -0
- package/mcps/davinci-resolve-mcp-free/requirements.txt +5 -0
- package/mcps/davinci-resolve-mcp-free/src/CursorBridge.py +2910 -0
- package/mcps/davinci-resolve-mcp-free/src/resolve_mcp_bridge.py +2529 -0
- package/package.json +1 -1
- package/skills/global_config/bdb-adobe-suite-mcp.md +106 -0
- package/skills/global_config/bdb-after-effects-mcp.md +117 -0
- package/skills/global_config/bdb-blender-mcp.md +130 -0
- package/skills/global_config/bdb-computer-use-mcp.md +119 -0
- package/skills/global_config/bdb-davinci-mcp.md +139 -0
- package/skills/global_config/bdb-grandma3-mcp.md +109 -0
- package/skills/global_config/bdb-resolume-mcp.md +103 -0
- package/skills/global_config/bdb-rhino-mcp.md +153 -0
- package/skills/global_config/bdb-touchdesigner-mcp.md +116 -0
- package/skills/global_config/bdb-unreal-mcp.md +130 -0
- package/skills/global_config/bdb-vectorworks-mcp.md +110 -0
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: bdb-grandma3-mcp
|
|
3
|
+
description: Utilizes the grandMA3 MCP server to patch fixtures, execute console commands, and trigger macros via OSC.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# grandMA3 MCP — Integration and AI Agent Guide
|
|
7
|
+
|
|
8
|
+
This skill file instructs AI agents on how to control grandMA3 lighting consoles using the `grandma3_mcp.py` script. It details OSC routing, command execution, fixture patching, and troubleshooting steps.
|
|
9
|
+
|
|
10
|
+
## 1. Overview and Pipeline Value
|
|
11
|
+
|
|
12
|
+
The **grandMA3 MCP Server** enables AI models to programmatically configure and drive grandMA3 lighting control software. In the BDB OS workflow, this integration automates fixture patching, triggers lighting states, executes macros, and manages live cue sequencing during stage productions.
|
|
13
|
+
|
|
14
|
+
### Architecture
|
|
15
|
+
- **FastMCP server:** Implements standard Model Context Protocol.
|
|
16
|
+
- **OSC UDP Transport:** Sends network packets via Open Sound Control (OSC) to `127.0.0.1` on port `8000`.
|
|
17
|
+
- **Command Router:** Maps JSON-RPC requests to OSC `/cmd` string paths, executing them natively inside grandMA3's Command Line.
|
|
18
|
+
|
|
19
|
+
---
|
|
20
|
+
|
|
21
|
+
## 2. System Instructions
|
|
22
|
+
|
|
23
|
+
### Workflow Priorities
|
|
24
|
+
1. **Target Port Configuration:** Ensure grandMA3's OSC settings are configured to listen on port `8000` and route `/cmd` addresses.
|
|
25
|
+
2. **Console State Syntax:** Commands must match grandMA3 command-line syntax (e.g., `Fixture 1 At 100`, `Go Macro 5`).
|
|
26
|
+
3. **Double Patch Safeguard:** Before calling `patch_fixture`, check if the targeted DMX address or fixture ID is already occupied by existing objects to avoid patching conflicts.
|
|
27
|
+
|
|
28
|
+
---
|
|
29
|
+
|
|
30
|
+
## 3. Available Tools and API Parameters
|
|
31
|
+
|
|
32
|
+
| Tool | Parameters | Description |
|
|
33
|
+
| :--- | :--- | :--- |
|
|
34
|
+
| **`grandma3_ping`** | None | Verifies that the FastMCP server is active and ready to transmit commands. |
|
|
35
|
+
| **`execute_command`** | `command: string` | Sends an arbitrary grandMA3 command to the console CLI via OSC (e.g., `ClearAll`, `Go Page 2`). |
|
|
36
|
+
| **`execute_macro`** | `macro_number: int` | Executes a specific macro number using the `Go Macro {num}` syntax. |
|
|
37
|
+
| **`patch_fixture`** | `fixture_id: int`, `name: string`, `fixture_type: string`, `address: string` | Automatically runs the console CLI command to assign, name, set fixture type, and patch a fixture. |
|
|
38
|
+
|
|
39
|
+
---
|
|
40
|
+
|
|
41
|
+
## 4. Code Recipes and Prompt Cookbook
|
|
42
|
+
|
|
43
|
+
### Recipe 1: Standard Fixture Patching
|
|
44
|
+
Patch four Robe BMFL fixtures starting at DMX address 1.101:
|
|
45
|
+
|
|
46
|
+
```json
|
|
47
|
+
// Tool Call: patch_fixture
|
|
48
|
+
{
|
|
49
|
+
"fixture_id": 101,
|
|
50
|
+
"name": "BMFL_StageLeft_01",
|
|
51
|
+
"fixture_type": "Robe BMFL",
|
|
52
|
+
"address": "1.101"
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
// Tool Call: patch_fixture
|
|
56
|
+
{
|
|
57
|
+
"fixture_id": 102,
|
|
58
|
+
"name": "BMFL_StageLeft_02",
|
|
59
|
+
"fixture_type": "Robe BMFL",
|
|
60
|
+
"address": "1.121"
|
|
61
|
+
}
|
|
62
|
+
```
|
|
63
|
+
|
|
64
|
+
### Recipe 2: Triggering Show Cues
|
|
65
|
+
Run a sequence command to clear the programmer, select fixtures, set intensity, and store a cue:
|
|
66
|
+
|
|
67
|
+
```json
|
|
68
|
+
// Tool Call: execute_command
|
|
69
|
+
{
|
|
70
|
+
"command": "ClearAll"
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
// Tool Call: execute_command
|
|
74
|
+
{
|
|
75
|
+
"command": "Fixture 101 Thru 105 At 80"
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
// Tool Call: execute_command
|
|
79
|
+
{
|
|
80
|
+
"command": "Store Cue 1 \"Intro Light\""
|
|
81
|
+
}
|
|
82
|
+
```
|
|
83
|
+
|
|
84
|
+
---
|
|
85
|
+
|
|
86
|
+
## 5. Troubleshooting and Connection Details
|
|
87
|
+
|
|
88
|
+
### Network Configuration
|
|
89
|
+
- **OSC Target IP:** `127.0.0.1` (localhost)
|
|
90
|
+
- **OSC Target Port:** `8000` (UDP)
|
|
91
|
+
- **OSC Input Address:** `/cmd`
|
|
92
|
+
|
|
93
|
+
### Console Settings Checklist
|
|
94
|
+
1. Open grandMA3 -> **Setup** -> **In & Out** -> **OSC**.
|
|
95
|
+
2. Create a new OSC connection entry.
|
|
96
|
+
3. Configure the following parameters:
|
|
97
|
+
- **Mode:** `In` (Listening)
|
|
98
|
+
- **Destination IP:** `127.0.0.1`
|
|
99
|
+
- **Port:** `8000`
|
|
100
|
+
- **Protocol:** `UDP`
|
|
101
|
+
4. Verify that the OSC connection status icon is green.
|
|
102
|
+
|
|
103
|
+
### Common Errors and Fixes
|
|
104
|
+
1. **`OSC message sent, but console is not responding`**
|
|
105
|
+
- *Cause:* grandMA3's OSC listener is disabled or binding to a different port.
|
|
106
|
+
- *Fix:* Verify that the OSC entry in grandMA3 matches port `8000` and has the `/cmd` prefix active.
|
|
107
|
+
2. **`Patch Command Syntax Failure`**
|
|
108
|
+
- *Cause:* The `fixture_type` string does not match any profile loaded in grandMA3's fixture library.
|
|
109
|
+
- *Fix:* Pre-load the required fixture profiles inside grandMA3's Patch window before attempting to script patch mappings.
|
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: bdb-resolume-mcp
|
|
3
|
+
description: Utilizes the Resolume Arena MCP server to trigger clips, clear layers, adjust speeds, and query composition status via the Resolume REST API.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Resolume Arena MCP — Integration and AI Agent Guide
|
|
7
|
+
|
|
8
|
+
This skill file instructs AI agents on how to interface with Resolume Arena media servers using the `resolume_mcp.py` script. It details REST endpoint interactions, layer clearing, composition queries, and troubleshooting steps.
|
|
9
|
+
|
|
10
|
+
## 1. Overview and Pipeline Value
|
|
11
|
+
|
|
12
|
+
The **Resolume Arena MCP Server** exposes Resolume Arena's local REST API (7.26+) to AI agents. In the BDB OS media playback pipeline, this enables dynamic clip triggering, layer mixing, composition speed overrides, and status feedback for real-time visual performances.
|
|
13
|
+
|
|
14
|
+
### Architecture
|
|
15
|
+
- **FastMCP server:** Bridges MCP client requests to standard HTTP REST calls.
|
|
16
|
+
- **HTTP REST Transport:** Talks to Resolume's built-in web server at `http://localhost:8080/api/v1`.
|
|
17
|
+
- **JSON Payload Handler:** Processes composition, layer, deck, and clip properties natively.
|
|
18
|
+
|
|
19
|
+
---
|
|
20
|
+
|
|
21
|
+
## 2. System Instructions
|
|
22
|
+
|
|
23
|
+
### Workflow Priorities
|
|
24
|
+
1. **Enable Web Server:** Ensure Resolume's Web Server is activated in the preferences menu.
|
|
25
|
+
2. **Layer/Clip Indices:** Note that Resolume's API endpoints are **1-indexed** for layers and clips (e.g., `layer=1`, `clip=1`).
|
|
26
|
+
3. **Query before Trigger:** Query `/composition` to retrieve current deck layouts and identify which columns/rows contain clips before firing play triggers.
|
|
27
|
+
|
|
28
|
+
---
|
|
29
|
+
|
|
30
|
+
## 3. Available Tools and API Parameters
|
|
31
|
+
|
|
32
|
+
| Tool | Parameters | Description |
|
|
33
|
+
| :--- | :--- | :--- |
|
|
34
|
+
| **`resolume_ping`** | None | Verifies if Resolume Arena is running by querying the `/product` endpoint. |
|
|
35
|
+
| **`trigger_clip`** | `layer: int`, `clip: int` | Fires a clip located on a target layer and clip index (1-indexed). |
|
|
36
|
+
| **`clear_layer`** | `layer: int` | Stops playback and clears visual output on a specific layer (1-indexed). |
|
|
37
|
+
| **`get_composition`** | None | Retrieves a full JSON representation of the active composition, decks, layer routing, and parameter states. |
|
|
38
|
+
| **`set_composition_speed`** | `speed: float` | Adjusts composition playback speed multiplier. |
|
|
39
|
+
|
|
40
|
+
---
|
|
41
|
+
|
|
42
|
+
## 4. Code Recipes and Prompt Cookbook
|
|
43
|
+
|
|
44
|
+
### Recipe 1: Sequence Multi-Layer Visual Playback
|
|
45
|
+
Trigger clip 3 on layer 1 and clip 5 on layer 2 simultaneously:
|
|
46
|
+
|
|
47
|
+
```json
|
|
48
|
+
// Step 1: Trigger layer 1 clip
|
|
49
|
+
// Tool Call: trigger_clip
|
|
50
|
+
{
|
|
51
|
+
"layer": 1,
|
|
52
|
+
"clip": 3
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
// Step 2: Trigger layer 2 clip
|
|
56
|
+
// Tool Call: trigger_clip
|
|
57
|
+
{
|
|
58
|
+
"layer": 2,
|
|
59
|
+
"clip": 5
|
|
60
|
+
}
|
|
61
|
+
```
|
|
62
|
+
|
|
63
|
+
### Recipe 2: Transition / Fade-Out Setup
|
|
64
|
+
Clear the primary foreground visual layer and scale composition speed to normal:
|
|
65
|
+
|
|
66
|
+
```json
|
|
67
|
+
// Step 1: Clear foreground layer (Layer 3)
|
|
68
|
+
// Tool Call: clear_layer
|
|
69
|
+
{
|
|
70
|
+
"layer": 3
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
// Step 2: Normalize master composition speed
|
|
74
|
+
// Tool Call: set_composition_speed
|
|
75
|
+
{
|
|
76
|
+
"speed": 1.0
|
|
77
|
+
}
|
|
78
|
+
```
|
|
79
|
+
|
|
80
|
+
---
|
|
81
|
+
|
|
82
|
+
## 5. Troubleshooting and Connection Details
|
|
83
|
+
|
|
84
|
+
### Network Configuration
|
|
85
|
+
- **Resolume API Host:** `localhost`
|
|
86
|
+
- **Resolume API Port:** `8080` (Default REST Port)
|
|
87
|
+
- **API Base URL:** `http://localhost:8080/api/v1`
|
|
88
|
+
|
|
89
|
+
### Resolume Preference Verification
|
|
90
|
+
1. Open Resolume Arena -> **Preferences** -> **Web Server**.
|
|
91
|
+
2. Check the box **"Enable Web Server"**.
|
|
92
|
+
3. Verify the port is set to `8080`. (If you use a password, note that the current MCP server relies on unauthenticated local network access; disable password auth or modify `resolume_mcp.py` to add auth headers).
|
|
93
|
+
|
|
94
|
+
### Common Errors and Fixes
|
|
95
|
+
1. **`Resolume API not reachable: HTTP Error 404`**
|
|
96
|
+
- *Cause:* Resolume is running, but the Web Server is disabled.
|
|
97
|
+
- *Fix:* Enable the Web Server in Resolume's preferences.
|
|
98
|
+
2. **`Trigger Clip fails / success status returned but no output`**
|
|
99
|
+
- *Cause:* The layer or clip indices do not contain active media assets, or the target deck is not selected.
|
|
100
|
+
- *Fix:* Call `get_composition` to inspect deck configurations and verify that the target layer/clip slot contains media.
|
|
101
|
+
3. **`Port Conflict on 8080`**
|
|
102
|
+
- *Cause:* Another developer service (e.g. Apache, Tomcat, or Docker) is binding to port 8080.
|
|
103
|
+
- *Fix:* Change the web server port inside Resolume's Preferences -> Web Server settings, and update `RESOLUME_API_BASE` inside `resolume_mcp.py`.
|
|
@@ -0,0 +1,153 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: bdb-rhino-mcp
|
|
3
|
+
description: Utilizes the Rhino MCP servers (RhinoMCP and golem-rhino-mcp) to create and manipulate 3D models and run Grasshopper graphs.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Rhino 3D MCP — Integration and AI Agent Guide
|
|
7
|
+
|
|
8
|
+
This skill file instructs AI agents on how to utilize the McNeel Rhino MCP and GOLEM-3DMCP integrations. It details tool prefixes, API structures, geometry operations, Grasshopper automation, and troubleshooting steps.
|
|
9
|
+
|
|
10
|
+
## 1. Overview and Pipeline Value
|
|
11
|
+
|
|
12
|
+
The **Rhino MCP Platform** and **GOLEM-3DMCP Server** connect AI agents to McNeel Rhino 7/8. This allows natural language-driven 3D CAD modeling, NURBS reconstruction, structural planning, and parametric scripting in Grasshopper.
|
|
13
|
+
|
|
14
|
+
### Architecture
|
|
15
|
+
- **In-Process socket server:** A custom startup script (`startup.py`) running inside Rhino's Python Script Editor creates a JSON-RPC 2.0 socket server on localhost.
|
|
16
|
+
- **MCP Server bridge:** A Python MCP server proxy connects the AI assistant to the socket server, translating MCP tool calls to Rhino API calls.
|
|
17
|
+
- **Grasshopper runtime:** Provides direct control over Grasshopper parameters, enabling real-time solver execution and parameter sweeps.
|
|
18
|
+
|
|
19
|
+
---
|
|
20
|
+
|
|
21
|
+
## 2. System Instructions
|
|
22
|
+
|
|
23
|
+
### Workflow Priorities
|
|
24
|
+
1. **Scene Audit first:** Always run `scene.get_document_info` or `scene.list_layers` to understand the scale, active units (e.g. millimeters vs. meters), and current hierarchy.
|
|
25
|
+
2. **Object Lifecycle:** Many geometry operations (like booleans) consume their input objects and return new GUIDs. Update your working memory with the returned GUIDs and discard the consumed ones to prevent `OBJECT_NOT_FOUND` errors.
|
|
26
|
+
3. **Run on UI Thread:** Complex viewport updates or UI-dependent Grasshopper runs require queuing on the Rhino UI thread. The MCP server handles this, but be prepared for a 30s timeout under heavy load.
|
|
27
|
+
4. **Grasshopper Workflow:** Run `grasshopper.open_definition` before modifying sliders. Always call `grasshopper.recompute` to update the solver after changing parameter values.
|
|
28
|
+
|
|
29
|
+
---
|
|
30
|
+
|
|
31
|
+
## 3. Available Tools and API Parameters
|
|
32
|
+
|
|
33
|
+
GOLEM-3DMCP provides 105 granular tools across multiple categories.
|
|
34
|
+
|
|
35
|
+
### Scene Intelligence (`scene.*`)
|
|
36
|
+
- **`scene.get_document_info()`**: Returns units, tolerance, layer count, and bounding box.
|
|
37
|
+
- **`scene.list_layers()`**: Lists all layers, visibility, lock states, and colors.
|
|
38
|
+
- **`scene.list_objects(object_type: string, layer?: string)`**: Lists objects with optional type filters (point, curve, surface, brep, mesh, subd, annotation).
|
|
39
|
+
- **`scene.get_object_info(guid: string)`**: Returns precise control points, layer, and metadata.
|
|
40
|
+
- **`scene.create_layer(name: string, color?: object)`**: Creates layers (nested with `::` syntax).
|
|
41
|
+
|
|
42
|
+
### Geometry Creation (`create_*`)
|
|
43
|
+
- **`create_box(width: float, depth: float, height: float, corner_x?: float, corner_y?: float, corner_z?: float)`**
|
|
44
|
+
- **`create_sphere(radius: float, center_x?: float, center_y?: float, center_z?: float)`**
|
|
45
|
+
- **`create_cylinder(radius: float, height: float)`**
|
|
46
|
+
- **`create_nurbs_curve(points: list[list[float]], degree?: int)`**
|
|
47
|
+
- **`create_polyline(points: list[list[float]], closed?: boolean)`**
|
|
48
|
+
- **`create_text(text: string, location: list[float], height: float)`**
|
|
49
|
+
|
|
50
|
+
### Geometry Operations (`operations.*` & `surfaces.*`)
|
|
51
|
+
- **`operations.boolean_union(guids: list[string])`**: Unions closed solids.
|
|
52
|
+
- **`operations.boolean_difference(guid_a: string, guids_b: list[string])`**: Cuts `guids_b` from `guid_a`.
|
|
53
|
+
- **`operations.offset_curve(curve_id: string, distance: float)`**
|
|
54
|
+
- **`operations.fillet_edge(brep_id: string, edge_indices: list[int], radius: float)`**
|
|
55
|
+
- **`surfaces.loft(curve_ids: list[string], loft_type?: string)`**
|
|
56
|
+
- **`surfaces.sweep1(rail_id: string, shape_ids: list[string])`**
|
|
57
|
+
|
|
58
|
+
### Grasshopper Automation (`grasshopper.*`)
|
|
59
|
+
- **`grasshopper.open_definition(path: string)`**: Loads a `.gh` or `.ghx` definition.
|
|
60
|
+
- **`grasshopper.get_parameters()`**: Queries all sliders, panels, and outputs.
|
|
61
|
+
- **`grasshopper.set_parameter(name_or_id: string, value: any)`**: Modifies sliders or inputs.
|
|
62
|
+
- **`grasshopper.recompute()`**: Forces a solution recalculation.
|
|
63
|
+
- **`grasshopper.get_output_value(name_or_id: string)`**: Reads output component values.
|
|
64
|
+
|
|
65
|
+
### Scripting and Viewports (`scripting.*` & `viewport.*`)
|
|
66
|
+
- **`scripting.execute_python(code: string)`**: Runs arbitrary Python script utilizing `Rhino` and `rhinoscriptsyntax`.
|
|
67
|
+
- **`viewport.capture_to_file(path: string, width?: int, height?: int)`**: Captures the current view.
|
|
68
|
+
- **`viewport.set_camera(location: list[float], target: list[float])`**: Points the camera.
|
|
69
|
+
|
|
70
|
+
---
|
|
71
|
+
|
|
72
|
+
## 4. Code Recipes and Prompt Cookbook
|
|
73
|
+
|
|
74
|
+
### Recipe 1: Parametric Truss Setup in Grasshopper
|
|
75
|
+
Open a Grasshopper file, adjust structural dimensions, and extract the generated geometry:
|
|
76
|
+
|
|
77
|
+
```json
|
|
78
|
+
// Step 1: Load file
|
|
79
|
+
// Tool: grasshopper.open_definition(path="/Users/timrennings/project/truss.gh")
|
|
80
|
+
|
|
81
|
+
// Step 2: Modify span and height
|
|
82
|
+
// Tool: grasshopper.set_parameter(name_or_id="SpanSlider", value=150.0)
|
|
83
|
+
// Tool: grasshopper.set_parameter(name_or_id="HeightSlider", value=22.5)
|
|
84
|
+
|
|
85
|
+
// Step 3: Recompute solver
|
|
86
|
+
// Tool: grasshopper.recompute()
|
|
87
|
+
|
|
88
|
+
// Step 4: Bake outputs
|
|
89
|
+
// Tool: grasshopper.bake_output(name_or_id="TrussGeometry", layer="StructuralTrusses")
|
|
90
|
+
```
|
|
91
|
+
|
|
92
|
+
### Recipe 2: Custom NURBS Loft Creation
|
|
93
|
+
To generate custom ribs and loft a skin between them using Python scripting:
|
|
94
|
+
|
|
95
|
+
```python
|
|
96
|
+
# Call tool: scripting.execute_python(code="...")
|
|
97
|
+
import rhinoscriptsyntax as rs
|
|
98
|
+
import math
|
|
99
|
+
|
|
100
|
+
curves = []
|
|
101
|
+
for i in range(5):
|
|
102
|
+
points = []
|
|
103
|
+
for j in range(10):
|
|
104
|
+
x = i * 20.0
|
|
105
|
+
y = j * 10.0
|
|
106
|
+
z = math.sin(j * 0.5) * 15.0 + (i * 2.0)
|
|
107
|
+
points.append([x, y, z])
|
|
108
|
+
|
|
109
|
+
# Create curve
|
|
110
|
+
crv = rs.AddNurbsCurve(points)
|
|
111
|
+
curves.append(crv)
|
|
112
|
+
|
|
113
|
+
# Loft skin
|
|
114
|
+
loft = rs.AddLoftSrf(curves)
|
|
115
|
+
rs.ObjectName(loft, "ProceduralNurbsCanopy")
|
|
116
|
+
print(f"Lofted canopy created with ID: {loft}")
|
|
117
|
+
```
|
|
118
|
+
|
|
119
|
+
---
|
|
120
|
+
|
|
121
|
+
## 5. Troubleshooting and Connection Details
|
|
122
|
+
|
|
123
|
+
### Connection Setup
|
|
124
|
+
- **Default Port:** `9876` (TCP socket communication)
|
|
125
|
+
- **Rhino Startup Script:** `rhino_plugin/startup.py`
|
|
126
|
+
- **Verify Connection:**
|
|
127
|
+
```bash
|
|
128
|
+
# Check if server is running on the port
|
|
129
|
+
lsof -i :9876
|
|
130
|
+
```
|
|
131
|
+
|
|
132
|
+
### Common Errors and Fixes
|
|
133
|
+
|
|
134
|
+
1. **`RhinoConnectionError: Cannot connect to Rhino plugin at 127.0.0.1:9876`**
|
|
135
|
+
- *Cause:* The plugin server is not running inside Rhino.
|
|
136
|
+
- *Fix:* Open Rhino's Python script editor, open `rhino_plugin/startup.py`, and run it. To automate, add it to Options -> RhinoScript -> Startup scripts.
|
|
137
|
+
|
|
138
|
+
2. **`GH not available`**
|
|
139
|
+
- *Cause:* Grasshopper is installed but has not been loaded in the active session.
|
|
140
|
+
- *Fix:* Run the `Grasshopper` command in Rhino once, then restart the GOLEM plugin by running:
|
|
141
|
+
```python
|
|
142
|
+
import rhino_plugin.startup as golem
|
|
143
|
+
golem.restart_golem()
|
|
144
|
+
```
|
|
145
|
+
|
|
146
|
+
3. **`RhinoTimeoutError`**
|
|
147
|
+
- *Cause:* An operation took longer than the default 30-second threshold.
|
|
148
|
+
- *Fix:* Increase the timeout in your `.mcp.json` config:
|
|
149
|
+
```json
|
|
150
|
+
"env": {
|
|
151
|
+
"GOLEM_TIMEOUT": "120"
|
|
152
|
+
}
|
|
153
|
+
```
|
|
@@ -0,0 +1,116 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: bdb-touchdesigner-mcp
|
|
3
|
+
description: Utilizes the TouchDesigner MCP servers (tdmcp and touchdesigner-mcp) to create TOP/CHOP chains, script operators, inspect parameters, and debug node networks.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# TouchDesigner MCP — Integration and AI Agent Guide
|
|
7
|
+
|
|
8
|
+
This skill file instructs AI agents on how to construct real-time visual systems inside TouchDesigner using the `tdmcp` (MindDesigner) and `touchdesigner-mcp` (Backup) integrations. It details node building, operator classes, preview generation, and troubleshooting steps.
|
|
9
|
+
|
|
10
|
+
## 1. Overview and Pipeline Value
|
|
11
|
+
|
|
12
|
+
The **TouchDesigner MCP (MindDesigner)** server enables AI models to programmatically construct, connect, parameterize, and debug node networks in TouchDesigner. In the BDB OS architecture, this automates audio-reactive particle simulations, feedback systems, projection mapping, GLSL shader chains, and data visualizations.
|
|
13
|
+
|
|
14
|
+
### Architecture
|
|
15
|
+
- **In-Process WebServer / Socket Bridge:** A custom component (e.g. `tdmcp_bridge_package.tox` or `mcp_webserver_base.tox`) is placed inside TouchDesigner. It listens on a local port and translates incoming JSON commands to Python operations (like `parent().create(noiseTOP)`).
|
|
16
|
+
- **Dual Server Layout:**
|
|
17
|
+
- *`tdmcp` (MindDesigner):* Runs on port `9980`. Focuses on creative visual engineering with 332 high-level generation tools.
|
|
18
|
+
- *`touchdesigner-mcp` (Backup/Direct):* Runs on port `9981`. Focuses on atomic node CRUD and low-level scripting fallback.
|
|
19
|
+
|
|
20
|
+
---
|
|
21
|
+
|
|
22
|
+
## 2. System Instructions
|
|
23
|
+
|
|
24
|
+
### Workflow Priorities
|
|
25
|
+
1. **Bridge Verification first:** Always call `get_td_info` to confirm the TouchDesigner bridge is reachable and running compatible versions.
|
|
26
|
+
2. **Consult Operator Knowledge:** Consult the operator library before placing nodes. Never guess operator types or namespaces (e.g. use `noiseTOP` for a Noise TOP, `constantCHOP` for a Constant CHOP).
|
|
27
|
+
3. **Structured Tools first:** Prefer structured inspection and modification tools (`find_td_nodes`, `get_td_node_parameters`, `update_td_node_parameters`, `get_td_node_errors`) over raw Python execution. Use `execute_python_script` only when no structured tool fits the request.
|
|
28
|
+
4. **Visual Feedback:** After creating or modifying a network, call `get_preview` or `get_inline_preview` so the user can verify the rendering in real-time.
|
|
29
|
+
|
|
30
|
+
---
|
|
31
|
+
|
|
32
|
+
## 3. Available Tools and API Parameters
|
|
33
|
+
|
|
34
|
+
### High-Level Creative Tools (`tdmcp`)
|
|
35
|
+
- **`create_audio_reactive(layer_name: string)`**: Sets up a complete audio spectrum analyzer routing to video modifiers.
|
|
36
|
+
- **`create_feedback_network(parent: string, input_op: string)`**: Creates a feedback loop using feedback, blur, level, and composite TOPs.
|
|
37
|
+
- **`create_particle_system(parent: string)`**: Generates a GPU particle flow using SOPs, CHOPs, and TOPs.
|
|
38
|
+
- **`animate_parameter(op_path: string, par_name: string, chop_expr: string)`**: Binds a node parameter to a CHOP expression.
|
|
39
|
+
|
|
40
|
+
### Atomic Node Tools (`touchdesigner-mcp` & fallback)
|
|
41
|
+
- **`create_td_node(type: string, path: string, name: string)`**: Places a single node in a network container.
|
|
42
|
+
- **`delete_td_node(path: string)`**: Deletes an operator.
|
|
43
|
+
- **`connect_nodes(from_op: string, to_op: string, from_connector?: int, to_connector?: int)`**: Connects outputs to inputs.
|
|
44
|
+
- **`get_td_nodes(path: string)`**: Lists all operators in a specific network.
|
|
45
|
+
- **`get_td_node_errors(path: string)`**: Checks for active operator errors (red flags) recursively.
|
|
46
|
+
- **`update_td_node_parameters(path: string, parameters: object)`**: Modifies parameter settings.
|
|
47
|
+
|
|
48
|
+
---
|
|
49
|
+
|
|
50
|
+
## 4. Code Recipes and Prompt Cookbook
|
|
51
|
+
|
|
52
|
+
### Recipe 1: Procedural Feedback Loop (MindDesigner)
|
|
53
|
+
Generate a feedback warp tunnel TOP chain:
|
|
54
|
+
|
|
55
|
+
```json
|
|
56
|
+
// Step 1: Create noise source
|
|
57
|
+
// Tool: create_td_node(type="noiseTOP", path="/project1", name="noise_src")
|
|
58
|
+
|
|
59
|
+
// Step 2: Set noise parameters
|
|
60
|
+
// Tool: update_td_node_parameters(path="/project1/noise_src", parameters={"resolutionw": 1080, "resolutionh": 1080, "period": 2.5})
|
|
61
|
+
|
|
62
|
+
// Step 3: Set up feedback loop
|
|
63
|
+
// Tool: create_feedback_network(parent="/project1", input_op="/project1/noise_src")
|
|
64
|
+
```
|
|
65
|
+
|
|
66
|
+
### Recipe 2: Run Custom Python Script for Network Connection
|
|
67
|
+
Connect a series of CHOPs programmatically when structured connection tools are not flexible enough:
|
|
68
|
+
|
|
69
|
+
```python
|
|
70
|
+
# Call tool: execute_python_script(script="...")
|
|
71
|
+
parent_comp = op('/project1')
|
|
72
|
+
lfo = parent_comp.create(lfoCHOP, 'oscillator')
|
|
73
|
+
math_op = parent_comp.create(mathCHOP, 'modifier')
|
|
74
|
+
null_op = parent_comp.create(nullCHOP, 'out_signal')
|
|
75
|
+
|
|
76
|
+
# Connect ports
|
|
77
|
+
math_op.inputConnectors[0].connect(lfo)
|
|
78
|
+
null_op.inputConnectors[0].connect(math_op)
|
|
79
|
+
|
|
80
|
+
# Set Math CHOP range multiplier
|
|
81
|
+
math_op.par.mult = 100.0
|
|
82
|
+
```
|
|
83
|
+
|
|
84
|
+
---
|
|
85
|
+
|
|
86
|
+
## 5. Troubleshooting and Connection Details
|
|
87
|
+
|
|
88
|
+
### Configuration and Ports
|
|
89
|
+
- **MindDesigner Port:** `9980` (`TDMCP_PORT` environment variable)
|
|
90
|
+
- **Backup Controller Port:** `9981` (WebServer port)
|
|
91
|
+
- **Verify Endpoint Availability:**
|
|
92
|
+
```bash
|
|
93
|
+
# Check if MindDesigner is reachable
|
|
94
|
+
curl http://localhost:9980/api/info
|
|
95
|
+
```
|
|
96
|
+
|
|
97
|
+
### Bridge Installation inside TouchDesigner
|
|
98
|
+
1. Download `tdmcp_bridge_package.tox` or `mcp_webserver_base.tox`.
|
|
99
|
+
2. Drag the `.tox` component directly into your active network pane (e.g. `/project1`).
|
|
100
|
+
3. Press **Install** / verify the active port is running.
|
|
101
|
+
|
|
102
|
+
Alternative Textport Bootstrap Installation:
|
|
103
|
+
Open TouchDesigner Textport (`Dialogs -> Textport and DATs`), paste and run:
|
|
104
|
+
```python
|
|
105
|
+
import urllib.request; exec(urllib.request.urlopen("https://github.com/Pantani/tdmcp/raw/v0.12.0/td/bootstrap.py").read().decode())
|
|
106
|
+
```
|
|
107
|
+
|
|
108
|
+
### Common Errors and Fixes
|
|
109
|
+
1. **`TouchDesignerClient ECONNREFUSED`**
|
|
110
|
+
- *Cause:* The bridge component is either not installed or disabled in TouchDesigner.
|
|
111
|
+
- *Fix:* Ensure you dragged the `.tox` component into the project and that its internal server is toggled active.
|
|
112
|
+
2. **`Operator compilation error or red flag`**
|
|
113
|
+
- *Cause:* An invalid parameter type or code was set.
|
|
114
|
+
- *Fix:* Run `get_td_node_errors` on the path of the flagged node to read the compiled compiler/interpreter traceback.
|
|
115
|
+
3. **`Version Mismatch Warning`**
|
|
116
|
+
- *Fix:* Download the latest bridge zip file from releases, delete the old `touchdesigner-mcp-td` folder in your project, restart TouchDesigner, and drop in the new `.tox`.
|
|
@@ -0,0 +1,130 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: bdb-unreal-mcp
|
|
3
|
+
description: Utilizes the Unreal Engine MCP server to control UE5 via a native C++ Automation Bridge plugin.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Unreal Engine MCP — Integration and AI Agent Guide
|
|
7
|
+
|
|
8
|
+
This skill file instructs AI agents on how to interact with the Unreal Engine 5.8+ MCP Server. It details the tool capabilities, API schemas, design patterns, workflows, scripting rules, and troubleshooting steps for asset management, actor manipulation, and level automation.
|
|
9
|
+
|
|
10
|
+
## 1. Overview and Pipeline Value
|
|
11
|
+
|
|
12
|
+
The **Unreal Engine MCP Server** bridges AI assistants to Unreal Engine 5 (5.0–5.8+) using a native C++ `McpAutomationBridge` plugin. In the BDB OS ecosystem, this integration automates environment construction, material generation, cinematic sequences (Sequencer), Blueprint orchestration, and visual effects (Niagara).
|
|
13
|
+
|
|
14
|
+
### Architecture
|
|
15
|
+
- **Dual Transport:**
|
|
16
|
+
- *Native MCP Mode:* Direct Streamable HTTP/SSE transport (`http://localhost:3000/mcp`) running inside the UE process. No Node.js required.
|
|
17
|
+
- *TypeScript Bridge Mode:* Standard stdio-based bridge using a Node.js process proxying over WebSocket to the plugin's Automation Port (default `8091`).
|
|
18
|
+
- **Discovery Mechanism:** Automatically discovers runtime properties, light classes, debug shapes, and track types using Unreal reflection.
|
|
19
|
+
- **On-Demand Resilience:** Starts gracefully and will auto-reconnect if the Unreal Editor goes offline or is restarted.
|
|
20
|
+
|
|
21
|
+
---
|
|
22
|
+
|
|
23
|
+
## 2. System Instructions
|
|
24
|
+
|
|
25
|
+
### Workflow Priorities
|
|
26
|
+
1. **Introspection First:** Always call `inspect` with `action="inspect_class"` or `action="inspect_cdo"` before mutating parameters. Never guess property names or paths.
|
|
27
|
+
2. **Path Conventions:** Use Unreal paths starting with `/Game/` (e.g., `/Game/Materials/M_Chrome`). Respect additional content mount prefixes registered in `MCP_ADDITIONAL_PATH_PREFIXES`.
|
|
28
|
+
3. **Safety Rules:** Dangerous console commands are pattern-filtered by the bridge. Use high-level tools (`manage_asset`, `control_actor`) rather than running raw console commands.
|
|
29
|
+
4. **Python Scripting:** For complex operations that require native API access not exposed via tools, use `system_control` with `action="execute_python"`. Keep code size under 1MB.
|
|
30
|
+
|
|
31
|
+
---
|
|
32
|
+
|
|
33
|
+
## 3. Available Tools and API Parameters
|
|
34
|
+
|
|
35
|
+
The server exposes 23 canonical MCP tools.
|
|
36
|
+
|
|
37
|
+
| Tool | Action | Parameters | Description |
|
|
38
|
+
| :--- | :--- | :--- | :--- |
|
|
39
|
+
| **`manage_asset`** | `list`, `search_assets`, `import`, `duplicate`, `rename`, `move`, `delete`, `create_folder`, `get_asset`, `get_dependencies`, `analyze_graph`, `set_tags`, `validate`, `create_material`, `create_material_instance`, `create_render_target`, `connect_material_pins` | `objectPath: string`, `destinationPath?: string`, `tags?: object` | Creates, deletes, queries, or modifies project assets and materials. |
|
|
40
|
+
| **`manage_blueprint`** | `create`, `get_blueprint`, `compile`, `add_component`, `set_default`, `get_scs`, `create_node`, `delete_node`, `connect_pins` | `blueprintPath: string`, `componentName?: string`, `properties?: object` | Manages Blueprints, SCS components, graph connections, and compilation. |
|
|
41
|
+
| **`control_actor`** | `spawn`, `spawn_blueprint`, `delete`, `delete_by_tag`, `duplicate`, `set_transform`, `get_transform`, `set_visibility`, `add_component`, `add_tag`, `attach`, `detach` | `actorClass?: string`, `blueprintPath?: string`, `location: float[]`, `rotation: float[]`, `scale: float[]` | Controls spawning, physics, tags, and transforms of actors in the active level. |
|
|
42
|
+
| **`control_editor`** | `play`, `stop`, `set_camera`, `console_command`, `screenshot`, `create_bookmark` | `command?: string`, `location?: float[]`, `rotation?: float[]` | Triggers Play-In-Editor (PIE), positions viewports, and captures screenshots. |
|
|
43
|
+
| **`manage_level`** | `load_level`, `save_level`, `save_level_as`, `stream`, `unload_level`, `create_level`, `build_lighting`, `add_sublevel` | `levelPath: string`, `shouldSave?: boolean` | Manages map loading, streaming, sublevel structure, and lighting builds. |
|
|
44
|
+
| **`build_environment`** | `create_landscape`, `sculpt`, `paint_foliage`, `add_foliage_instances`, `create_procedural_terrain` | `dimensions?: int[]`, `materialPath?: string`, `foliageType?: string` | Automates landscapes, terrain, and foliage placement. |
|
|
45
|
+
| **`system_control`** | `execute_python`, `console_command`, `run_tests`, `subscribe`, `unsubscribe`, `set_project_setting` | `code?: string`, `command?: string` | Low-level execution, settings access, log subscriptions, and Python integration. |
|
|
46
|
+
| **`inspect`** | `inspect_object`, `inspect_class`, `inspect_cdo`, `set_property`, `get_property` | `objectPath: string`, `propertyName?: string`, `propertyValue?: any` | Reflective inspection of live CDO or instantiated object properties. |
|
|
47
|
+
| **`manage_sequence`** | `create`, `add_actor`, `play`, `add_keyframe`, `add_camera`, `add_track` | `sequencePath: string`, `actorPath?: string`, `time?: float` | Creates and drives Sequencer cinematics, tracks, and camera paths. |
|
|
48
|
+
| **`manage_audio`** | `create_sound_cue`, `play_sound_2d`, `play_sound_at_location`, `create_audio_component` | `soundPath: string`, `location?: float[]` | Manages MetaSounds, SoundCues, mixes, attenuation, and spatialized playback. |
|
|
49
|
+
| **`manage_ai`** | `add_node`, `connect_nodes`, `set_node_properties`, `get_tree` | `treePath: string`, `nodeClass?: string` | Builds and queries Behavior Trees, blackboard keys, and EQS queries. |
|
|
50
|
+
| **`manage_geometry`** | `create_box`, `boolean_union`, `boolean_subtract`, `extrude`, `auto_uv`, `convert_to_static_mesh` | `width?: float`, `height?: float`, `meshName?: string` | Procedural modeling in editor using Unreal Geometry Script. |
|
|
51
|
+
|
|
52
|
+
---
|
|
53
|
+
|
|
54
|
+
## 4. Code Recipes and Prompt Cookbook
|
|
55
|
+
|
|
56
|
+
### Recipe 1: Inline Python Scripting via system_control
|
|
57
|
+
To create custom asset chains or perform batch automation directly via Unreal's Python API:
|
|
58
|
+
|
|
59
|
+
```python
|
|
60
|
+
# Call tool: system_control(action="execute_python", params={"code": "..."})
|
|
61
|
+
import unreal
|
|
62
|
+
|
|
63
|
+
def setup_studio_lighting():
|
|
64
|
+
# Retrieve subsystems
|
|
65
|
+
editor_actor_subsystem = unreal.get_editor_subsystem(unreal.EditorActorSubsystem)
|
|
66
|
+
|
|
67
|
+
# Spawn directional light
|
|
68
|
+
dir_light_class = unreal.DirectionalLight.static_class()
|
|
69
|
+
light_actor = editor_actor_subsystem.spawn_actor_from_class(dir_light_class, unreal.Vector(0, 0, 500))
|
|
70
|
+
light_component = light_actor.get_component_by_class(unreal.DirectionalLightComponent.static_class())
|
|
71
|
+
light_component.set_intensity(10.0)
|
|
72
|
+
|
|
73
|
+
# Spawn sky light
|
|
74
|
+
sky_light_class = unreal.SkyLight.static_class()
|
|
75
|
+
sky_actor = editor_actor_subsystem.spawn_actor_from_class(sky_light_class, unreal.Vector(0, 0, 1000))
|
|
76
|
+
|
|
77
|
+
unreal.log("Studio lighting initialized successfully.")
|
|
78
|
+
|
|
79
|
+
setup_studio_lighting()
|
|
80
|
+
```
|
|
81
|
+
|
|
82
|
+
### Recipe 2: Procedural Geometry Construction
|
|
83
|
+
To create a procedural staircase using the Geometry Scripting API:
|
|
84
|
+
|
|
85
|
+
```python
|
|
86
|
+
# Call tool: manage_geometry(action="create_stairs", params={"width": 200, "height": 300, "steps": 12})
|
|
87
|
+
# Followed by: manage_geometry(action="convert_to_static_mesh", params={"meshPath": "/Game/Geometry/SM_ProceduralStairs"})
|
|
88
|
+
```
|
|
89
|
+
|
|
90
|
+
### Recipe 3: Material Instance Setup
|
|
91
|
+
Create a master material instance and override properties programmatically:
|
|
92
|
+
|
|
93
|
+
```json
|
|
94
|
+
// Tool Call: manage_asset(action="create_material_instance")
|
|
95
|
+
{
|
|
96
|
+
"parentMaterialPath": "/Game/Materials/M_MasterShader",
|
|
97
|
+
"destinationPath": "/Game/Materials/Instances/MI_GlossyRed"
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
// Tool Call: inspect(action="set_property")
|
|
101
|
+
{
|
|
102
|
+
"objectPath": "/Game/Materials/Instances/MI_GlossyRed",
|
|
103
|
+
"propertyName": "VectorParameterValues",
|
|
104
|
+
"propertyValue": {
|
|
105
|
+
"ParameterName": "BaseColor",
|
|
106
|
+
"ParameterValue": [1.0, 0.0, 0.0, 1.0]
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
```
|
|
110
|
+
|
|
111
|
+
---
|
|
112
|
+
|
|
113
|
+
## 5. Troubleshooting and Connection Details
|
|
114
|
+
|
|
115
|
+
### Connection Setup
|
|
116
|
+
- **Native Port:** `3000` (Direct HTTP endpoint: `http://localhost:3000/mcp`)
|
|
117
|
+
- **Bridge Port:** `8091` (Used for TS bridge to communicate with the C++ plugin)
|
|
118
|
+
- **Status Indicator:** Look for `● MCP :3000 (X)` in the Unreal Editor status bar (bottom-right). Green means active.
|
|
119
|
+
|
|
120
|
+
### Command Verification
|
|
121
|
+
Verify port binding and server availability from terminal:
|
|
122
|
+
```bash
|
|
123
|
+
# Verify native server
|
|
124
|
+
curl http://localhost:3000/mcp/tools
|
|
125
|
+
```
|
|
126
|
+
|
|
127
|
+
### Common Errors
|
|
128
|
+
1. **`McpAutomationBridge not loaded`**: Make sure the plugin is enabled in your `.uproject` file under `Plugins` and that your project is compiled.
|
|
129
|
+
2. **`Missing Python Subsystem`**: Ensure that the **Python Editor Script Plugin** and **Editor Scripting Utilities** are enabled in the editor preferences.
|
|
130
|
+
3. **`Connection Timeout`**: If running over LAN, check that `Listen Host` is set to `0.0.0.0` and that the `Allow Non Loopback` setting is active in the project's plugin settings.
|