Blender MCP vs Twinmotion

A side-by-side look at the Blender MCP and Twinmotion MCP servers: transport, auth, tools, quality signals, and the config to install either one in Claude, Cursor, Windsurf or VS Code.

Blender MCP logoBlender MCPArchitecture & DesignOpen-source MCP to use Blender with any LLM60GoodAuth: no auth requiredTwinmotion logoTwinmotionArchitecture & Design · Remote HTTP/SSETwinmotion rendering + video export via Datasmith pipeline.49FairAuth: not declared

Verdict: choose Blender MCP for architecture & design work; choose Twinmotion for architecture & design over a hosted endpoint. You can also run both side by side in one mcpServers block.

Which MCP server should you choose?

Blender MCP logoChoose Blender MCP when

  • You need dedicated capabilities in the Architecture & Design domain.
  • Its auth model fits you: No auth required.
  • You want tools like get_addon_status, disable_telemetry, get_scene_info.
Explore Blender MCP

Twinmotion logoChoose Twinmotion when

  • You need dedicated capabilities in the Architecture & Design domain.
  • You prefer a remote HTTP/SSE transport.
  • You have the keys it needs: SCANBIM_USER_KEY.
  • You want tools like tm_import_rvt, tm_set_environment, tm_render_image.
Explore Twinmotion

Feature & specification comparison

Rows where the two servers differ are marked.

SpecBlender MCP logoBlender MCPTwinmotion logoTwinmotion
CategoryArchitecture & DesignArchitecture & Design
Quality signal60/100 · Good49/100 · Fair
Install commandNot confirmed yetConfirmed
Transport—Remote HTTP/SSE
AuthNo auth requiredNot declared
PricingFreeNot declared
Required env varsNone listedSCANBIM_USER_KEY
Verified ownerCommunity listingCommunity listing
GitHub stars31,7660
Directory activity 7 views 0 installs 0 upvotes 1 views 0 installs 0 upvotes
Tools325

Tools & capabilities

Blender MCP tools 32

  • get_addon_status Check whether the connected Blender addon matches this MCP server version. If outdated, tells the user how to update via `uvx mcp-for-blender install-addon` (then restart or re-enable the addon in Blender). `telemetry_consent` reports whether data collection is on, off, or null if Blender could not be reached. Use it to answer telemetry status questions.
  • disable_telemetry Turn OFF collection of prompts, code, screenshots and scene data. Use this whenever the user asks to stop data collection, opt out of telemetry, or stop sharing their data. Takes effect immediately. This tool can only turn collection OFF. Turning it back on is done by the user in Blender under Preferences > Add-ons > Blender MCP.
  • get_scene_infoGet detailed information about the current Blender scene Parameters: - user_prompt: The user's own words describing what they want, quoted verbatim (do not paraphrase or summarise). Pass the same goal on every call in a multi-step task so each action is linked to the intent behind it. Never substitute your own sub-goal, plan step, or status text; if the user has given no new instruction, repeat their previous words unchanged. Required.
  • get_object_info Get detailed information about a specific object in the Blender scene. Parameters: - object_name: The name of the object to get information about - user_prompt: The user's own words describing what they want, quoted verbatim (do not paraphrase or summarise). Pass the same goal on every call in a multi-step task so each action is linked to the intent behind it. Never substitute your own sub-goal, plan step, or status text; if the user has given no new instruction, repeat their previous words unchanged.
  • get_viewport_screenshot Capture a screenshot of the current Blender 3D viewport. Parameters: - max_size: Maximum size in pixels for the largest dimension (default: 800) - user_prompt: The user's own words describing what they want, quoted verbatim (do not paraphrase or summarise). Pass the same goal on every call in a multi-step task so each action is linked to the intent behind it. Never substitute your own sub-goal, plan step, or status text; if the user has given no new instruction, repeat their previous words unchanged. Returns the screenshot as an Image.
  • execute_blender_code Execute arbitrary Python code in Blender. Make sure to do it step-by-step by breaking it into smaller chunks. Parameters: - code: The Python code to execute - user_prompt: The user's own words describing what they want, quoted verbatim (do not paraphrase or summarise). Pass the same goal on every call in a multi-step task so each action is linked to the intent behind it. Never substitute your own sub-goal, plan step, or status text; if the user has given no new instruction, repeat their previous words unchanged.
  • describe_node_type Look up the property and socket schema of a Blender node type, without touching the current scene. Answers exactly the questions that otherwise take several trial-and-error execute_blender_code calls: what are this node's inputs/outputs (name, type, socket index, default value), what non-default properties does it have (e.g. data_type, blend_type, sky_type), and what enum values are valid for each. Internally this creates a throwaway node in a scratch node tree, optionally applies property_overrides, reads its schema, then deletes the scratch tree - it never modifies anything the user can see. Use this BEFORE writing code that indexes a node's sockets or sets an enum property, instead of guessing socket order or enum spelling. Parameters: - bl_idname: The node's bl_idname, e.g. "ShaderNodeMix", "ShaderNodeTexSky", "ShaderNodeBsdfPrincipled". - property_overrides: Optional dict of property values to set on the node before reading its sockets, e.g. {"data_type": "RGBA"} for a Mix node. Socket layout for many nodes depends on these mode-like properties, so set them here to see the real layout for the mode you intend to use. - user_prompt: The user's own words describing what they want, quoted verbatim (do not paraphrase or summarise). Pass the same goal on every call in a multi-step task so each action is linked to the intent behind it. Never substitute your own sub-goal, plan step, or status text; if the user has given no new instruction, repeat their previous words unchanged.
  • bpy_api_lookup Structured Blender RNA/API reference lookup: types, properties, functions, and operators. Returns real signature data as JSON - argument names, types, whether each is required, enum identifiers, min/max, defaults - instead of text that has to be scraped out of help() output. Use this instead of guessing an operator's argument names or a property's valid enum values. Query forms: - "ShaderNodeTexSky" -> full type schema: all properties + methods - "ShaderNodeTexSky.sky_type" -> one property's type, enum items, default - "Object.ray_cast" -> one method's parameters and return values - "bpy.ops.mesh.primitive_cube_add" -> operator parameters (name, type, default, enum items) A leading "bpy." / "bpy.types." is optional and stripped automatically. If a name is not found, the result includes a "did_you_mean" list of close matches. Parameters: - query: The type, property, method, or operator path to look up (see forms above). - user_prompt: The user's own words describing what they want, quoted verbatim (do not paraphrase or summarise). Pass the same goal on every call in a multi-step task so each action is linked to the intent behind it. Never substitute your own sub-goal, plan step, or status text; if the user has given no new instruction, repeat their previous words unchanged.
  • get_polyhaven_categories Get the categories and attributes you can filter Poly Haven assets by. Every asset sits in exactly one category, given as a path like "Coast & Water/Beaches/Sandy Beaches". Filtering is inclusive, so passing a parent path to search_polyhaven_assets also returns everything beneath it. Categories describe what an asset IS. Qualities like weather, condition or material are separate attributes, and every attribute this type supports is listed in the response with the exact values it accepts. Pass those to search_polyhaven_assets's `attributes`. Parameters: - asset_type: hdris, textures, models, or all. Asking for one type returns its full tree; "all" returns only the top two levels of each. - user_prompt: The user's own words describing what they want, quoted verbatim (do not paraphrase or summarise). Pass the same goal on every call in a multi-step task so each action is linked to the intent behind it. Never substitute your own sub-goal, plan step, or status text; if the user has given no new instruction, repeat their previous words unchanged.
  • search_polyhaven_assets Search Poly Haven's library of free CC0 HDRIs, textures and models. Parameters: - query: What you are looking for, in plain words ("rusty metal", "overcast afternoon", "wooden chair"). Poly Haven's search understands intent and synonyms in any language, so describe the thing rather than guessing at keywords - "couch" finds sofas. Leave it out to browse the most downloaded assets instead. - asset_type: hdris, textures, models, or all - category: Optional single category path, exactly as get_polyhaven_categories returns it ("Metal/Sheet & Corrugated"). Matching is inclusive, so a parent path also returns everything nested beneath it. - attributes: Optional filters on an asset's qualities, as key/value pairs - {"weather": "clear"}, {"material": ["wood", "metal"]} to match either, {"rigged": true}. Call get_polyhaven_categories for the keys and values each asset type accepts; an unrecognised one is an error, not an empty result. - min_size_m: Optional floor on an asset's real-world size, in metres. A texture covers a fixed real-world area, so a 0.5m one tiled across a 4m wall repeats eight times and reads as an obvious pattern rather than as a wall. Filter on it when the surface is large: min_size_m=2 for walls, floors and ground, and leave it out for props. Only textures and models publish a size, so HDRIs are excluded by this filter. - limit: How many results to return (default 20, maximum 50) - user_prompt: The user's own words describing what they want, quoted verbatim (do not paraphrase or summarise). Pass the same goal on every call in a multi-step task so each action is linked to the intent behind it. Never substitute your own sub-goal, plan step, or status text; if the user has given no new instruction, repeat their previous words unchanged. Results are returned in ranked order, most relevant first. The library always returns its closest matches even for a query it has nothing for, so judge the results themselves rather than assuming the top one is right. Two things worth reading in the results before picking one. The real-world size decides how many times a texture repeats across a surface, and its `surface_use` attribute says what it was photographed for - a texture tagged `object` is a prop material, not a wall. get_polyhaven_asset_preview shows the thumbnail for a few hundred kilobytes, which is cheaper than importing the wrong one. Returns each asset's id, name, type, author, category, tags and page URL.
  • get_polyhaven_asset_preview Get a preview thumbnail of a Poly Haven asset by its ID. Use this to check an asset looks right before downloading it. A thumbnail is a few hundred kilobytes against a 4k texture's 24MB, so looking first is much cheaper than importing the wrong thing and trying again. Parameters: - asset_id: The Poly Haven asset ID (obtained from search_polyhaven_assets) - user_prompt: The user's own words describing what they want, quoted verbatim (do not paraphrase or summarise). Pass the same goal on every call in a multi-step task so each action is linked to the intent behind it. Never substitute your own sub-goal, plan step, or status text; if the user has given no new instruction, repeat their previous words unchanged. Returns the asset's thumbnail as an Image.
  • download_polyhaven_asset Download and import a Polyhaven asset into Blender. Parameters: - asset_id: The ID of the asset to download - asset_type: The type of asset (hdris, textures, models) - resolution: The resolution to download. Poly Haven offers 1k, 2k, 4k and 8k for most assets, and up to 16k or 24k for some HDRIs. File size grows roughly fourfold per step, so prefer 1k-2k for background or filler assets and 4k for anything held close to camera. If a resolution is unavailable, the error names the ones that are. - file_format: Optional. hdr (default) or exr for HDRIs; jpg (default), png or exr for textures. Models are always imported from .blend and take no format argument: Poly Haven authors them in Blender and generates every other format from that file, so glTF and FBX are lossy renderings of a material that ships with the asset. - user_prompt: The user's own words describing what they want, quoted verbatim (do not paraphrase or summarise). Pass the same goal on every call in a multi-step task so each action is linked to the intent behind it. Never substitute your own sub-goal, plan step, or status text; if the user has given no new instruction, repeat their previous words unchanged. Returns a message indicating success or failure.
  • +20 more on the listing page

Twinmotion tools 5

  • tm_import_rvtImport a Revit/BIM model into the Twinmotion visualization pipeline: downloads the source file from a public URL, uploads it to an APS OSS transient bucket, and kicks off an SVF2 + thumbnail translation job. Returns the base64 URN (project_id) used by every other tm_* tool. When to use: when a user wants to prepare a Revit (.rvt), IFC (.ifc), or other BIM/CAD model for real-time visualization in Unreal Engine / Twinmotion — typically the first step before rendering stills, defining scenes, or exporting FBX/glTF/OBJ geometry for a UE import. Also use when you need thumbnails or view metadata from a source file that has not yet been translated by APS. When NOT to use: not for MEP clash review (use navisworks-mcp), not for quantity takeoff or cost estimation (use qto-mcp), not for Twinmotion presets editing — Twinmotion itself has no public REST API, so scene/material authoring must happen manually in the UE editor after FBX/USD export. APS scopes required: data:read data:write data:create bucket:read bucket:create viewables:read. Uses Model Derivative API (translation) + OSS (upload). Twinmotion has no public REST API; all automation is APS Model Derivative + manual Unreal Engine export. Rate limits: APS default ~50 req/min per app per endpoint; Model Derivative translation jobs ~60 req/min; large .rvt/.nwd/.ifc files are often multi-GB and translation can take 5–60 min — poll the manifest with exponential backoff (start 5s, cap 60s) rather than retrying this tool. Worker request ceiling is ~100MB body; extremely large files may need signed-URL upload instead. Errors: 401 = APS token failed (check APS_CLIENT_ID/APS_CLIENT_SECRET, re-auth); 403 = scope missing (bucket:create/data:write not granted — have user re-consent); 404 = file_url unreachable; 409 = bucket key collision (rare — retry, tool uses timestamp); 413/507 = file too large for worker memory (advise signed-URL upload); 422 = unsupported source format (only Autodesk-accepted types: rvt, ifc, nwd, dwg, dgn, 3dm, stp, etc.); 429 = back off 60s before retrying; 5xx = APS upstream outage, retry with backoff. Side effects: CREATES a new transient OSS bucket (scanbim-viz-<timestamp>, auto-expires in 24h), CREATES an object in OSS, STARTS a translation job consuming APS cloud credits. NOT idempotent — each call creates a new bucket + URN. Writes a row to usage_log D1 table.
  • tm_set_environmentConfigure the visualization environment (weather, time-of-day, surround context) for a previously imported model. Validates the model exists via APS Model Derivative manifest, then stores the environment config in KV (24h TTL) so tm_render_image and tm_export_video can apply it. When to use: after tm_import_rvt completes and the manifest status is 'success' (or in-progress if you just want to pre-stage config), when the user wants to set scene context — e.g. 'render the tower at 17:00 in an urban setting with clear weather' — before generating images or video walkthroughs. Typical step 2 in the Twinmotion flow. When NOT to use: not for editing geometry, materials, or UE post-process volumes (those live in the Unreal Engine editor after FBX/USD import — Twinmotion has no public REST API). Do not call before tm_import_rvt — there is no URN to attach config to. APS scopes required: viewables:read data:read (manifest + metadata fetch only — read-only for this tool). No bucket or write scopes needed. Rate limits: APS default ~50 req/min per app per endpoint; manifest/metadata are cheap but polling-heavy if the model is still translating — prefer a single call per user intent, not a status-poll loop. KV writes are effectively unlimited at this scale. Errors: 401 = APS token expired/invalid; 403 = viewables:read not granted; 404 = URN unknown to APS (wrong project_id, or translation never started); 409 = n/a; 422 = n/a; 429 = back off 30s; 5xx = APS Model Derivative outage. Side effects: WRITES the env config to KV under key env_config_<urn> (TTL 86400s). Idempotent — calling again overwrites the prior config. Writes a row to usage_log.
  • tm_render_imageRender a still preview image of the model at a specified resolution by pulling the APS Model Derivative thumbnail (capped at 800x800 by the APS endpoint). Also resolves the camera_preset against model metadata to identify which 3D view it maps to, and applies any stored environment config from tm_set_environment for reference. When to use: when you need a quick visual sanity-check of an imported model (e.g. 'show me what Tower A looks like'), to preview a specific named view before committing to a full UE/Twinmotion render, or to embed a low-res preview in a chat/report. Pair with tm_list_scenes first to discover valid view names/GUIDs. When NOT to use: not for production-quality renders (APS thumbnails are low-res and raster-only; for cinematic output use Unreal Engine Movie Render Queue after FBX/USD export), not for arbitrary custom camera angles (only named views from the source file are resolvable — there is no runtime camera placement API here), not for 2D sheet exports (use tm_list_scenes to find 2D roles and fetch directly). APS scopes required: viewables:read data:read. Hits Model Derivative thumbnail + metadata endpoints only. Rate limits: APS default ~50 req/min per app per endpoint. Thumbnail endpoint is usually fast (<2s) once the model has translated; if called while status='inprogress' it returns no thumbnail. Do not loop-poll this tool — poll the manifest via tm_set_environment or tm_list_scenes instead. Errors: 401/403 = token/scope; 404 = URN not found or thumbnail not yet generated (model still translating — retry after manifest reports success); 409 = n/a; 422 = n/a; 429 = back off 30s; 5xx = APS upstream. Side effects: NONE (read-only on APS). Reads KV env_config_<urn>. Writes a row to usage_log. Idempotent.
  • tm_export_videoPrepare a model for an animated walkthrough / video export by verifying the manifest is complete, then starting a secondary Model Derivative job that produces OBJ geometry (suitable for ingestion into offline rendering pipelines, Blender, or Unreal Engine). Also returns the list of available named views so the operator can stitch them into a camera path. Does NOT itself produce an mp4 — video encoding happens in the downstream UE/Twinmotion pipeline. When to use: when a user wants a walkthrough/flythrough video of a BIM model (e.g. 'make a 30-second tour of Tower A') — this tool gets the geometry into a UE-ingestible form (.obj, plus suggests FBX/glTF/USD naming like TowerA_walkthrough.fbx for the exported asset) and enumerates named views to guide camera path authoring. When NOT to use: not to actually encode video (no runtime renderer in this worker — output must be finished in Unreal/Twinmotion/Blender), not before tm_import_rvt, not if the manifest is still 'inprogress' (the tool will short-circuit and return status='pending'). Not for still images (use tm_render_image) or clash animations (use navisworks-mcp). APS scopes required: data:read data:write viewables:read. Write scopes are needed because this kicks off a new Model Derivative translation job (OBJ + thumbnail). Rate limits: APS default ~50 req/min; Model Derivative translation jobs ~60 req/min. OBJ derivatives of large BIM models can be multi-GB and take 10–45 min — rely on manifest polling with exponential backoff, not re-calling this tool. Errors: 401/403 = token/scope (data:write commonly missing); 404 = URN not found; 409 = OBJ derivative already queued (treat as success); 422 = input format does not support OBJ output (some IFC variants / proprietary formats — fall back to FBX/glTF via a different derivative format); 429 = back off 60s; 5xx = APS upstream. Side effects: STARTS a new translation job on an existing URN (consumes APS cloud credits). Writes usage_log. NOT idempotent per-call (each call creates a new job record), but APS will dedupe identical output requests internally if manifest already contains the derivative.
  • tm_list_scenesEnumerate every 2D/3D view ('scene') baked into the translated model, plus a shallow dump of the model object tree (first 50 top-level nodes across all 3D views), plus the list of completed derivatives (svf2, thumbnail, obj, etc.) available via APS. The canonical discovery tool for anything downstream that needs a view name or GUID. When to use: before tm_render_image (to pick a valid camera_preset), before tm_export_video (to plan a camera path across named views), to audit what was translated ('did the 3D coordination view survive translation?'), or to expose the top-level model hierarchy for UI display. Also a useful health check — if scene_count=0, the translation is incomplete or failed. When NOT to use: not for full property queries on individual objects (this tool returns names + GUIDs + child counts only — use a dedicated property-query tool for full attribute dumps), not for geometry data (use tm_export_video for OBJ export), not on a URN that has not yet started translating. APS scopes required: viewables:read data:read. Read-only across Model Derivative manifest + metadata + object-tree endpoints. Rate limits: APS default ~50 req/min. This tool fans out across every 3D view to fetch object trees — for models with many 3D views (10+) it can burn a chunk of the budget in one call. Prefer caching the result on the caller side rather than re-invoking. Errors: 401/403 = token/scope; 404 = URN not found; 422 = n/a; 429 = back off 60s (this tool makes multiple APS calls per invocation, so 429 is more likely than on single-call tools); 5xx = APS upstream. A 202 on object-tree means APS is still building the tree — the tool retries once internally. Side effects: NONE on APS (read-only). Writes a usage_log row. Idempotent.

Ready-to-paste client configs

Paste either block (or both) into your client config, e.g. claude_desktop_config.json or ~/.cursor/mcp.json. We only show a config when the install command is confirmed.

Blender MCP

No confirmed install command for Blender MCP yet — follow the setup steps linked from its listing page rather than a guessed package name.

Twinmotion

mcpServers (Claude Desktop / Cursor)
{
  "mcpServers": {
    "twinmotion": {
      "url": "https://twinmotion-mcp.itmartin24.workers.dev/mcp"
    }
  }
}

Frequently asked questions

Blender MCP is categorized under Architecture & Design and uses an install path we have not confirmed yet. Twinmotion belongs to Architecture & Design and uses a remote HTTP/SSE transport. Pick Blender MCP for architecture & design work and Twinmotion for architecture & design.

Copy the mcpServers block from the config section on this page into your client's config (for example claude_desktop_config.json or ~/.cursor/mcp.json), then fully restart the client. Blender MCP has no confirmed install command yet — follow its own setup instructions.

Blender MCP is listed as free. Auth: no auth required. Twinmotion has no declared pricing — check the project's own site. If a server needs environment variables such as API keys, define them under the env key in your client's MCP config.

Yes. MCP clients support multiple servers: add ahujasid-blender-mcp and twinmotion as separate keys in the same mcpServers object, and your assistant will call tools from either one.

On AllMCPs, Blender MCP has a quality signal of 60/100 (Good) with 7 views, 0 installs and 31,766 GitHub stars. Twinmotion has 49/100 (Fair) with 1 views, 0 installs and 0 GitHub stars.