@hybridlabor-api/bdb-antigravity-skills 1.0.1 → 1.0.3

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.
@@ -0,0 +1,106 @@
1
+ """One-paste TouchDesigner bridge bootstrap (no clone, no Preferences).
2
+
3
+ Paste this single line into the Textport (Dialogs -> Textport and DATs) and the
4
+ bridge installs itself and starts:
5
+
6
+ import urllib.request; exec(urllib.request.urlopen("https://github.com/Pantani/tdmcp/raw/v0.11.0/td/bootstrap.py").read().decode())
7
+
8
+ That release-pinned snippet downloads just the bridge modules to
9
+ ~/tdmcp-bridge/modules, puts them on sys.path for this session, and runs
10
+ install.run() -> a tdmcp_bridge on port 9980.
11
+
12
+ Requires the GitHub repo (or release zip) to be reachable. If your repo is
13
+ private, point REPO_ZIP at a public release asset, or use `install-bridge`
14
+ (`node dist/index.js install-bridge`) from a local checkout instead.
15
+ """
16
+
17
+ import io
18
+ import os
19
+ import stat
20
+ import sys
21
+ import zipfile
22
+ import urllib.request
23
+
24
+ REPO_ZIP = "https://github.com/Pantani/tdmcp/archive/refs/tags/v0.11.0.zip"
25
+ DEST = os.path.expanduser("~/tdmcp-bridge")
26
+ _MARKER = "/td/modules/"
27
+ _SKIP_RUN_ENV = "TDMCP_BOOTSTRAP_SKIP_RUN"
28
+
29
+
30
+ def _is_symlink(info):
31
+ return stat.S_ISLNK((info.external_attr >> 16) & 0o170000)
32
+
33
+
34
+ def _safe_module_path(name, modules_dir):
35
+ idx = name.find(_MARKER)
36
+ if idx == -1:
37
+ return None
38
+
39
+ rel = name[idx + len(_MARKER):].replace("\\", "/")
40
+ if not rel or rel.endswith("/"):
41
+ return None
42
+
43
+ parts = rel.split("/")
44
+ if (
45
+ rel.startswith("/")
46
+ or rel.startswith("\\")
47
+ or (len(parts[0]) >= 2 and parts[0][1] == ":")
48
+ or any(part in ("", ".", "..") for part in parts)
49
+ ):
50
+ raise RuntimeError("[tdmcp] Refusing unsafe archive entry: %s" % name)
51
+
52
+ root = os.path.realpath(modules_dir)
53
+ target = os.path.realpath(os.path.join(modules_dir, *parts))
54
+ if target != root and not target.startswith(root + os.sep):
55
+ raise RuntimeError("[tdmcp] Refusing archive entry outside modules: %s" % name)
56
+
57
+ return target
58
+
59
+
60
+ def fetch_modules(repo_zip=REPO_ZIP, dest=DEST):
61
+ """Download the repo zip and extract only its td/modules tree into dest/modules."""
62
+ modules_dir = os.path.join(dest, "modules")
63
+ try:
64
+ data = urllib.request.urlopen(repo_zip, timeout=30).read()
65
+ except Exception as exc: # noqa: BLE001 - surface a friendly hint in the Textport
66
+ raise RuntimeError(
67
+ "[tdmcp] Could not download the bridge from %r (%s). If the repo is "
68
+ "private, use a public release asset or the local 'install-bridge' "
69
+ "command instead." % (repo_zip, exc)
70
+ )
71
+
72
+ zf = zipfile.ZipFile(io.BytesIO(data))
73
+ os.makedirs(modules_dir, exist_ok=True)
74
+ extracted = 0
75
+ for info in zf.infolist():
76
+ name = info.filename
77
+ if name.endswith("/"):
78
+ continue
79
+ target = _safe_module_path(name, modules_dir)
80
+ if target is None:
81
+ continue
82
+ if _is_symlink(info):
83
+ raise RuntimeError("[tdmcp] Refusing symlink archive entry: %s" % name)
84
+ os.makedirs(os.path.dirname(target), exist_ok=True)
85
+ with zf.open(name) as src, open(target, "wb") as out:
86
+ out.write(src.read())
87
+ extracted += 1
88
+
89
+ if extracted == 0:
90
+ raise RuntimeError("[tdmcp] Downloaded archive had no td/modules — wrong REPO_ZIP?")
91
+ print("[tdmcp] bridge modules -> %s (%d files)" % (modules_dir, extracted))
92
+ return modules_dir
93
+
94
+
95
+ def run(repo_zip=REPO_ZIP, dest=DEST, port=9980):
96
+ modules_dir = fetch_modules(repo_zip, dest)
97
+ if modules_dir not in sys.path:
98
+ sys.path.insert(0, modules_dir)
99
+ from mcp import install
100
+
101
+ return install.run(port=port, modules_dir=modules_dir)
102
+
103
+
104
+ # Running via exec(urlopen(...).read()) or as a script kicks off the install.
105
+ if os.environ.get(_SKIP_RUN_ENV) != "1":
106
+ run()
package/mcp_config.json CHANGED
@@ -27,6 +27,14 @@
27
27
  "bdb_resolume_mcp": {
28
28
  "command": "npx",
29
29
  "args": ["-y", "bdb-resolume-mcp"]
30
+ },
31
+ "bdb_td_minddesigner": {
32
+ "command": "npx",
33
+ "args": ["-y", "minddesigner-tdmcp"]
34
+ },
35
+ "bdb_td_backup": {
36
+ "command": "npx",
37
+ "args": ["-y", "touchdesigner-mcp"]
30
38
  }
31
39
  }
32
40
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@hybridlabor-api/bdb-antigravity-skills",
3
- "version": "1.0.1",
3
+ "version": "1.0.3",
4
4
  "description": "Optimized Antigravity skills and MCP pack for BDB DEV",
5
5
  "main": "installer.sh",
6
6
  "bin": {
@@ -14,6 +14,7 @@
14
14
  "mcp_config.json",
15
15
  "GEMINI.md",
16
16
  "skilloverview.html",
17
+ "assets/",
17
18
  "skills/"
18
19
  ],
19
20
  "author": "BDB DEV",
@@ -535,11 +535,11 @@
535
535
  <header>
536
536
  <div class="logo-area">
537
537
  <h1>BDB DEV / ANTIGRAVITY</h1>
538
- <span>v1.0.0</span>
538
+ <span>v1.0.2</span>
539
539
  </div>
540
540
  <div class="stats-strip">
541
541
  <div class="stat-card">
542
- <div class="stat-val" id="stat-count">140</div>
542
+ <div class="stat-val" id="stat-count">142</div>
543
543
  <div class="stat-label">Active Skills</div>
544
544
  </div>
545
545
  <div class="stat-card">
@@ -547,7 +547,7 @@
547
547
  <div class="stat-label">Custom Orchestrators</div>
548
548
  </div>
549
549
  <div class="stat-card">
550
- <div class="stat-val">7</div>
550
+ <div class="stat-val">9</div>
551
551
  <div class="stat-label">Active MCPs</div>
552
552
  </div>
553
553
  </div>
@@ -630,8 +630,8 @@
630
630
  The master skill to manage and utilize whitelabeled Model Context Protocol servers. Connects AI directly to hardware, stage, and design software.
631
631
  </p>
632
632
  <ul>
633
- <li>grandMA3 Console (Python/Lua bridge API)</li>
634
- <li>Resolume Arena 7.26 (Native .mcpb REST integration)</li>
633
+ <li>grandMA3 Console & Resolume (Stage & Visual control)</li>
634
+ <li>TouchDesigner (MindDesigner network builder & parameter backup)</li>
635
635
  <li>Unreal Engine 5.8 (Native Editor plugin)</li>
636
636
  <li>Rhino 3D, DaVinci Resolve, GitHub, Chrome DevTools</li>
637
637
  </ul>
@@ -644,9 +644,9 @@
644
644
  <h2 style="margin-bottom: 20px;">Interactive Skill Explorer</h2>
645
645
  <div class="explorer-section">
646
646
  <div class="sidebar">
647
- <button class="category-btn active" onclick="filterCategory('all')">All Skills (140)</button>
647
+ <button class="category-btn active" onclick="filterCategory('all')">All Skills (142)</button>
648
648
  <button class="category-btn" onclick="filterCategory('custom')">BDB Custom (2)</button>
649
- <button class="category-btn" onclick="filterCategory('mcp')">Firecrawl & MCPs (14)</button>
649
+ <button class="category-btn" onclick="filterCategory('mcp')">Firecrawl & MCPs (16)</button>
650
650
  <button class="category-btn" onclick="filterCategory('frontend')">Frontend & UI/UX (11)</button>
651
651
  <button class="category-btn" onclick="filterCategory('backend')">Backend & DB (14)</button>
652
652
  <button class="category-btn" onclick="filterCategory('devops')">DevOps & Git (9)</button>
@@ -679,7 +679,9 @@
679
679
  // Inline skills dataset representing the 140 curated skills
680
680
  const skillsData = [
681
681
  { name: "bdbrainstorm", desc: "Forces a comprehensive multi-agent brainstorming workflow combining debate, interactive grilling, subagent tasking, and high-end visual design.", cat: "custom", source: "Global Config" },
682
- { name: "MCP_Manage", desc: "Command center skill that manages and directs whitelabeled MCP servers like grandMA3 lighting, Resolume, Unreal Engine, Rhino, DaVinci, and Puppeteer.", cat: "custom", source: "Global Config" },
682
+ { name: "MCP_Manage", desc: "Command center skill that manages and directs whitelabeled MCP servers like grandMA3, Resolume, Unreal Engine, Rhino, DaVinci, TouchDesigner, and Puppeteer.", cat: "custom", source: "Global Config" },
683
+ { name: "bdb_td_minddesigner", desc: "TouchDesigner MindDesigner MCP - Builds real COMP, TOP, CHOP node networks from natural language prompts.", cat: "mcp", source: "Global Config" },
684
+ { name: "bdb_td_backup", desc: "TouchDesigner Control MCP - Sets node parameters and queries TouchDesigner project states.", cat: "mcp", source: "Global Config" },
683
685
  { name: "firecrawl", desc: "Searches, scrapes, and interacts with the web via the Firecrawl CLI.", cat: "mcp", source: "Workspace Agents" },
684
686
  { name: "firecrawl-agent", desc: "AI-powered autonomous data extraction that navigates complex sites and returns structured JSON.", cat: "mcp", source: "Workspace Agents" },
685
687
  { name: "firecrawl-build", desc: "Integrate Firecrawl into product code for web scraping, crawling, searching, and interaction.", cat: "mcp", source: "Workspace Agents" },
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: MCP_Manage
3
- description: Manages the BDB specialized MCP servers including Unreal Engine, Rhino 7/8, DaVinci Resolve, grandMA3, Resolume, GitHub, and Chrome DevTools.
3
+ description: Manages the BDB specialized MCP servers including Unreal Engine, Rhino 7/8, DaVinci Resolve, grandMA3, Resolume, GitHub, Chrome DevTools, and TouchDesigner.
4
4
  ---
5
5
 
6
6
  # MCP_Manage: Specialized Tool Orchestration
@@ -33,7 +33,16 @@ You are the authoritative skill for managing and utilizing the specialized Model
33
33
  - **Capabilities:** Trigger clips, adjust composition parameters, control opacity and layers.
34
34
  - **Implementation Details:** Takes advantage of the native `.mcpb` integration introduced in Resolume 7.26. Heavily utilizes the powerful implementations from `tortillaguy-resolume-mcp`, repackaged for the BDB pipeline.
35
35
 
36
+ 8. **bdb_td_minddesigner** (TouchDesigner MindDesigner MCP - Main)
37
+ - **Capabilities:** Builds real TouchDesigner networks (COMPs, TOPs, CHOPs, SOPs, DATs) from plain language prompts.
38
+ - **Implementation Details:** Custom whitelabel implementation based on the open-source `minddesigner-tdmcp` server. It allows direct, real-time node network generation inside TouchDesigner from natural language descriptions.
39
+
40
+ 9. **bdb_td_backup** (TouchDesigner Control - Backup)
41
+ - **Capabilities:** Adjust parameters, query operator values, read/write node connections.
42
+ - **Implementation Details:** Whitelabeled version of the `8beeeaaat/touchdesigner-mcp` project, serving as a robust fallback/direct controller for existing TD files.
43
+
36
44
  ## How to use them
37
45
  - When the user asks to manipulate lighting, target `bdb_grandma3_mcp` or `bdb_resolume_mcp`.
38
46
  - When working on CAD or game environments, invoke `bdb_rhino_mcp` or `bdb_unreal_mcp`.
39
- - Always check the available tools via the MCP tool listing before executing commands. If a server is down, instruct the user to verify the `mcp_config.json` configuration and ensure the respective host applications are running with API/OSC/Lua plugin access enabled.
47
+ - For real-time visual scripting and node networks, call `bdb_td_minddesigner` as your primary TouchDesigner controller, falling back to `bdb_td_backup` for direct parameter modifications.
48
+ - Always check the available tools via the MCP tool listing before executing commands. If a server is down, instruct the user to verify the `mcp_config.json` configuration and ensure the respective host applications are running with API/OSC/Lua/network plugins enabled.