JANCTION Render
Server Details
Blender and GLB/FBX/USD/STL rendered on cloud GPUs for AI agents: product shots, turntables, MP4
- Status
- Healthy
- Uptime
- 90.5% over 25 days
- Last Tested
- Transport
- Streamable HTTP · MCP 2025-11-25
- URL
- Repository
- JasmyLab-JANCTION/janction-render
- GitHub Stars
- 0
- Server Listing
- JANCTION Render
TDQS
Scored across 13 tools
The render lifecycle is cleanly split (preview → estimate → final → status → download → cancel), but render_info, render_status, and billing form a trio of 'check something' tools whose boundaries lean on long descriptions rather than obvious names, and render_status/render_download overlap since download with wait_seconds also waits on the job. Asset search and scene inspection are clearly distinct from the rest.
Ten of thirteen tools follow a strict render_verb pattern (render_cancel, render_download, render_final, render_preview, render_share, render_unshare, etc.), which is highly predictable. The exceptions — asset_search, billing, scene_info — use an unrelated noun_first or bare-noun form, though each still reads clearly.
Thirteen tools sit comfortably in the well-scoped 3-15 range for a render service. Each tool maps to a real lifecycle step (discover asset, import, inspect, preview, estimate, final, status, download, share, cancel, quota), with no obvious filler.
The surface covers the full render pipeline end to end, including asset discovery, import, scene inspection, preview/final, cancellation, sharing, and billing — no dead ends for core workflows. Gaps are minor: there is no tool to modify or delete a stored scene, and job discovery is only implicit via render_status without a job_id.
Available Tools
13 toolsasset_searchSearch CC0 assetsARead-onlyIdempotentInspect
Find free CC0 3D models, PBR textures or HDRIs on Poly Haven by words ('wooden chair', 'forest hdri') to furnish a scene without uploading files; no GPU time. For product shots of something the user has no model for: asset_search(''), then render_preview(scene_script='import jr_assets; jr_assets.import_model("")', asset_urls=['polyhaven:'], preset='product') gives 4 studio shots on a plain backdrop (import_model removes Blender's untouched startup cube first). Each result has a spec 'polyhaven:' to pass in asset_urls, its size in metres and the entry file. In the scene script: import jr_assets, then jr_assets.import_model('', location=(x, y, z), scale=1.0) returns the objects, jr_assets.material('') builds a material and jr_assets.apply(obj, mat) assigns it, jr_assets.world_hdri('', strength=1.0) lights the world. 'polyhaven:@2k' fetches 2k textures (1k by default).
| Name | Required | Description | Default |
|---|---|---|---|
| kind | No | 'models' (default) | 'textures' | 'hdris'. | models |
| query | Yes | Words to search Poly Haven for (name, tags, category), e.g. 'wooden chair' or 'forest hdri'. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare it as a read-only, idempotent, open-world search, and the description adds substantial context beyond that: the result spec format 'polyhaven:<id>', that sizes are in metres, the entry file, 1k-default versus '@2k' texture variants, and that import_model strips Blender's startup cube. That is real behavioral knowledge an agent cannot get from the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The purpose is correctly front-loaded, but the rest is one dense run-on paragraph that mixes search semantics with a full render workflow and a Python API reference (material, apply, world_hdri) that belongs to the import tooling, not to search. Several clauses would be better placed in render_preview or the import tool's description.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Even though an output schema exists, the description still tells the agent what each result carries (spec id, size in metres, entry file), which is exactly what it needs to wire results into render_preview. Nothing required for a correct call is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, with both params (query, kind) fully documented including the enum-like kind values, so baseline is 3. The description's query examples restate the schema and the '@2k' suffix applies to the id used in asset_urls rather than to this tool's inputs, so it adds little parameter meaning of its own.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Opens with a specific verb and resource: find free CC0 3D models, PBR textures or HDRIs on Poly Haven, plus concrete query examples. It is unmistakably a search tool and cannot be confused with the render_* siblings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives an explicit scenario ('for product shots of something the user has no model for') and chains it into render_preview with concrete arguments, so the agent knows when to reach for it. It stops short of naming the counterpart path (e.g. use render_import_file if the user already has a file), so it lacks a true alternative branch.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
billingQuota and billingARead-onlyIdempotentInspect
Check what this key can still render for free and its credit (no GPU time): the free GPU time left and when it expires or resets (each new key gets 100 JPY of GPU time free with no card (14 days) and 400 JPY more once the user saves a card on a page that charges nothing (once per card); after that, previews are free up to 2 GPU-minutes a day and finals cost 0.1 JPY per GPU-second (prepaid)), the balance in yen, the price per GPU-second, any pending checkout link, and card_offer / autocharge_offer when they apply. Relay tell_user to the user in their language when it is present.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare a safe idempotent read (readOnlyHint, idempotentHint, destructiveHint=false), so the safety bar is met. The description adds genuine behavioral context beyond that: the full pricing/free-tier model, that some offers apply conditionally, and the 'Relay tell_user to the user in their language when it is present' directive — an operational trait no annotation conveys.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The core purpose is front-loaded, but the body is a single run-on sentence with stacked nested parentheses describing the pricing model in more detail than an invocation decision requires. The information is largely useful, yet the structure makes it hard to scan.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values needn't be re-specified, and the description stays adequate despite naming many of them anyway. Combined with the pricing model and the tell_user relay instruction, an agent has essentially everything it needs to call a zero-parameter query tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema takes zero parameters, so the baseline is 4. The description wisely spends no effort on parameter syntax and instead names the returned quantities, which is the relevant semantics for a no-arg query tool.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource: 'Check what this key can still render for free and its credit (no GPU time).' It enumerates the exact fields returned (free GPU time left, expiry, balance, price per GPU-second, pending checkout link, offers), which clearly separates it from sibling tools like render_estimate or render_info.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied — an agent infers this is the tool to call for account quota/credit status — but there is no explicit 'call this before rendering' guidance, no when-not-to-use, and no named alternative sibling. Nothing is misleading, but routing is left to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
render_cancelCancel renderADestructiveIdempotentInspect
Stop a queued or running render job of this key (a j_... job, or a b_... job split into parts, which stops every part). Effects: queued frames are dropped; frames already rendered are charged and stay downloadable until the job expires; the rest of the GPU time held for the job is returned to the key at once. It cannot be undone or resumed: to render again, call render_final again (a new job). A job that is already done, failed or canceled is returned unchanged, and a job whose frames are all rendered and is being assembled into the video cannot be stopped (nothing more is charged). Only the key that started the job can stop it; any other job_id returns not_found. Ask the user before cancelling a render they asked for.
| Name | Required | Description | Default |
|---|---|---|---|
| job_id | Yes | The job_id returned by render_preview or render_final (j_...; a long final split into parts is b_...). Only this key's jobs; in render_status, leave it empty to list them. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only declare destructive/idempotent/readOnly; the description goes far beyond them by spelling out billing consequences (rendered frames charged, unheld GPU time returned at once), irreversibility (cannot be undone or resumed), which jobs are no-ops, the assembly-stage exception, and the ownership rule (other keys get not_found). This is exactly the behavioral context an agent needs before a destructive call.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loads the action, then effects, then constraints, with no filler sentences. It is dense and long for a single-parameter tool, but every clause (billing, irreversibility, ownership, assembly exception) carries distinct information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema present, return values need no explanation, and annotations cover the safety profile. The description still covers the operational gaps that matter: billing impact, irreversibility, edge cases, and authorization scope.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3. The description adds real value on top: it explains the j_... and b_... job_id formats, that a b_ job stop applies to every part, and the not_found behavior for foreign keys, none of which the schema states.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource ('Stop a queued or running render job of this key') and further distinguishes the two job shapes it handles (j_... and split b_... jobs). An agent can separate this from render_final, render_status, and render_info without opening any schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicit when-to-use (queued or running job), explicit when-not (already done/failed/canceled, or being assembled into the video), and an explicit alternative path ('to render again, call render_final again'). It also adds a policy instruction to ask the user before cancelling a requested render.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
render_downloadDownload linksARead-onlyIdempotentInspect
Get the download links of a job (no key needed, valid about 24 hours; call again for fresh links while the files are kept, 24 h after last use or 7 days, normally, for paid keys) and show them to the user; in a terminal, fetch them with curl -o. A finished preview also comes back as an inline image. wait_seconds > 0 first waits for the job (the service waits at most 50 s per call; call again while it is still running). only picks the files: 'output' (default: the MP4 or the preview sheet, plus the first frames), 'mp4', 'sheet', 'frames' or 'all'.
| Name | Required | Description | Default |
|---|---|---|---|
| only | No | 'all' (every frame plus output.mp4 / sheet.png) | 'mp4' | 'frames' | 'sheet' | 'output' (the MP4 or the sheet only). | output |
| job_id | Yes | The job_id returned by render_preview or render_final (j_...; a long final split into parts is b_...). Only this key's jobs; in render_status, leave it empty to list them. | |
| wait_seconds | No | Wait for the job to finish before returning the links (0 = do not wait). The service waits at most 50 s per call; call again while the job is still running. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Adds substantial context beyond the annotations: links need no key and last ~24 h, files are retained 24 h after last use or normally 7 days for paid keys, the service waits at most 50 s per call, and a finished preview returns as an inline image. This is exactly the beyond-schema behavior an agent needs and is consistent with readOnly/idempotent hints.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loads the core purpose and packs the retention, waiting and file-selection detail into one dense paragraph. It is a run-on sentence, but nearly every clause earns its place and nothing is padded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description does the work of describing the return (links plus an inline preview image) and the terminal curl workflow, so an agent knows what to expect. Minor gaps remain around formatting of the returned links, but the tool is adequately specified.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is already 100%, so 'only', 'job_id' and 'wait_seconds' are fully documented structurally. The description restates the 'only' options and the 50 s wait cap, adding the retention/expiry nuance but little parameter syntax the schema lacks; baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource ('Get the download links of a job') and immediately scopes it (links, not job status or rendering). It is clearly distinguishable from siblings like render_status (which lists jobs) and render_preview/render_final (which create jobs).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives clear when-to-use context: call after a job exists, call again for fresh links once they expire, and set wait_seconds > 0 to block. It does not explicitly name an alternative tool for cases where the job is not yet done, but the wait/call-again guidance effectively routes the agent.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
render_estimateEstimate render timeARead-onlyIdempotentInspect
Estimate a render before starting it (no GPU time): GPU seconds, queue wait, the wall-clock time as text (estimate.human, e.g. 'about 3 minutes') and whether it fits the free GPU time left (the welcome credit, or 2 preview GPU-minutes a day after it) and the size limits. Call it before render_final when the time or quota is uncertain, the job is longer than about 24 frames or above 720p, or the user asks how long it takes; tell the user the result. With scene_id the estimate uses measured render times and returns calibration.final_path_measured. If false, treat it as preliminary: run a short contiguous final-path test and estimate again before the full animation. It also says when to split a job.
| Name | Required | Description | Default |
|---|---|---|---|
| kind | No | 'final' (frame_start..frame_end at width x height, samples) or 'preview' (frames like '1-24'). | final |
| width | No | Output width in pixels (previews are capped at 1280x720 keeping the aspect ratio; a final frame can have at most 1920x1080 pixels on free time, 3840x2160 on prepaid credit). | |
| frames | No | Preview frames: '' = frame 1; '12' = one frame; '1,8,16,24' or '1-24' = up to 4 frames tiled in one labeled image (to judge camera motion and animation; same GPU time as one 720p frame). | |
| height | No | Output height in pixels (previews are capped at 1280x720 keeping the aspect ratio; a final frame can have at most 1920x1080 pixels on free time, 3840x2160 on prepaid credit). | |
| preset | No | Purpose preset: 'product' (4 studio shots at 0/90/180/270 deg on a plain backdrop; the final gives 4 PNGs at 1440x1440), 'turntable' (one full turn as an MP4, studio light, plain backdrop), 'animation' (the scene's own camera, lights and frame range; the scene is read first when the range is unknown), or '' (none). It fills what you do not pass; environment, orbit_frames, width/height and the frames still win when given. | |
| cameras | No | Several camera object names (up to 8) rendered from the same frame in one job: the preview tiles them in one labeled sheet, the final returns one PNG/EXR per camera (camera_files maps names to files). For product shots from fixed angles. Not combinable with orbit, environment='compare' or camera. | |
| samples | No | Cycles samples per pixel (preview: up to 32, default 16; final: default 128). | |
| scene_id | No | scene_id returned by an earlier call (reuses the uploaded scene without sending it again). | |
| frame_end | No | Last frame to render (inclusive); equal to frame_start for a single image. With orbit=True and no frame_end, one full turn is rendered. | |
| frame_start | No | First frame to render (inclusive). |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint/idempotent/non-destructive, but the description adds non-obvious behavior: the call consumes no GPU time, it reports queue wait and free-credit limits, and it may return preliminary numbers requiring a short contiguous test render before a full animation. It also flags when a job should be split.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Purpose and the no-GPU-cost caveat are front-loaded, and every sentence carries decision-relevant content. However, the middle sentences are long and clause-stacked (quota/credit, calibration, test render, splitting all in one breath), which costs some scannability.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 10-parameter tool with an output schema and full annotation coverage, the description supplies everything an agent needs: what it does, when to call it, what it returns conceptually, how to interpret an uncalibrated result, and what to do next. No material gap remains.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3, but the description adds real meaning beyond the schema: passing scene_id switches the estimate to measured render times and produces calibration.final_path_measured, which the schema does not convey. No other parameters are elaborated, so it stays short of 5.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Estimate a render before starting it') and immediately qualifiers the scope with '(no GPU time)'. It explicitly positions itself against the sibling render_final ('Call it before render_final'), so an agent can distinguish the two without opening either schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives explicit trigger conditions ('when the time or quota is uncertain, the job is longer than about 24 frames or above 720p, or the user asks how long it takes') plus a follow-up instruction to relay the result. It also branches on the outcome via calibration.final_path_measured, telling the agent what to do when it is false.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
render_finalRender final frames or videoAInspect
Render the final frames or video of a Blender scene on cloud GPUs, after the user approved a preview: 'render the final', 'make the video', 'export the turntable MP4'. Call render_estimate first when the time or the free GPU time left (the welcome credit, or 2 preview GPU-minutes a day after it) is uncertain, the job is longer than about 24 frames or above 720p, or the user asks how long it takes, and tell the user. For animations, keep the approved engine/look, test 10 contiguous final-path frames, then estimate again. Long jobs are rendered in chunks and joined into one video. Returns job_id and estimate.human at once (short jobs return the links directly); then call render_download(job_id, wait_seconds=45). Use the same environment and blender as the approved preview. Render only what the user approved at the shown price (max_yen caps it). Limits: up to 3,000 frames per call (over 240 runs as parts under one job id); 1920x1080 on free time, 3840x2160 with prepaid credit; each new key gets 100 JPY of GPU time free with no card (14 days) and 400 JPY more once the user saves a card on a page that charges nothing (once per card); after that, previews are free up to 2 GPU-minutes a day and finals cost 0.1 JPY per GPU-second (prepaid); ask before a render the free time does not cover; files are deleted 24 h after last use (7 days once topped up). preset='product' | 'turntable' | 'animation' fills the settings for that purpose. Options per parameter: output (png, exr, mp4, webm, prores, gif, webp), orbit, cameras, transparent, engine, notify_url, asset_urls ('polyhaven:'). Pass scene_id from render_preview, or scene_script / scene_url for a new scene.
| Name | Required | Description | Default |
|---|---|---|---|
| fps | No | Frames per second of the video output (default 24). | |
| orbit | No | True: turntable; an orbit camera circles the scene once (the scene's own camera is not used). Flat floors and walls are ignored when framing. A preview without frames shows 0/90/180/270 degrees; a final without frame_end renders the whole turn as an MP4. Best for imported models and product videos. | |
| width | No | Output width in pixels (previews are capped at 1280x720 keeping the aspect ratio; a final frame can have at most 1920x1080 pixels on free time, 3840x2160 on prepaid credit). | |
| camera | No | Name of the camera object to render from (default: the scene's active camera, or an automatic camera if there is none). Ignored with orbit=True; not combinable with cameras. | |
| engine | No | '' or 'cycles' (path tracing, default) | 'eevee' (real-time rasterizer: about half the per-frame cost on animations of a few dozen frames or more; each job pays about 7 s of shader compilation, so previews stay on Cycles). | |
| height | No | Output height in pixels (previews are capped at 1280x720 keeping the aspect ratio; a final frame can have at most 1920x1080 pixels on free time, 3840x2160 on prepaid credit). | |
| output | No | 'auto' (mp4 for a frame range, png for one frame) | 'png' | 'exr' (16-bit linear frames for compositing) | 'mp4' (H.264) | 'webm' (VP9) | 'prores' (Apple ProRes 422 HQ .mov, for editing) | 'gif' | 'webp' (animated, at most 960 px wide; good for chat and web). | auto |
| preset | No | Purpose preset: 'product' (4 studio shots at 0/90/180/270 deg on a plain backdrop; the final gives 4 PNGs at 1440x1440), 'turntable' (one full turn as an MP4, studio light, plain backdrop), 'animation' (the scene's own camera, lights and frame range; the scene is read first when the range is unknown), or '' (none). It fills what you do not pass; environment, orbit_frames, width/height and the frames still win when given. | |
| blender | No | Blender version: '' (default: a .blend opens with the version it was saved in, other scenes with 5.0) or '5.0' / '5.2' (also '4.5', '4.2', '3.6'; a script that stops on Blender 5 because of an older API is rendered again on those automatically) to choose. | |
| cameras | No | Several camera object names (up to 8) rendered from the same frame in one job: the preview tiles them in one labeled sheet, the final returns one PNG/EXR per camera (camera_files maps names to files). For product shots from fixed angles. Not combinable with orbit, environment='compare' or camera. | |
| max_yen | No | Ceiling for this job in JPY (-1 = none): the job is refused before anything is reserved when its reservation would exceed it. 0 means 'only if it fits the free time'. | |
| samples | No | Cycles samples per pixel (preview: up to 32, default 16; final: default 128). | |
| scene_id | No | scene_id returned by an earlier call (reuses the uploaded scene without sending it again). | |
| frame_end | No | Last frame to render (inclusive); equal to frame_start for a single image. With orbit=True and no frame_end, one full turn is rendered. | |
| scene_url | No | https link to a .blend, a .py script or a 3D file (.glb/.gltf/.fbx/.usd/.obj/.stl/.ply/.abc); the service fetches it (e.g. the sample https://render.janction.jp/samples/cube_scene.py, or a 12-hour /upload link). A .gltf or .obj also brings its .bin / .mtl / textures from the same folder. | |
| asset_urls | No | Extra files sent with the scene: https links (textures, glTF .bin) or 'polyhaven:<id>' CC0 assets from asset_search ('polyhaven:<id>@2k' for 2k textures). A .blend finds them through relative paths (same folder); a script through os.environ['JR_ASSETS_DIR'] or the jr_assets helpers. | |
| notify_url | No | Optional https URL that receives one JSON POST when the final render finishes (job.done / job.failed, with download links), so nobody has to poll. | |
| environment | No | Lighting preset: '' (the scene's own world), 'studio', 'sunset', 'overcast' or 'night' (bundled HDRIs; a good first render for scenes without lighting work), or 'compare' (preview only: all four in one labeled 2x2 image, to pick one). | |
| frame_start | No | First frame to render (inclusive). | |
| transparent | No | True renders on a transparent background (alpha) for product shots and overlays; png / exr / webm / gif / webp keep it, mp4 and prores cannot. The preview sheet shows it over dark grey. | |
| orbit_frames | No | Number of frames for one full turn (default 24). | |
| orbit_target | No | Object name or 'x,y,z' to centre the orbit on (default: the scene's main objects). | |
| scene_script | No | The scene as bpy Python code (text). No file and no local Blender needed; the service runs it in Blender 5.0 (5.2 with blender='5.2'). Blender 5.0 API notes: materials are node-based, so set a colour on the Principled BSDF (mat.node_tree.nodes['Principled BSDF'].inputs['Base Color'].default_value = (r, g, b, 1)); mat.diffuse_color only affects the viewport; do not set Material.use_nodes. Animate with obj.keyframe_insert() (action.fcurves no longer exists; set bpy.context.preferences.edit.keyframe_new_interpolation_type = 'LINEAR' first for constant speed). Build the scene, camera and frame range only; leave resolution, samples and denoising to the service. Helpers: `import jr_assets`, then jr_assets.frame_camera(margin=1.1) points the camera at every object and fits them in the frame; jr_assets.import_model('<id>'), jr_assets.material('<id>') and jr_assets.world_hdri('<id>') use Poly Haven assets passed in asset_urls. | |
| orbit_distance | No | Multiplier for the orbit camera distance (default 1.0). | |
| idempotency_key | No | Any string up to 128 characters that identifies this order: sending the same key again returns the first job instead of rendering twice (a different body with the same key is refused). | |
| orbit_elevation | No | Orbit camera elevation in degrees (default 18). | |
| storage_project | No | JANCTION Storage project id to continue (from a Storage project's Render again); the result is saved into that project when saving to Storage is on for this key, otherwise ignored. | |
| environment_visible | No | False hides the HDRI from the camera (flat grey backdrop, HDRI lighting only). | |
| environment_strength | No | Multiplier for the HDRI preset's brightness (default 1.0). |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes far beyond the annotations (readOnlyHint=false, openWorldHint=true, idempotentHint=false, destructiveHint=false) by disclosing pricing (0.1 JPY/GPU-second prepaid, 100/400 JPY welcome credits, 2 free preview GPU-minutes/day), hard limits (3,000 frames/call, 1080p free vs 4K prepaid), chunk-and-join rendering, file deletion after 24h (7 days once topped up), and async job_id + notify_url completion behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with purpose, the estimate-first rule, and the download follow-up before the dense cost/limit detail, so the critical routing information comes first. It is long and the trailing 'Options per parameter' enumeration duplicates the schema, but nearly every sentence carries operational weight.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 29-parameter, 0-required, open-world render tool with an output schema, the description covers everything an agent needs: prerequisites (approved preview), cost/credit constraints, frame and resolution limits, async return contract, cleanup policy, and follow-up tools. Return values are correctly left to the output schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and every parameter is already richly documented in the schema, so baseline 3 applies. The description's 'Options per parameter' list and preset explanation largely restate the schema rather than adding new per-parameter meaning, though the note to reuse the approved environment/blender adds light cross-parameter guidance.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource+scope: 'Render the final frames or video of a Blender scene on cloud GPUs, after the user approved a preview.' It immediately distinguishes itself from render_preview and render_estimate, so an agent can route without opening any schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly names when to call render_estimate first (uncertain time, >24 frames, >720p, user asks how long), when to ask the user before spending (free time doesn't cover the job), and the follow-up call render_download(job_id, wait_seconds=45). It also prescribes re-estimating after a 10-frame test for animations.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
render_import_fileUse an attached fileAIdempotentInspect
Use a file the user attached in this chat (.blend, glTF/GLB, FBX, USD, OBJ, STL or a bpy .py script): JANCTION fetches it and makes it a scene of this account, and returns scene_id. Then call scene_info(scene_id=...) to read the cameras and frame range, and render_preview(scene_id=...) to see it. Nothing is rendered or charged here. A large file can take a few minutes: if the reply says status 'importing', call render_import_file again with the same file after about 30 seconds (the download continues and is not started again). If the attachment cannot be fetched, ask the user to attach it again or to upload it at the /upload page.
| Name | Required | Description | Default |
|---|---|---|---|
| file | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations, the description discloses that no render happens and no charge is incurred, that large files can take minutes, that a retry resumes rather than restarts the download (corroborating idempotentHint=true), and that it creates a scene in the account (matching readOnlyHint=false). Failure handling is spelled out, which the annotations cannot express.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Tight, front-loaded, and every sentence carries operational information: formats, side effects, follow-up calls, polling, failure recovery. The only blemish is an unexplained token ('JANCTION') that slightly interrupts the opening sentence.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Covers a long-running async import end to end: accepted inputs, output (scene_id, though an output schema also exists), cost and render side effects, retry semantics, and error recovery. Nothing an agent needs to invoke or re-invoke this tool correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is reported as 0%, so the description must carry the load: it enumerates the supported file types (.blend, glTF/GLB, FBX, USD, OBJ, STL, bpy .py), which is the key semantic constraint an agent needs. It also implies the same file object is reused on retry, though it does not explain the file_id/download_url fields.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource (import an attached file into a scene of this account), enumerates the accepted formats, and names the return value (scene_id). It also distinguishes itself from sibling tools by naming scene_info and render_preview as the follow-up steps rather than alternatives for the same job.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives an explicit sequence of use (import → scene_info → render_preview), a polling instruction for the 'importing' status (call again with the same file after ~30s), and a fallback when fetching fails (ask the user to re-attach or use /upload). There is no ambiguity about when this tool should be called or what to do next.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
render_infoService statusARead-onlyIdempotentInspect
Check the connection and the service before rendering (read-only, no GPU time, no charge): the server URL, whether GPU workers are online, the queue length and expected wait, and this key's usage. Use it before the first render or when renders seem stuck, and to decide whether to route a render here: workers_available > 0 means a preview comes back in seconds; gated means the GPU is lent out and gate says how long the wait usually is. It runs as the connected account (OAuth or the API key in the connector). Every call is rate-limited per key; a 429 response carries retry_after_s, wait that long. diagnose.tell_user says in plain words whether the connection, the key, the free credit and the GPUs are fine and what the last failed render said; relay it when the user asks why something does not work.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations (which already declare readOnly/idempotent/non-destructive), the description adds substantial operational context: no GPU time and no charge, it runs as the connected account via OAuth or connector API key, every call is rate-limited per key, and a 429 carries retry_after_s to wait on. It also explains how to interpret diagnose.tell_user output, which the agent could not infer from the schema alone.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The purpose and pre-flight use case are front-loaded in the first sentence, and every subsequent sentence adds operative detail (thresholds, auth, rate limits, how to relay diagnose output). It is a single dense paragraph of roughly 150 words, which is longer than strictly necessary but not padded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return-value structure need not be restated, and the description still adds interpretation guidance (workers_available, gated, diagnose.tell_user). Combined with the disclosed cost, auth, and rate-limit behavior, an agent has everything needed to call and act on this tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters, so the baseline is 4 and there is nothing the description needs to compensate for. Schema coverage is reported at 100% and no parameter semantics are missing.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a concrete resource (connection/service status) and enumerates what it returns: server URL, GPU worker availability, queue length, expected wait, key usage. It is clearly a pre-flight/service-status check rather than a job-status tool, but it never explicitly contrasts itself with siblings like render_status or render_estimate, leaving that distinction to inference.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicit triggers are given: use it before the first render, when renders seem stuck, or to decide whether to route a render here, with a concrete decision rule (workers_available > 0 → preview in seconds; gated → gate gives typical wait). There is no stated when-not condition and no sibling tool is named as the alternative, so it stops short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
render_previewRender previewAInspect
Show what a Blender scene looks like: a fast, low-cost preview render on a cloud GPU, back as an image in seconds. Typical requests: 'render this .blend', 'show me the scene', 'preview the turntable', 'I have no GPU', 'Blender is too slow on my laptop', 'Blenderでレンダリングして', 'GPUがない', 'ターンテーブル', '商品の360度動画'. Also use it after writing a bpy script, to see what it builds. Each preview returns a critic verdict (ok / check / fix) with fix code: apply the fixes and preview again before any final render. It also returns final_estimate (the same scene as a 1080p final) and quota_left_today; tell the user both before asking to go on. Prices come before rendering: final_offers give each next render's time and price, and a paid one needs the user's approval. A script that raises comes back as a failure with the line (nothing is rendered). When not to use: editing a scene open in the user's Blender belongs to a local Blender MCP, and a single still on a machine with its own NVIDIA GPU usually renders faster locally. This service is for CPU-only machines, animations, and scripts with no Blender installed. Limits: up to 1280x720; 1-4 frames tiled in one labeled image for the GPU time of one 720p frame. preset='product' | 'turntable' | 'animation' sets camera, light, backdrop and frames for that purpose. Other options are explained on each parameter: environment presets and 'compare', orbit (turntable), cameras (several named cameras), engine, transparent, asset_urls with 'polyhaven:' CC0 assets. Give the scene as scene_script (bpy code as text), scene_url (an https link to a .blend, .py or 3D file) or scene_id; reuse the returned scene_id in render_final.
| Name | Required | Description | Default |
|---|---|---|---|
| orbit | No | True: turntable; an orbit camera circles the scene once (the scene's own camera is not used). Flat floors and walls are ignored when framing. A preview without frames shows 0/90/180/270 degrees; a final without frame_end renders the whole turn as an MP4. Best for imported models and product videos. | |
| width | No | Output width in pixels (previews are capped at 1280x720 keeping the aspect ratio; a final frame can have at most 1920x1080 pixels on free time, 3840x2160 on prepaid credit). | |
| camera | No | Name of the camera object to render from (default: the scene's active camera, or an automatic camera if there is none). Ignored with orbit=True; not combinable with cameras. | |
| engine | No | '' or 'cycles' (path tracing, default) | 'eevee' (real-time rasterizer: about half the per-frame cost on animations of a few dozen frames or more; each job pays about 7 s of shader compilation, so previews stay on Cycles). | |
| frames | No | Preview frames: '' = frame 1; '12' = one frame; '1,8,16,24' or '1-24' = up to 4 frames tiled in one labeled image (to judge camera motion and animation; same GPU time as one 720p frame). | |
| height | No | Output height in pixels (previews are capped at 1280x720 keeping the aspect ratio; a final frame can have at most 1920x1080 pixels on free time, 3840x2160 on prepaid credit). | |
| preset | No | Purpose preset: 'product' (4 studio shots at 0/90/180/270 deg on a plain backdrop; the final gives 4 PNGs at 1440x1440), 'turntable' (one full turn as an MP4, studio light, plain backdrop), 'animation' (the scene's own camera, lights and frame range; the scene is read first when the range is unknown), or '' (none). It fills what you do not pass; environment, orbit_frames, width/height and the frames still win when given. | |
| blender | No | Blender version: '' (default: a .blend opens with the version it was saved in, other scenes with 5.0) or '5.0' / '5.2' (also '4.5', '4.2', '3.6'; a script that stops on Blender 5 because of an older API is rendered again on those automatically) to choose. | |
| cameras | No | Several camera object names (up to 8) rendered from the same frame in one job: the preview tiles them in one labeled sheet, the final returns one PNG/EXR per camera (camera_files maps names to files). For product shots from fixed angles. Not combinable with orbit, environment='compare' or camera. | |
| samples | No | Cycles samples per pixel (preview: up to 32, default 16; final: default 128). | |
| scene_id | No | scene_id returned by an earlier call (reuses the uploaded scene without sending it again). | |
| scene_url | No | https link to a .blend, a .py script or a 3D file (.glb/.gltf/.fbx/.usd/.obj/.stl/.ply/.abc); the service fetches it (e.g. the sample https://render.janction.jp/samples/cube_scene.py, or a 12-hour /upload link). A .gltf or .obj also brings its .bin / .mtl / textures from the same folder. | |
| asset_urls | No | Extra files sent with the scene: https links (textures, glTF .bin) or 'polyhaven:<id>' CC0 assets from asset_search ('polyhaven:<id>@2k' for 2k textures). A .blend finds them through relative paths (same folder); a script through os.environ['JR_ASSETS_DIR'] or the jr_assets helpers. | |
| environment | No | Lighting preset: '' (the scene's own world), 'studio', 'sunset', 'overcast' or 'night' (bundled HDRIs; a good first render for scenes without lighting work), or 'compare' (preview only: all four in one labeled 2x2 image, to pick one). | |
| transparent | No | True renders on a transparent background (alpha) for product shots and overlays; png / exr / webm / gif / webp keep it, mp4 and prores cannot. The preview sheet shows it over dark grey. | |
| orbit_frames | No | Number of frames for one full turn (default 24). | |
| orbit_target | No | Object name or 'x,y,z' to centre the orbit on (default: the scene's main objects). | |
| scene_script | No | The scene as bpy Python code (text). No file and no local Blender needed; the service runs it in Blender 5.0 (5.2 with blender='5.2'). Blender 5.0 API notes: materials are node-based, so set a colour on the Principled BSDF (mat.node_tree.nodes['Principled BSDF'].inputs['Base Color'].default_value = (r, g, b, 1)); mat.diffuse_color only affects the viewport; do not set Material.use_nodes. Animate with obj.keyframe_insert() (action.fcurves no longer exists; set bpy.context.preferences.edit.keyframe_new_interpolation_type = 'LINEAR' first for constant speed). Build the scene, camera and frame range only; leave resolution, samples and denoising to the service. Helpers: `import jr_assets`, then jr_assets.frame_camera(margin=1.1) points the camera at every object and fits them in the frame; jr_assets.import_model('<id>'), jr_assets.material('<id>') and jr_assets.world_hdri('<id>') use Poly Haven assets passed in asset_urls. | |
| orbit_distance | No | Multiplier for the orbit camera distance (default 1.0). | |
| orbit_elevation | No | Orbit camera elevation in degrees (default 18). | |
| environment_visible | No | False hides the HDRI from the camera (flat grey backdrop, HDRI lighting only). | |
| environment_strength | No | Multiplier for the HDRI preset's brightness (default 1.0). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations (readOnlyHint=false, openWorldHint=true, idempotentHint=false, destructiveHint=false) only sketch the safety profile; the description adds substantial non-obvious behavior: output includes a critic verdict (ok/check/fix) with fix codes, final_estimate and quota_left_today, prices surface as final_offers before rendering, paid renders require user approval, and a raising script returns a failure with the offending line and renders nothing. The 1280x720 cap and 1-4-frame tiling are also disclosed. No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The purpose is correctly front-loaded, but the body is an over-stuffed run-on spanning pricing, quota, critic verdicts, usage examples, literal Japanese user utterances, limits and a parameter index, with some repetition (pricing is implied twice). The embedded multilingual utterance list consumes space without adding invocation-relevant meaning. Value density is high but trimming would clearly improve it.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 0-required-parameter, 22-parameter tool with no output schema, the description covers everything an agent needs: the three ways to supply a scene, what the response contains (verdict, estimate, quota), pricing/approval flow, failure semantics, hard limits, and how presets interact with explicit options. Nothing material for correct invocation is left unstated.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is already 100%, so the schema carries most parameter meaning and baseline would be 3. The description adds a consolidated index of the option families (preset values 'product'|'turntable'|'animation', environment presets including 'compare', orbit, cameras, engine, transparent, 'polyhaven:<id>' assets) and summarizes the three mutually exclusive scene inputs (scene_script / scene_url / scene_id) — useful because the schema declares no enums and allowed values live only in prose. It mostly restates schema content, though, so it does not reach a 5.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Names a specific verb and resource ('Show what a Blender scene looks like: a fast, low-cost preview render on a cloud GPU, back as an image in seconds') and distinguishes itself from the sibling render_final ('apply the fixes and preview again before any final render', 'reuse the returned scene_id in render_final'). An agent can identify this tool and its relationship to other render_* tools without opening a schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives explicit use cases ('after writing a bpy script', 'render this .blend', 'I have no GPU') and an explicit 'When not to use' clause naming the alternatives (local Blender MCP for editing an open scene, local NVIDIA GPU for single stills) plus the positive selection rule ('for CPU-only machines, animations, and scripts with no Blender installed'). This is about as complete a routing guide as a description can carry.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
render_statusRender status and ETAARead-onlyIdempotentInspect
Check a render job: status (queued / running / done / failed / canceled), frames done, the ETA (eta.human, including queue wait), files ready, Blender warnings, and the error with the log tail if it failed. Use it to report progress to the user; render_download(job_id, wait_seconds=45) waits and returns the links in one call. Without job_id it lists this key's recent jobs and the scene_ids still kept, to pick up earlier work in a new conversation.
| Name | Required | Description | Default |
|---|---|---|---|
| job_id | No | The job_id returned by render_preview or render_final (j_...; a long final split into parts is b_...). Only this key's jobs; in render_status, leave it empty to list them. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly/idempotent/non-destructive; the description adds behavior beyond them: the status value set, that eta.human includes queue wait, that Blender warnings surface here, that failures return the error with a log tail, and what happens when job_id is omitted. It never states scoping limits like rate limits or how long jobs are retained, so it stops short of a 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three dense sentences, front-loaded with the returned fields before moving to routing and the empty-arg case. No filler, though the return-field enumeration is long and partially duplicated by the schema.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return shape need not be documented, and for a single optional-parameter read tool the description covers the remaining gaps: field meanings, failure output, the no-arg listing behavior, and the sibling to use for link delivery.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3, but the description meaningfully adds beyond it: empty job_id lists the key's recent jobs and still-kept scene_ids, and job_id format (j_..., split finals as b_...). It does not define the queue-wait or ETA computation windows, which are only implied.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Opens with a specific verb+resource ("Check a render job") and then enumerates exactly what it reports: status enum values, frames done, ETA, files ready, warnings, error log tail. An agent can distinguish it from render_info, render_download and render_cancel without opening any schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
States the primary use case ("report progress to the user") and explicitly names the alternative for a different need: render_download(job_id, wait_seconds=45) "waits and returns the links in one call." It also spells out the no-job_id branch — listing recent jobs and retained scene_ids to resume earlier work in a new conversation.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
scene_infoRead scene infoAIdempotentInspect
Read a Blender scene without rendering (a few seconds, no GPU time): cameras and the active one, frame range and fps, resolution, objects by type, lights, materials, whether it is animated, and missing linked files that would render pink. Use it for a .blend you did not write, or to check what a bpy script built. Returns scene_id; pass it to render_preview and render_final instead of sending the scene again.
| Name | Required | Description | Default |
|---|---|---|---|
| blender | No | Blender version: '' (default: a .blend opens with the version it was saved in, other scenes with 5.0) or '5.0' / '5.2' (also '4.5', '4.2', '3.6'; a script that stops on Blender 5 because of an older API is rendered again on those automatically) to choose. | |
| scene_id | No | scene_id returned by an earlier call (reuses the uploaded scene without sending it again). | |
| scene_url | No | https link to a .blend, a .py script or a 3D file (.glb/.gltf/.fbx/.usd/.obj/.stl/.ply/.abc); the service fetches it (e.g. the sample https://render.janction.jp/samples/cube_scene.py, or a 12-hour /upload link). A .gltf or .obj also brings its .bin / .mtl / textures from the same folder. | |
| asset_urls | No | Extra files sent with the scene: https links (textures, glTF .bin) or 'polyhaven:<id>' CC0 assets from asset_search ('polyhaven:<id>@2k' for 2k textures). A .blend finds them through relative paths (same folder); a script through os.environ['JR_ASSETS_DIR'] or the jr_assets helpers. | |
| scene_script | No | The scene as bpy Python code (text). No file and no local Blender needed; the service runs it in Blender 5.0 (5.2 with blender='5.2'). Blender 5.0 API notes: materials are node-based, so set a colour on the Principled BSDF (mat.node_tree.nodes['Principled BSDF'].inputs['Base Color'].default_value = (r, g, b, 1)); mat.diffuse_color only affects the viewport; do not set Material.use_nodes. Animate with obj.keyframe_insert() (action.fcurves no longer exists; set bpy.context.preferences.edit.keyframe_new_interpolation_type = 'LINEAR' first for constant speed). Build the scene, camera and frame range only; leave resolution, samples and denoising to the service. Helpers: `import jr_assets`, then jr_assets.frame_camera(margin=1.1) points the camera at every object and fits them in the frame; jr_assets.import_model('<id>'), jr_assets.material('<id>') and jr_assets.world_hdri('<id>') use Poly Haven assets passed in asset_urls. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations cover the safety profile, and the description adds genuine operational context: runtime and no-GPU cost, that missing linked files render pink, and that the call emits a reusable scene_id. It never explains why readOnlyHint=false (that the call uploads/materializes the scene), which is the one behavioral trait an agent might misread from 'Read'.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Purpose is front-loaded in the first clause and every sentence carries weight. The long enumeration of returned fields is informative for selection but partly redundant given an output schema exists.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With a rich schema, annotations, and an output schema, the description covers purpose, cost, usage conditions, and cross-tool chaining. The only uncovered element is the non-read-only nature implied by readOnlyHint=false, which the 'Read' framing leaves slightly ambiguous.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the schema already documents all five parameters, including the scene_id reuse semantics. The description's note about passing scene_id to render_preview/render_final duplicates what the schema's scene_id description already states, adding no new parameter-level meaning. Baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource ('Read a Blender scene') and enumerates exactly what is inspected (cameras, frame range/fps, resolution, objects, lights, materials, animation, missing linked files). It is plainly distinguishable from the render_* siblings because it explicitly says 'without rendering (a few seconds, no GPU time)'.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives concrete when-to-use conditions: 'a .blend you did not write, or to check what a bpy script built', and names the downstream alternatives (render_preview, render_final) that consume its scene_id. It does not explicitly route away from siblings like scene_edit when mutation is intended, so no full when-not guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
1 tool update
- Added
render_import_file
Related MCP Connectors
Cloud Blender for AI agents: build, inspect, render and animate 3D scenes over remote MCP. Keep editable .blend projects and export GLB or STL. Make your first 3D asset free—30 compute minutes per UTC month, no credit card. First 100 eligible Free account owners to use all 30 minutes in one UTC month by December 31, 2026 UTC receive one calendar month of beta free: 4 compute hours per UTC month, 2 concurrent workers per deployment, 2 deployments, 2048×2048 renders at up to 256 samples, and 10 GiB storage. Existing usage counts toward the 4-hour allowance. Limited to 100 rewards; expires January 1, 2027 00:00 UTC. Free resumes afterward without an automatic charge. Examples, eligibility and terms: https://sceneplane.online/launch?utm_source=glama&utm_medium=directory&utm_campaign=first100
Free text/image → 3D: generate, rig, avatar-ify, and refine GLB models. No auth, no payment.
3D avatar/asset foundry: text/image -> rigged, validated, engine-ready GLB via x402.
Blender-as-a-service for agents: search 3D assets, run Blender Python, or brief the studio agent.
Related MCP Servers
- AlicenseCqualityBmaintenanceEnables AI agents to build game assets in Blender by modeling, lighting, rendering previews to inspect and correct, validating against engine budgets, and exporting to GLB/FBX.126MIT
- FlicenseNot gradedqualityDmaintenanceEnables AI agents to fully control Blender through 50+ tools for 3D modeling, animation, materials, and scene management via HTTP endpoints.-
- AlicenseNot gradedqualityCmaintenanceEnables multiple AI agents to concurrently submit isolated 3D modeling jobs to headless Blender workers, with per-job outputs, logs, and status tracking.MIT
- AlicenseBqualityAmaintenanceEnables AI agents to drive a live Blender session for modeling, shading, lighting, rendering, and scene manipulation, returning rendered images for visual feedback.122MIT
Glama MCP Gateway
Add one secure layer between your agents and this server.