Install
openclaw skills install dcc-rest-gatewayControl live DCC hosts (Maya, Blender, Houdini, Photoshop, 3ds Max, and others) through the DCC-MCP gateway REST API only — no MCP client required. For any agent host (OpenClaw, ClawHub, Cursor, Claude, custom HTTP clients): inventory online instances, obtain user consent before setup when none are registered, then search, describe, and call tools via POST /v1/*.
openclaw skills install dcc-rest-gatewayThis skill teaches any AI agent to drive DCC software through the DCC-MCP
gateway HTTP API only. You do not need MCP tools/list, call_tool,
resources/read, or Streamable HTTP — only curl (or any HTTP client) against
the elected gateway (default port 9765).
Install via OpenClaw/ClawHub, or point your agent at this SKILL.md after cloning
dcc-mcp-core/skills/dcc-rest-gateway/.
Full contract: docs/guide/rest-api-surface.md.
| Situation | You MUST |
|---|---|
| Starting any DCC task | Run instance inventory (below) before search / call |
GET /v1/instances → total == 0 | STOP — do not call POST /v1/search or POST /v1/call |
Gateway unreachable (healthz fails) | STOP — explain; ask user permission before troubleshooting |
| User has not agreed to setup | FORBID pip install, editing env files, launching GUI apps, writing configs |
| User approved setup | Follow references/ZERO_INSTANCES.md; poll instances after each step |
| After DCC crash/restart | Re-run inventory — instance_id and tool_slug values change |
| Variable | Default | Meaning |
|---|---|---|
DCC_MCP_GATEWAY_URL | http://127.0.0.1:9765 | Gateway root (no trailing slash required) |
Set in the shell or OpenClaw env before running commands:
export DCC_MCP_GATEWAY_URL="${DCC_MCP_GATEWAY_URL:-http://127.0.0.1:9765}"
GATEWAY="$DCC_MCP_GATEWAY_URL"
Quick probe (cross-platform helper — stdlib only, no curl required):
# Linux / macOS
python3 scripts/check_gateway.py
# Windows (cmd or PowerShell)
py -3 scripts\check_gateway.py
# PowerShell wrapper:
pwsh scripts/check_gateway.ps1
# Optional: bash scripts/check_gateway.sh
Flags: --gateway URL, --pretty for indented JSON.
Run every time you begin work or after the user starts/stops a DCC host:
GATEWAY="${DCC_MCP_GATEWAY_URL:-http://127.0.0.1:9765}"
curl -sf "$GATEWAY/v1/healthz" || echo "GATEWAY_UNREACHABLE"
curl -s "$GATEWAY/v1/readyz"
curl -s "$GATEWAY/v1/instances"
curl -s "$GATEWAY/v1/context" # optional summary
GET /v1/instancesResponse shape:
{
"total": 2,
"instances": [
{
"instance_id": "full-uuid",
"dcc_type": "maya",
"status": "available",
"stale": false,
"display_name": "...",
"scene": "...",
"port": 8765,
"mcp_url": "http://127.0.0.1:8765/mcp"
}
]
}
Report to the user:
total — how many registry rows exist (routable targets when not stale).dcc_type — e.g. maya: 1, blender: 1.instance_id, status, stale (ignore or warn on stale: true).GET /v1/context (optional): live_instance_count, loaded_skill_count, action_count.Save one target instance_id per DCC you will use — pass it to POST /v1/search as instance_id (full UUID or unique ≥4-char prefix).
total == 0search, describe, or call (they fail or return empty).references/ZERO_INSTANCES.md.GET /v1/instances until total >= 1.POST /v1/search)Only when total >= 1 and rows are not stale.
curl -s -X POST "$GATEWAY/v1/search" \
-H "Content-Type: application/json" \
-d '{
"query": "sphere",
"dcc_type": "maya",
"instance_id": "<from-inventory>",
"limit": 20
}'
Copy hits[].tool_slug verbatim — format: <dcc>.<id8>.<backend_tool> (e.g. maya.a1b2c3d4.maya_primitives__create_sphere). Never hand-build slugs.
POST /v1/describe)curl -s -X POST "$GATEWAY/v1/describe" \
-H "Content-Type: application/json" \
-d '{"tool_slug": "<from-search>", "include_schema": true}'
Read tool.inputSchema and safety annotations before calling.
POST /v1/call)curl -s -X POST "$GATEWAY/v1/call" \
-H "Content-Type: application/json" \
-d '{
"tool_slug": "<from-search>",
"arguments": { "radius": 2.0 }
}'
code, file_path, radius, …) belong inside arguments, not at the top level.POST /v1/call_batch with calls[] and optional stop_on_error.Path-style alternative when you already know dcc_type + instance_id:
POST /v1/dcc/{dcc_type}/instances/{instance_id}/call with body
{"backend_tool": "...", "arguments": {...}}.
See references/REST_CHEATSHEET.md for the full endpoint list.
POST /mcp, tools/call, resources/read)call_tool) unless your host maps them to REST internallyREST and MCP share the same backend; this skill is for agents that only have HTTP.