docs(blender): desktop Blender + MCP registration per working session, not per task (Prime 2026-09-28)

This commit is contained in:
vh
2026-09-28 16:36:44 -07:00
parent 85f8a3a072
commit ea5d8dfd4e
4 changed files with 24 additions and 10 deletions
+1 -1
View File
@@ -78,7 +78,7 @@ live contract for its API. Fetch it rather than trusting a transcription.
- **Blender** — Blender 5.2 LTS on fv-ml1 GPU 3 (borrowed, on demand). `scripts/blender-run` for
headless one-shot renders and conversions; `scripts/blender-mcp` for agent-driven scenes
(register per task).
(up and registered per working session, down at its end).
*When:* 3D rendering, STL → image, scene building.
*Detail:* `/home/lkraven/development/eshpfi-management/docs/fleettools/blender.md`
+7 -4
View File
@@ -11,7 +11,7 @@ runs only while in use, and this access ends if a big seat moves onto the card.
| You are… | Use | Shape |
|---|---|---|
| a script or CLI caller (renders, conversions) | `scripts/blender-run` | one-shot `docker run --rm`: no desktop, gone when Blender exits |
| an agent building scenes interactively | `scripts/blender-mcp` (MCP, per task) | a GUI Blender plus the mcp-for-blender add-on; `up` / `status` / `down` |
| an agent building scenes interactively | `scripts/blender-mcp` (MCP, per working session) | a GUI Blender plus the mcp-for-blender add-on; `up` / `status` / `down` |
Both scripts are in `/home/lkraven/development/eshpfi-management/scripts/` and run from nh3-dev,
reaching fv-ml1 as `infra-ops@10.251.50.54` over ssh. **No HTTP API** and no openapi.json.
@@ -69,8 +69,11 @@ scripts/blender-run -- --python-expr 'import bpy; print(bpy.app.version_string)'
## blender-mcp (agents)
Register it **per task**, never user- or project-wide (Prime, 2026-09-27):
Bring it up **once per working session**, never always-on, and never register it user- or
project-wide (Prime, 2026-09-28, superseding the 2026-09-27 per-task rule). At session start:
`scripts/blender-mcp up`, wait for `status` to say answering, then
`claude mcp add blender -- /home/lkraven/development/eshpfi-management/scripts/blender-mcp`.
Then run `scripts/blender-mcp up`, wait for `status` to say answering, work, and run `down`
when finished. Safe mode is on (no os/open/network in agent code), so the startup hook has
At session end: `claude mcp remove blender` (the default local scope persists for the
directory) and `scripts/blender-mcp down`. There is one GUI and one scene, so MCP work
serializes fleet-wide; parallel work goes through blender-run. Safe mode is on (no os/open/network in agent code), so the startup hook has
already pointed Cycles at OptiX. Save to `/work/…`. Details and traps are in the stack README.
+2 -2
View File
@@ -1,6 +1,6 @@
# Persistent memory — eshpfi-management
_Last updated: 2026-09-28 ~0850 PT (Zigbee2MQTT live on esh-docker-vm + HA-MQTT macvlan route fixed; Blender on fv-ml1 GPU 3 (MCP per task, blender-run batch for draupnir); semif-serve 0.1.4; Worldtree reward config on demo+personal and instance-configs pushed; restic repository-file move verified all-green 2026-09-28.)_
_Last updated: 2026-09-28 ~0850 PT (Zigbee2MQTT live on esh-docker-vm + HA-MQTT macvlan route fixed; Blender on fv-ml1 GPU 3 (MCP per working session, blender-run batch for draupnir); semif-serve 0.1.4; Worldtree reward config on demo+personal and instance-configs pushed; restic repository-file move verified all-green 2026-09-28.)_
> **Always check for `/tmp/infra-ops-handoff.md`** — if it exists and its
> `Written:` stamp is under **8 hours** old, read it (it carries the in-flight
@@ -195,7 +195,7 @@ _As of 2026-09-27 ~0900 PT._
server runs INSIDE the container, and agents reach it as ssh+docker-exec stdio via
`scripts/blender-mcp`. No port is published, and screenshots work because server and Blender
share a filesystem. Telemetry is off and safe mode is on. Verified end to end (render, screenshot,
safe-mode refusal). **Batch path: `scripts/blender-run`** (one-shot `docker run --rm`, `--job` staging; first user is draupnir). **Access: the shared fleet `infra-ops` login, with no render-only key (Prime, 2026-09-28).** **Registration: PER TASK (Prime, 2026-09-27)**: a session that needs Blender runs `claude mcp add blender -- …/scripts/blender-mcp`. It goes in NO user- or project-wide config.
safe-mode refusal). **Batch path: `scripts/blender-run`** (one-shot `docker run --rm`, `--job` staging; first user is draupnir). **Access: the shared fleet `infra-ops` login, with no render-only key (Prime, 2026-09-28).** **Registration + up/down: PER WORKING SESSION (Prime, 2026-09-28, relayed by draupnir; superseded per-task of 09-27)**: `blender-mcp up` + `claude mcp add` at session start, `claude mcp remove` + `down` at its end. Never always-on, never user- or project-wide config.
→ `stacks/blender/README.md`
- **Extensions (2026-09-28, draupnir; Prime ruled Blender a MANDATORY pipeline stage):** 8 pinned
add-ons (`stacks/blender/extensions.lock`) built by `scripts/blender-extensions sync` into
+14 -3
View File
@@ -79,13 +79,24 @@ not a sandbox.
### For an agent
**Per working SESSION** (Prime, 2026-09-28, relayed by draupnir; supersedes the 2026-09-27
per-task rule): a session that does design work brings the desktop up once at its start and
takes it down at its end. It is still not always-on, and the registration is still never user-
or project-wide.
```bash
scripts/blender-mcp up # GPU 3 is borrowed: start only when needed
# session start
scripts/blender-mcp up # GPU 3 is borrowed: only for a session that needs it
scripts/blender-mcp status # wait for "mcp add-on: answering" (~10-40 s)
claude mcp add blender -- /home/lkraven/development/eshpfi-management/scripts/blender-mcp # PER TASK (Prime 2026-09-27): never user/project-wide
scripts/blender-mcp down # when finished: the card goes back to 0
claude mcp add blender -- /home/lkraven/development/eshpfi-management/scripts/blender-mcp
# session end
claude mcp remove blender # `mcp add` defaults to local scope, which PERSISTS for this directory
scripts/blender-mcp down # the card goes back to 0
```
- **One GUI, one scene: MCP work serializes fleet-wide.** Two sessions driving it at once
trample each other's scene. Parallel parts belong on `blender-run` (`--cpu` if nothing renders).
- **Always pass `user_prompt`.** The tools require it; it is a short statement of the user's
request.
- **Render on the GPU:** set `scene.cycles.device = 'GPU'` on any scene you create. Safe mode