Resources
Six MCP resources. The two blender://bus/* resources are local to the server (no Blender peer needed). The four others (blender://scene/*, blender://console/{level}, blender://console/{level}/{page}) dispatch through a Blender peer using the same JobWaiter round-trip as the dispatch tools — they require an active persistent Blender on the user’s bus.
All resources scope returns to the caller’s user bus and require a valid JWT. The blender:// URI scheme is declared explicitly on each @mcp_resource(uri=...) and is not modified by MCPMixin’s prefix="blender" (which only affects tool and prompt names).
blender://bus/clients
Section titled “blender://bus/clients”Snapshot of the caller’s bus: persistent + ephemeral clients with their UUIDs, types, capabilities, and timestamps.
Returns:
{ "user_id": "demo", "persistent": [ { "uuid": "blender-a1b2c3d4e5f6", "client_type": "blender", "is_persistent": true, "capabilities": ["python_execution", "modeling", "rendering"], "group_id": null, "connected_at": 1716000000.0, "last_seen": 1716001000.0 } ], "ephemeral": [ { "uuid": "llm-20260525-abc123", "client_type": "llm", "is_persistent": false, "capabilities": ["text_generation", "reasoning"], "group_id": null, "connected_at": 1716000500.0, "last_seen": 1716001200.0 } ]}Read-only equivalent of blender_list_available_clients — useful when a client wants to observe bus state through a resource subscription rather than a polling tool call.
blender://bus/stats
Section titled “blender://bus/stats”Counts for the caller’s bus.
Returns:
{ "user_id": "demo", "persistent_count": 1, "ephemeral_count": 2, "pending_jobs_for_user": 3}pending_jobs_for_user is the number of dispatches awaiting a blender_job_update reply on behalf of this user.
blender://scene/info
Section titled “blender://scene/info”Live JSON snapshot of the active Blender scene. Internally dispatches get_scene_info through the bus.
Returns: same payload as blender_get_scene_info — scene name, object count, first ~10 objects, materials count, wrapped in the standard dispatch envelope:
{ "status": "completed", "command": "get_scene_info", "target_uuid": "blender-...", "job_id": "j-...", "result": "<JSON-encoded scene snapshot>", "error": ""}If no Blender peer is connected, status is no_client.
blender://scene/objects
Section titled “blender://scene/objects”First page of bpy.data.objects. Dispatches browse_data with collection="objects", page=1, page_size=50.
Returns: the standard dispatch envelope with result containing the paginated object list. For other pages or other collections (materials, meshes, etc.) call blender_browse_data directly.
blender://console/{level}
Section titled “blender://console/{level}”Templated resource. {level} is one of all, info, warning, error, output. Returns the first page of console output filtered by level.
Dispatches get_console_output with page=1, page_size=50. For other pages, use the explicit-page variant below or call blender_get_console_output directly.
blender://console/{level}/{page}
Section titled “blender://console/{level}/{page}”Templated resource. {level} as above; {page} is a 1-indexed integer. Returns page {page} of console output at the requested level.
Authentication
Section titled “Authentication”All resources call the same _resolve_user_id(ctx) helper as the tools. An unauthenticated read returns:
{"status": "error", "error": "unauthenticated"}Related
Section titled “Related”- Bus tools — the tool surface that includes equivalents for the bus resources
- Dispatch tools — the tool equivalents for the scene + console resources
- ClientInfo — the dataclass each entry in
persistent/ephemeralis serialized from - OAuth and per-user buses — why resource scope is per-user