@hybridlabor-api/bdb-antigravity-skills 1.0.7 → 1.0.8
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/installer.js +11 -1
- package/installer.sh +5 -1
- package/mcp_config.json +14 -10
- package/mcps/adobe_mcp.py +82 -0
- package/mcps/bdb-resolume-mcp/index.js +18 -0
- package/mcps/bdb-resolume-mcp/package.json +1 -0
- package/mcps/bdb-unrealengine5-mcp/index.js +18 -0
- package/mcps/bdb-unrealengine5-mcp/package.json +1 -0
- package/mcps/bdb_davinci_mcp/bdb_davinci_mcp/__init__.py +0 -0
- package/mcps/bdb_davinci_mcp/bdb_davinci_mcp/__main__.py +21 -0
- package/mcps/bdb_ma3_mcp/bdb_ma3_mcp/__init__.py +0 -0
- package/mcps/bdb_ma3_mcp/bdb_ma3_mcp/__main__.py +21 -0
- package/mcps/bdb_rhino_mcp/bdb_rhino_mcp/__init__.py +0 -0
- package/mcps/bdb_rhino_mcp/bdb_rhino_mcp/__main__.py +21 -0
- package/mcps/davinci_mcp.py +11 -0
- package/mcps/grandma3_mcp.py +11 -0
- package/mcps/resolume_mcp.py +11 -0
- package/mcps/rhino_mcp.py +11 -0
- package/mcps/scaffold.sh +70 -0
- package/mcps/unreal_mcp.py +11 -0
- package/package.json +3 -2
package/installer.js
CHANGED
|
@@ -100,12 +100,22 @@ rl.question("Do you also want to install the MCP Pack (Unreal, Rhino, Resolve, G
|
|
|
100
100
|
const configDir = path.join(geminiDir, 'config');
|
|
101
101
|
fs.mkdirSync(configDir, { recursive: true });
|
|
102
102
|
|
|
103
|
+
// Copy MCP servers code
|
|
104
|
+
const mcpCodeTarget = path.join(configDir, 'mcps');
|
|
105
|
+
copyDirRecursiveSync(path.join(srcDir, 'mcps'), mcpCodeTarget);
|
|
106
|
+
console.log(` -> Installed local MCP servers to ${mcpCodeTarget}`);
|
|
107
|
+
|
|
103
108
|
const mcpTarget = path.join(configDir, 'mcp_config.json');
|
|
104
109
|
if (fs.existsSync(mcpTarget)) {
|
|
105
110
|
fs.copyFileSync(mcpTarget, path.join(backupDir, 'mcp_config_backup.json'));
|
|
106
111
|
console.log(" -> Backed up existing mcp_config.json");
|
|
107
112
|
}
|
|
108
|
-
|
|
113
|
+
|
|
114
|
+
// Read and replace template
|
|
115
|
+
let mcpConfigStr = fs.readFileSync(path.join(srcDir, 'mcp_config.json'), 'utf8');
|
|
116
|
+
mcpConfigStr = mcpConfigStr.replace(/__MCPS_DIR__/g, mcpCodeTarget);
|
|
117
|
+
mcpConfigStr = mcpConfigStr.replace(/\{\{HOME\}\}/g, homeDir);
|
|
118
|
+
fs.writeFileSync(mcpTarget, mcpConfigStr);
|
|
109
119
|
console.log(` -> Installed optimized mcp_config.json to ${configDir}`);
|
|
110
120
|
} else {
|
|
111
121
|
console.log(" -> Skipping MCP installation.");
|
package/installer.sh
CHANGED
|
@@ -85,8 +85,12 @@ if [[ "$install_mcp" =~ ^[Yy]$ ]]; then
|
|
|
85
85
|
cp "$HOME/.gemini/config/mcp_config.json" "$BACKUP_DIR/mcp_config_backup.json"
|
|
86
86
|
echo " -> Backed up existing mcp_config.json"
|
|
87
87
|
fi
|
|
88
|
-
|
|
88
|
+
sed "s|__MCPS_DIR__|$HOME/.gemini/config/mcps|g" "$SRC_DIR/mcp_config.json" > "$HOME/.gemini/config/mcp_config.json"
|
|
89
89
|
echo " -> Installed optimized mcp_config.json to $HOME/.gemini/config/"
|
|
90
|
+
|
|
91
|
+
mkdir -p "$HOME/.gemini/config/mcps"
|
|
92
|
+
cp -R "$SRC_DIR/mcps/"* "$HOME/.gemini/config/mcps/" 2>/dev/null || true
|
|
93
|
+
echo " -> Installed local MCP servers to $HOME/.gemini/config/mcps/"
|
|
90
94
|
else
|
|
91
95
|
echo " -> Skipping MCP installation."
|
|
92
96
|
fi
|
package/mcp_config.json
CHANGED
|
@@ -9,24 +9,28 @@
|
|
|
9
9
|
"args": ["-y", "@modelcontextprotocol/server-puppeteer"]
|
|
10
10
|
},
|
|
11
11
|
"bdb_unreal_mcp": {
|
|
12
|
-
"command": "
|
|
13
|
-
"args": ["
|
|
12
|
+
"command": "uv",
|
|
13
|
+
"args": ["run", "__MCPS_DIR__/unreal_mcp.py"]
|
|
14
14
|
},
|
|
15
15
|
"bdb_rhino_mcp": {
|
|
16
|
-
"command": "
|
|
17
|
-
"args": ["
|
|
16
|
+
"command": "uv",
|
|
17
|
+
"args": ["run", "__MCPS_DIR__/rhino_mcp.py"]
|
|
18
18
|
},
|
|
19
19
|
"bdb_davinci_mcp": {
|
|
20
|
-
"command": "
|
|
21
|
-
"args": ["
|
|
20
|
+
"command": "uv",
|
|
21
|
+
"args": ["run", "__MCPS_DIR__/davinci_mcp.py"]
|
|
22
22
|
},
|
|
23
23
|
"bdb_grandma3_mcp": {
|
|
24
|
-
"command": "
|
|
25
|
-
"args": ["
|
|
24
|
+
"command": "uv",
|
|
25
|
+
"args": ["run", "__MCPS_DIR__/grandma3_mcp.py"]
|
|
26
26
|
},
|
|
27
27
|
"bdb_resolume_mcp": {
|
|
28
|
-
"command": "
|
|
29
|
-
"args": ["
|
|
28
|
+
"command": "uv",
|
|
29
|
+
"args": ["run", "__MCPS_DIR__/resolume_mcp.py"]
|
|
30
|
+
},
|
|
31
|
+
"adobe_mcp": {
|
|
32
|
+
"command": "uv",
|
|
33
|
+
"args": ["run", "__MCPS_DIR__/adobe_mcp.py"]
|
|
30
34
|
},
|
|
31
35
|
"bdb_td_minddesigner": {
|
|
32
36
|
"command": "npx",
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
from mcp.server.fastmcp import FastMCP
|
|
2
|
+
import subprocess
|
|
3
|
+
|
|
4
|
+
mcp = FastMCP("Adobe Suite MCP")
|
|
5
|
+
|
|
6
|
+
def execute_adobe_jsx(app_name: str, jsx_code: str) -> str:
|
|
7
|
+
escaped_jsx = jsx_code.replace('"', '\\"')
|
|
8
|
+
command = "do javascript"
|
|
9
|
+
if "After Effects" in app_name:
|
|
10
|
+
command = "DoScript"
|
|
11
|
+
|
|
12
|
+
apple_script = f'''
|
|
13
|
+
tell application "{app_name}"
|
|
14
|
+
{command} "{escaped_jsx}"
|
|
15
|
+
end tell
|
|
16
|
+
'''
|
|
17
|
+
|
|
18
|
+
result = subprocess.run(["osascript", "-e", apple_script], capture_output=True, text=True)
|
|
19
|
+
if result.returncode != 0:
|
|
20
|
+
raise Exception(f"Adobe Script Error: {result.stderr}")
|
|
21
|
+
|
|
22
|
+
return result.stdout.strip()
|
|
23
|
+
|
|
24
|
+
@mcp.tool()
|
|
25
|
+
def ps_add_text_layer(text: str, font_size: int = 24) -> str:
|
|
26
|
+
"""Adds a text layer to the active Photoshop document."""
|
|
27
|
+
jsx = f"""
|
|
28
|
+
if (app.documents.length > 0) {{
|
|
29
|
+
var doc = app.activeDocument;
|
|
30
|
+
var artLayer = doc.artLayers.add();
|
|
31
|
+
artLayer.kind = LayerKind.TEXT;
|
|
32
|
+
var textItem = artLayer.textItem;
|
|
33
|
+
textItem.contents = "{text}";
|
|
34
|
+
textItem.size = {font_size};
|
|
35
|
+
"Success";
|
|
36
|
+
}} else {{
|
|
37
|
+
"Error: No active document";
|
|
38
|
+
}}
|
|
39
|
+
"""
|
|
40
|
+
return execute_adobe_jsx("Adobe Photoshop", jsx)
|
|
41
|
+
|
|
42
|
+
@mcp.tool()
|
|
43
|
+
def ae_render_active_comp() -> str:
|
|
44
|
+
"""Adds active composition to render queue and renders it in After Effects."""
|
|
45
|
+
jsx = """
|
|
46
|
+
var comp = app.project.activeItem;
|
|
47
|
+
if (comp != null && comp instanceof CompItem) {
|
|
48
|
+
app.project.renderQueue.items.add(comp);
|
|
49
|
+
app.project.renderQueue.render();
|
|
50
|
+
"Render Complete";
|
|
51
|
+
} else {
|
|
52
|
+
"Error: No active comp";
|
|
53
|
+
}
|
|
54
|
+
"""
|
|
55
|
+
return execute_adobe_jsx("Adobe After Effects", jsx)
|
|
56
|
+
|
|
57
|
+
@mcp.tool()
|
|
58
|
+
def pr_get_sequences() -> str:
|
|
59
|
+
"""Gets the names of all sequences in Premiere Pro."""
|
|
60
|
+
jsx = """
|
|
61
|
+
var seqs = app.project.sequences;
|
|
62
|
+
var names = [];
|
|
63
|
+
if (seqs) {
|
|
64
|
+
for (var i = 0; i < seqs.numSequences; i++) {
|
|
65
|
+
names.push(seqs[i].name);
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
names.join(", ");
|
|
69
|
+
"""
|
|
70
|
+
return execute_adobe_jsx("Adobe Premiere Pro", jsx)
|
|
71
|
+
|
|
72
|
+
@mcp.tool()
|
|
73
|
+
def ai_create_document() -> str:
|
|
74
|
+
"""Creates a new default document in Illustrator."""
|
|
75
|
+
jsx = """
|
|
76
|
+
var doc = app.documents.add();
|
|
77
|
+
"Created new Illustrator document";
|
|
78
|
+
"""
|
|
79
|
+
return execute_adobe_jsx("Adobe Illustrator", jsx)
|
|
80
|
+
|
|
81
|
+
if __name__ == "__main__":
|
|
82
|
+
mcp.run()
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
const readline = require('readline');
|
|
3
|
+
const rl = readline.createInterface({
|
|
4
|
+
input: process.stdin,
|
|
5
|
+
output: process.stdout,
|
|
6
|
+
terminal: false
|
|
7
|
+
});
|
|
8
|
+
rl.on('line', (line) => {
|
|
9
|
+
if (!line.trim()) return;
|
|
10
|
+
try {
|
|
11
|
+
const req = JSON.parse(line);
|
|
12
|
+
if (req.method === 'initialize') {
|
|
13
|
+
console.log(JSON.stringify({ jsonrpc: '2.0', id: req.id, result: { protocolVersion: '2024-11-05', capabilities: { tools: {} }, serverInfo: { name: 'unreal-mcp', version: '1.0.0' } } }));
|
|
14
|
+
} else if (req.method === 'tools/list') {
|
|
15
|
+
console.log(JSON.stringify({ jsonrpc: '2.0', id: req.id, result: { tools: [] } }));
|
|
16
|
+
}
|
|
17
|
+
} catch (e) {}
|
|
18
|
+
});
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{ "name": "bdb-resolume-mcp", "version": "1.0.0", "main": "index.js" }
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
const readline = require('readline');
|
|
3
|
+
const rl = readline.createInterface({
|
|
4
|
+
input: process.stdin,
|
|
5
|
+
output: process.stdout,
|
|
6
|
+
terminal: false
|
|
7
|
+
});
|
|
8
|
+
rl.on('line', (line) => {
|
|
9
|
+
if (!line.trim()) return;
|
|
10
|
+
try {
|
|
11
|
+
const req = JSON.parse(line);
|
|
12
|
+
if (req.method === 'initialize') {
|
|
13
|
+
console.log(JSON.stringify({ jsonrpc: '2.0', id: req.id, result: { protocolVersion: '2024-11-05', capabilities: { tools: {} }, serverInfo: { name: 'unreal-mcp', version: '1.0.0' } } }));
|
|
14
|
+
} else if (req.method === 'tools/list') {
|
|
15
|
+
console.log(JSON.stringify({ jsonrpc: '2.0', id: req.id, result: { tools: [] } }));
|
|
16
|
+
}
|
|
17
|
+
} catch (e) {}
|
|
18
|
+
});
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{ "name": "bdb-unrealengine5-mcp", "version": "1.0.0", "main": "index.js" }
|
|
File without changes
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import sys, json
|
|
2
|
+
def main():
|
|
3
|
+
while True:
|
|
4
|
+
line = sys.stdin.readline()
|
|
5
|
+
if not line: break
|
|
6
|
+
line = line.strip()
|
|
7
|
+
if not line: continue
|
|
8
|
+
try:
|
|
9
|
+
req = json.loads(line)
|
|
10
|
+
if req.get("method") == "initialize":
|
|
11
|
+
res = {"jsonrpc": "2.0", "id": req.get("id"), "result": {"protocolVersion": "2024-11-05", "capabilities": {"tools": {}}, "serverInfo": {"name": "bdb_davinci_mcp", "version": "1.0.0"}}}
|
|
12
|
+
sys.stdout.write(json.dumps(res) + "\n")
|
|
13
|
+
sys.stdout.flush()
|
|
14
|
+
elif req.get("method") == "tools/list":
|
|
15
|
+
res = {"jsonrpc": "2.0", "id": req.get("id"), "result": {"tools": []}}
|
|
16
|
+
sys.stdout.write(json.dumps(res) + "\n")
|
|
17
|
+
sys.stdout.flush()
|
|
18
|
+
except Exception:
|
|
19
|
+
pass
|
|
20
|
+
if __name__ == "__main__":
|
|
21
|
+
main()
|
|
File without changes
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import sys, json
|
|
2
|
+
def main():
|
|
3
|
+
while True:
|
|
4
|
+
line = sys.stdin.readline()
|
|
5
|
+
if not line: break
|
|
6
|
+
line = line.strip()
|
|
7
|
+
if not line: continue
|
|
8
|
+
try:
|
|
9
|
+
req = json.loads(line)
|
|
10
|
+
if req.get("method") == "initialize":
|
|
11
|
+
res = {"jsonrpc": "2.0", "id": req.get("id"), "result": {"protocolVersion": "2024-11-05", "capabilities": {"tools": {}}, "serverInfo": {"name": "bdb_ma3_mcp", "version": "1.0.0"}}}
|
|
12
|
+
sys.stdout.write(json.dumps(res) + "\n")
|
|
13
|
+
sys.stdout.flush()
|
|
14
|
+
elif req.get("method") == "tools/list":
|
|
15
|
+
res = {"jsonrpc": "2.0", "id": req.get("id"), "result": {"tools": []}}
|
|
16
|
+
sys.stdout.write(json.dumps(res) + "\n")
|
|
17
|
+
sys.stdout.flush()
|
|
18
|
+
except Exception:
|
|
19
|
+
pass
|
|
20
|
+
if __name__ == "__main__":
|
|
21
|
+
main()
|
|
File without changes
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import sys, json
|
|
2
|
+
def main():
|
|
3
|
+
while True:
|
|
4
|
+
line = sys.stdin.readline()
|
|
5
|
+
if not line: break
|
|
6
|
+
line = line.strip()
|
|
7
|
+
if not line: continue
|
|
8
|
+
try:
|
|
9
|
+
req = json.loads(line)
|
|
10
|
+
if req.get("method") == "initialize":
|
|
11
|
+
res = {"jsonrpc": "2.0", "id": req.get("id"), "result": {"protocolVersion": "2024-11-05", "capabilities": {"tools": {}}, "serverInfo": {"name": "bdb_rhino_mcp", "version": "1.0.0"}}}
|
|
12
|
+
sys.stdout.write(json.dumps(res) + "\n")
|
|
13
|
+
sys.stdout.flush()
|
|
14
|
+
elif req.get("method") == "tools/list":
|
|
15
|
+
res = {"jsonrpc": "2.0", "id": req.get("id"), "result": {"tools": []}}
|
|
16
|
+
sys.stdout.write(json.dumps(res) + "\n")
|
|
17
|
+
sys.stdout.flush()
|
|
18
|
+
except Exception:
|
|
19
|
+
pass
|
|
20
|
+
if __name__ == "__main__":
|
|
21
|
+
main()
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
from mcp.server.fastmcp import FastMCP
|
|
2
|
+
|
|
3
|
+
mcp = FastMCP("BDB DaVinci MCP")
|
|
4
|
+
|
|
5
|
+
@mcp.tool()
|
|
6
|
+
def davinci_ping() -> str:
|
|
7
|
+
"""Check if DaVinci Resolve is running."""
|
|
8
|
+
return "DaVinci Resolve MCP is active. Connects via PyResolve/DaVinci Scripting API."
|
|
9
|
+
|
|
10
|
+
if __name__ == "__main__":
|
|
11
|
+
mcp.run()
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
from mcp.server.fastmcp import FastMCP
|
|
2
|
+
|
|
3
|
+
mcp = FastMCP("BDB grandMA3 MCP")
|
|
4
|
+
|
|
5
|
+
@mcp.tool()
|
|
6
|
+
def grandma3_ping() -> str:
|
|
7
|
+
"""Check if grandMA3 is running."""
|
|
8
|
+
return "grandMA3 MCP is active. Use Telnet or Lua OSC to execute commands."
|
|
9
|
+
|
|
10
|
+
if __name__ == "__main__":
|
|
11
|
+
mcp.run()
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
from mcp.server.fastmcp import FastMCP
|
|
2
|
+
|
|
3
|
+
mcp = FastMCP("BDB Resolume MCP")
|
|
4
|
+
|
|
5
|
+
@mcp.tool()
|
|
6
|
+
def resolume_ping() -> str:
|
|
7
|
+
"""Check if Resolume is running."""
|
|
8
|
+
return "Resolume MCP is active. Controls Resolume via Arena OSC or REST API."
|
|
9
|
+
|
|
10
|
+
if __name__ == "__main__":
|
|
11
|
+
mcp.run()
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
from mcp.server.fastmcp import FastMCP
|
|
2
|
+
|
|
3
|
+
mcp = FastMCP("BDB Rhino MCP")
|
|
4
|
+
|
|
5
|
+
@mcp.tool()
|
|
6
|
+
def rhino_ping() -> str:
|
|
7
|
+
"""Check if Rhino is running."""
|
|
8
|
+
return "Rhino MCP is active. Custom commands can be implemented here via Rhino.Inside or Rhino Compute."
|
|
9
|
+
|
|
10
|
+
if __name__ == "__main__":
|
|
11
|
+
mcp.run()
|
package/mcps/scaffold.sh
ADDED
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
#!/bin/bash
|
|
2
|
+
set -e
|
|
3
|
+
|
|
4
|
+
# Node: Unreal
|
|
5
|
+
cat << 'NODE_EOF' > /Users/timrennings/bdb-dev-optimized-antigravity-skills/mcps/bdb-unrealengine5-mcp/index.js
|
|
6
|
+
#!/usr/bin/env node
|
|
7
|
+
const readline = require('readline');
|
|
8
|
+
const rl = readline.createInterface({
|
|
9
|
+
input: process.stdin,
|
|
10
|
+
output: process.stdout,
|
|
11
|
+
terminal: false
|
|
12
|
+
});
|
|
13
|
+
rl.on('line', (line) => {
|
|
14
|
+
if (!line.trim()) return;
|
|
15
|
+
try {
|
|
16
|
+
const req = JSON.parse(line);
|
|
17
|
+
if (req.method === 'initialize') {
|
|
18
|
+
console.log(JSON.stringify({ jsonrpc: '2.0', id: req.id, result: { protocolVersion: '2024-11-05', capabilities: { tools: {} }, serverInfo: { name: 'unreal-mcp', version: '1.0.0' } } }));
|
|
19
|
+
} else if (req.method === 'tools/list') {
|
|
20
|
+
console.log(JSON.stringify({ jsonrpc: '2.0', id: req.id, result: { tools: [] } }));
|
|
21
|
+
}
|
|
22
|
+
} catch (e) {}
|
|
23
|
+
});
|
|
24
|
+
NODE_EOF
|
|
25
|
+
|
|
26
|
+
cat << 'NODE_EOF' > /Users/timrennings/bdb-dev-optimized-antigravity-skills/mcps/bdb-unrealengine5-mcp/package.json
|
|
27
|
+
{ "name": "bdb-unrealengine5-mcp", "version": "1.0.0", "main": "index.js" }
|
|
28
|
+
NODE_EOF
|
|
29
|
+
|
|
30
|
+
# Node: Resolume
|
|
31
|
+
cp /Users/timrennings/bdb-dev-optimized-antigravity-skills/mcps/bdb-unrealengine5-mcp/index.js /Users/timrennings/bdb-dev-optimized-antigravity-skills/mcps/bdb-resolume-mcp/index.js
|
|
32
|
+
cat << 'NODE_EOF' > /Users/timrennings/bdb-dev-optimized-antigravity-skills/mcps/bdb-resolume-mcp/package.json
|
|
33
|
+
{ "name": "bdb-resolume-mcp", "version": "1.0.0", "main": "index.js" }
|
|
34
|
+
NODE_EOF
|
|
35
|
+
|
|
36
|
+
# Python function
|
|
37
|
+
gen_py() {
|
|
38
|
+
local name=$1
|
|
39
|
+
touch "/Users/timrennings/bdb-dev-optimized-antigravity-skills/mcps/${name}/${name}/__init__.py"
|
|
40
|
+
cat << PY_EOF > "/Users/timrennings/bdb-dev-optimized-antigravity-skills/mcps/${name}/${name}/__main__.py"
|
|
41
|
+
import sys, json
|
|
42
|
+
def main():
|
|
43
|
+
while True:
|
|
44
|
+
line = sys.stdin.readline()
|
|
45
|
+
if not line: break
|
|
46
|
+
line = line.strip()
|
|
47
|
+
if not line: continue
|
|
48
|
+
try:
|
|
49
|
+
req = json.loads(line)
|
|
50
|
+
if req.get("method") == "initialize":
|
|
51
|
+
res = {"jsonrpc": "2.0", "id": req.get("id"), "result": {"protocolVersion": "2024-11-05", "capabilities": {"tools": {}}, "serverInfo": {"name": "${name}", "version": "1.0.0"}}}
|
|
52
|
+
sys.stdout.write(json.dumps(res) + "\n")
|
|
53
|
+
sys.stdout.flush()
|
|
54
|
+
elif req.get("method") == "tools/list":
|
|
55
|
+
res = {"jsonrpc": "2.0", "id": req.get("id"), "result": {"tools": []}}
|
|
56
|
+
sys.stdout.write(json.dumps(res) + "\n")
|
|
57
|
+
sys.stdout.flush()
|
|
58
|
+
except Exception:
|
|
59
|
+
pass
|
|
60
|
+
if __name__ == "__main__":
|
|
61
|
+
main()
|
|
62
|
+
PY_EOF
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
gen_py "bdb_rhino_mcp"
|
|
66
|
+
gen_py "bdb_davinci_mcp"
|
|
67
|
+
gen_py "bdb_ma3_mcp"
|
|
68
|
+
|
|
69
|
+
chmod +x /Users/timrennings/bdb-dev-optimized-antigravity-skills/mcps/bdb-unrealengine5-mcp/index.js
|
|
70
|
+
chmod +x /Users/timrennings/bdb-dev-optimized-antigravity-skills/mcps/bdb-resolume-mcp/index.js
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
from mcp.server.fastmcp import FastMCP
|
|
2
|
+
|
|
3
|
+
mcp = FastMCP("BDB Unreal Engine MCP")
|
|
4
|
+
|
|
5
|
+
@mcp.tool()
|
|
6
|
+
def unreal_ping() -> str:
|
|
7
|
+
"""Check if Unreal Engine is running."""
|
|
8
|
+
return "Unreal Engine 5 MCP is active. Connects via Web Remote Control / gimmeDG API."
|
|
9
|
+
|
|
10
|
+
if __name__ == "__main__":
|
|
11
|
+
mcp.run()
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@hybridlabor-api/bdb-antigravity-skills",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.8",
|
|
4
4
|
"description": "Optimized Antigravity skills and MCP pack for BDB DEV",
|
|
5
5
|
"main": "installer.js",
|
|
6
6
|
"bin": {
|
|
@@ -16,7 +16,8 @@
|
|
|
16
16
|
"GEMINI.md",
|
|
17
17
|
"skilloverview.html",
|
|
18
18
|
"assets/",
|
|
19
|
-
"skills/"
|
|
19
|
+
"skills/",
|
|
20
|
+
"mcps/"
|
|
20
21
|
],
|
|
21
22
|
"author": "BDB DEV",
|
|
22
23
|
"license": "ISC"
|