Skip to main content
Glama

Server Details

Blender and GLB/FBX/USD/STL rendered on cloud GPUs for AI agents: product shots, turntables, MP4

Ownership verified
Status
Healthy
Uptime
100.0% over the last 24 hours
Last Tested
Transport
Streamable HTTP · MCP 2025-11-25
URL
Repository
JasmyLab-JANCTION/janction-render
GitHub Stars
4
Server Listing
JANCTION Render
ChatGPT
–
Claude
–

TDQS

A4.2/5.0

Scored across 13 tools

Disambiguation4/5

Most tools map to a clearly distinct render-lifecycle stage: import, scene inspection, preview, estimate, final render, status, download, cancel, and sharing. The main overlap is render_info vs billing, both of which report account/service state, and render_status vs render_download have some conceptual proximity, but the descriptions make the intended use reasonably clear.

Naming Consistency4/5

Nine tools use a consistent render_* verb_noun pattern (render_preview, render_final, render_status, etc.), and asset_search and scene_info follow the same verb_noun style. billing is a lone noun with no prefix, which is a minor deviation from an otherwise predictable convention.

Tool Count5/5

Thirteen tools is well within the appropriate range for a cloud rendering service with a real lifecycle. Each tool corresponds to a meaningful operation, and there is no obvious duplication or filler.

Completeness4/5

The surface covers the core workflow end-to-end: service checks, billing/credits, asset search, scene import and inspection, preview, estimate, final render, status polling, cancellation, download, and public share/unshare. Minor gaps remain around scene/job cleanup or account top-up operations, but typical render workflows are not blocked.

Available Tools

13 tools
billingQuota and billingA
Read-onlyIdempotent
Inspect

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, the balance, the price per GPU-second, any pending checkout link, and the offers that apply. Relay tell_user to the user in their language when it is present.

Inputs: no named parameters. Returns: result

render_cancelCancel renderA
DestructiveIdempotent
Inspect

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.

Inputs: job_id (required). Returns: result

render_downloadDownload linksA
Read-onlyIdempotent
Inspect

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'.

Inputs: job_id (required), only, wait_seconds.

render_estimateEstimate render timeA
Read-onlyIdempotent
Inspect

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 and tell_user / tell_user_ja, the one sentence to give the user (time and price). If final_path_measured is false the sentence says it is an unmeasured figure: do not present it as the time the final will take; run a short contiguous final-path test and estimate again before the full animation. It also says when to split a job.

Inputs: kind, test, width, frames, +12 more. Returns: result

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 preview's environment and blender. 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. colors={'Body': '#cc2233'}: object name -> colour for its material's Principled Base Color (copied for this render; the scene file is unchanged). A variations preview gives each variant's render_final args. compare_to=<job_id of an earlier final of this key>: when this render finishes, also returns compare.mp4 (before / after side by side), compare.gif and compare.json (most changed frames). passes=['depth','mist','normal','diffuse','glossy','emission','ao','shadow_catcher','crypto_object','crypto_material'] (Cycles): each frame becomes one multilayer OpenEXR with those passes (output 'exr'); output='prores4444' gives a ProRes 4444 .mov (alpha with transparent=True). deliver=['x','vertical','square'] (animations): also returns social_x.mp4 (fits X: up to 2:20, 512 MB, 1080p or 720p), social_vertical.mp4 (1080x1920) and social_square.mp4 (1080x1080); the whole frame on a blurred fill, no cropping.

Inputs: fps, test, orbit, width, +37 more. Returns: result

render_import_fileUse an attached fileA
Idempotent
Inspect

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.

Inputs: file (required). Returns: result

render_infoService statusA
Read-onlyIdempotent
Inspect

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.

Inputs: no named parameters. Returns: result

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. variations=[{label, environment, environment_strength, camera, colors}, ...] (2-8): the same frame once per variant, rendered in parallel and tiled in one sheet labelled A, B, ...; anything a variant leaves out uses this call's settings. colors maps an object name to '#rrggbb' (or [r, g, b, a], 0-1) for its material's Principled Base Color. GPU time is the sum of the variants. Show the sheet, ask the user to pick one, then call render_final with that variant's render_final args. Not with cameras, orbit or environment='compare'.

Inputs: orbit, width, camera, engine, +21 more.

render_shareShare a renderAInspect

Publish a finished render as a public web page anyone with the link can open (for X, Discord or a client): the image or video, the render settings, an optional title and note, the user's request in their words (prompt), and the bpy script only if include_script=True. The page keeps its own copy of the result after the job's files expire, until render_unshare. listed=True only asks to appear in the public gallery; the operator reviews it first. Public: ask the user before sharing and return the url to them. Only the key that rendered the job can share it.

Inputs: job_id (required), note, title, listed, +2 more. Returns: result

render_statusRender status and ETAA
Read-onlyIdempotent
Inspect

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.

Inputs: job_id. Returns: result

render_unshareUnshare a renderA
DestructiveIdempotent
Inspect

Take down the public share page of a job made with render_share. Effects: the page URL stops working, its copy of the image or video, the shared script and the shown request are deleted, and the page leaves the public gallery. This cannot be undone: sharing again makes a new page with a new URL. The job's own files are not touched (they expire on their usual schedule). Only the key that shared the job can take the page down; a job without a share page returns not_found.

Inputs: job_id (required). Returns: result

scene_infoRead scene infoA
Idempotent
Inspect

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.

Inputs: blender, scene_id, scene_url, asset_urls, +1 more. Returns: result

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

Loading tool schema changelog…

    Related MCP Connectors

    Related MCP Servers

    Try in Browser

    Glama MCP Gateway

    Add one secure layer between your agents and this server.