Skip to main content
Glama
clanker25
by clanker25

Server Configuration

Describes the environment variables required to run the server.

NameRequiredDescriptionDefault
BLENDER_HOSTNoHost address for Blender socket server.localhost
BLENDER_PORTNoPort number for Blender socket server.9876
DISABLE_TELEMETRYNoSet to 'true' to completely disable all telemetry.
BLENDER_MCP_SAFE_MODENoSet to '1' to validate scripts before they run in Blender and block risky code.0
BLENDERMCP_HYPER3D_API_KEYNoHyper3D API key (optional).
BLENDERMCP_HUNYUAN3D_API_URLNoHunyuan3D API URL (optional).
BLENDERMCP_POLYPIZZA_API_KEYNoPoly Pizza API key (optional).
BLENDERMCP_SKETCHFAB_API_KEYNoSketchfab API key (optional).
BLENDERMCP_HUNYUAN3D_SECRET_IDNoHunyuan3D Secret ID (optional).
BLENDERMCP_HUNYUAN3D_SECRET_KEYNoHunyuan3D Secret Key (optional).

Instructions

Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.

This server publishes no instructions, or was last inspected before Glama recorded them.

Capabilities

Features and capabilities supported by this server

Protocol revision2025-11-25

CapabilityDetails
tools
{
  "listChanged": false
}
prompts
{
  "listChanged": false
}
resources
{
  "subscribe": false,
  "listChanged": false
}
experimental
{}

Tools

Functions exposed to the LLM to take actions

NameDescription
get_addon_statusA
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_telemetryA
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_infoB

Get 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_infoA
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_screenshotB
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_codeB
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_typeA
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_lookupA
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_categoriesB
Get a list of categories for a specific asset type on Polyhaven.

Parameters:
- asset_type: The type of asset to get categories for (hdris, textures, models, all)
- 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_assetsA
Search for assets on Polyhaven with optional filtering.

Parameters:
- asset_type: Type of assets to search for (hdris, textures, models, all)
- categories: Optional comma-separated list of categories to filter by
- 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 list of matching assets with basic information.
download_polyhaven_assetA
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 (e.g., 1k, 2k, 4k)
- file_format: Optional file format (e.g., hdr, exr for HDRIs; jpg, png for textures; gltf, fbx for models)
- 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.
set_textureA
Apply a previously downloaded Polyhaven texture to an object.

Parameters:
- object_name: Name of the object to apply the texture to
- texture_id: ID of the Polyhaven texture to apply (must be downloaded first)
- 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.
get_polyhaven_statusA

Check if PolyHaven integration is enabled in Blender. Returns a message indicating whether PolyHaven features are available.

get_hyper3d_statusB

Check if Hyper3D Rodin integration is enabled in Blender. Returns a message indicating whether Hyper3D Rodin features are available.

get_sketchfab_statusA

Check if Sketchfab integration is enabled in Blender. Returns a message indicating whether Sketchfab features are available.

search_sketchfab_modelsA
Search for models on Sketchfab with optional filtering.

Parameters:
- query: Text to search for
- categories: Optional comma-separated list of categories
- count: Maximum number of results to return (default 20)
- downloadable: Whether to include only downloadable models (default True)
- 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 formatted list of matching models.
get_sketchfab_model_previewA
Get a preview thumbnail of a Sketchfab model by its UID.
Use this to visually confirm a model before downloading.

Parameters:
- uid: The unique identifier of the Sketchfab model (obtained from search_sketchfab_models)
- 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 model's thumbnail as an Image for visual confirmation.
download_sketchfab_modelA
Download and import a Sketchfab model by its UID.
The model will be scaled so its largest dimension equals target_size.

Parameters:
- uid: The unique identifier of the Sketchfab model
- target_size: REQUIRED. The target size in Blender units/meters for the largest dimension.
              You must specify the desired size for the model.
              Examples:
              - Chair: target_size=1.0 (1 meter tall)
              - Table: target_size=0.75 (75cm tall)
              - Car: target_size=4.5 (4.5 meters long)
              - Person: target_size=1.7 (1.7 meters tall)
              - 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.
              - Small object (cup, phone): target_size=0.1 to 0.3

Returns a message with import details including object names, dimensions, and bounding box.
The model must be downloadable and you must have proper access rights.
get_polypizza_statusB

Check if Poly Pizza integration is enabled in Blender. Returns a message indicating whether Poly Pizza features are available.

search_polypizza_modelsA
Search for models on Poly Pizza with optional filtering.

Parameters:
- query: Text to search for. May be left empty if at least one filter is given.
- category: Optional category name, e.g. "Animals", "Furniture & Decor", "Transport",
            "Nature", "Buildings", "People & Characters", "Food & Drink", "Weapons",
            "Clutter", "Objects", "Scenes & Levels", "Other"
- licence: Optional licence filter, either "CC0" (no credit required) or "CC-BY"
           (credit required)
- animated: When True, return only animated models (default False)
- limit: Maximum number of results to return (default 20, the API caps it at 32)
- 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 formatted list of matching models, with licence and triangle count on
every row so a low-poly, permissively licensed asset can be picked without a
second call.
download_polypizza_modelA
Download and import a Poly Pizza model by its ID.

Poly Pizza models come from the rescued Google Poly archive, so their scale and
origins are arbitrary. Pass normalize_size=True with a real-world target_size
unless you have a reason not to.

Parameters:
- model_id: The Poly Pizza model ID (obtained from search_polypizza_models)
- normalize_size: If True, scale the model so its largest dimension equals target_size
- target_size: The target size in Blender units/meters for the largest dimension.
              Examples:
              - Chair: target_size=1.0 (1 meter tall)
              - Table: target_size=0.75 (75cm tall)
              - Car: target_size=4.5 (4.5 meters long)
              - Person: target_size=1.7 (1.7 meters tall)
              - Small object (cup, phone): target_size=0.1 to 0.3
- 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 with import details including object names, dimensions, bounding
box, and the attribution string, which is also written onto each imported root
object as the custom properties polypizza_attribution, polypizza_id and
polypizza_licence.
generate_hyper3d_model_via_textA
Generate 3D asset using Hyper3D by giving description of the desired asset, and import the asset into Blender.
The 3D asset has built-in materials.
The generated model has a normalized size, so re-scaling after generation can be useful.

Parameters:
- text_prompt: A short description of the desired model in **English**.
- bbox_condition: Optional. If given, it has to be a list of floats of length 3. Controls the ratio between [Length, Width, Height] of the model.
- 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.
generate_hyper3d_model_via_imagesA
Generate 3D asset using Hyper3D by giving images of the wanted asset, and import the generated asset into Blender.
The 3D asset has built-in materials.
The generated model has a normalized size, so re-scaling after generation can be useful.

Parameters:
- input_image_paths: The **absolute** paths of input images. Even if only one image is provided, wrap it into a list. Required if Hyper3D Rodin in MAIN_SITE mode.
- input_image_urls: The URLs of input images. Even if only one image is provided, wrap it into a list. Required if Hyper3D Rodin in FAL_AI mode.
- bbox_condition: Optional. If given, it has to be a list of ints of length 3. Controls the ratio between [Length, Width, Height] of the model.
- 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.

Only one of {input_image_paths, input_image_urls} should be given at a time, depending on the Hyper3D Rodin's current mode.
Returns a message indicating success or failure.
poll_rodin_job_statusA
Check if the Hyper3D Rodin generation task is completed.

For Hyper3D Rodin mode MAIN_SITE:
    Parameters:
    - subscription_key: The subscription_key given in the generate model step.

    Returns a list of status. The task is done if all status are "Done".
    If "Failed" showed up, the generating process failed.
    This is a polling API, so only proceed if the status are finally determined ("Done" or "Canceled").

For Hyper3D Rodin mode FAL_AI:
    Parameters:
    - request_id: The request_id given in the generate model step.

    Returns the generation task status. The task is done if status is "COMPLETED".
    The task is in progress if status is "IN_PROGRESS".
    If status other than "COMPLETED", "IN_PROGRESS", "IN_QUEUE" showed up, the generating process might be failed.
    This is a polling API, so only proceed if the status are finally determined ("COMPLETED" or some failed state).
import_generated_assetA
Import the asset generated by Hyper3D Rodin after the generation task is completed.

Parameters:
- name: The name of the object in scene
- task_uuid: For Hyper3D Rodin mode MAIN_SITE: The task_uuid given in the generate model step.
- request_id: For Hyper3D Rodin mode FAL_AI: The request_id given in the generate model step.

Only give one of {task_uuid, request_id} based on the Hyper3D Rodin Mode!
Return if the asset has been imported successfully.
get_hunyuan3d_statusB

Check if Hunyuan3D integration is enabled in Blender. Returns a message indicating whether Hunyuan3D features are available.

generate_hunyuan3d_modelA
Generate 3D asset using Hunyuan3D by providing either text description, image reference, 
or both for the desired asset, and import the asset into Blender.
The 3D asset has built-in materials.

Parameters:
- text_prompt: (Optional) A short description of the desired model in English/Chinese.
- input_image_url: (Optional) The local or remote url of the input image. Accepts None if only using text prompt.
- 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: 
- When successful, returns a JSON with job_id (format: "job_xxx") indicating the task is in progress
- When the job completes, the status will change to "DONE" indicating the model has been imported
- Returns error message if the operation fails
poll_hunyuan_job_statusA
Check if the Hunyuan3D generation task is completed.

For Hunyuan3D:
    Parameters:
    - job_id: The job_id given in the generate model step.

    Returns the generation task status. The task is done if status is "DONE".
    The task is in progress if status is "RUN".
    If status is "DONE", returns ResultFile3Ds with one or more downloadable model URLs.
    Prefer a .glb URL when present (self-contained with materials); otherwise use a .zip/.obj asset URL.
    This is a polling API, so only proceed if the status are finally determined ("DONE" or some failed state).
import_generated_asset_hunyuanA
Import the asset generated by Hunyuan3D after the generation task is completed.

Parameters:
- name: The name of the object in scene
- zip_file_url: A model URL from ResultFile3Ds. Prefer a .glb URL when available; .zip/.obj URLs still work as a fallback.

Return if the asset has been imported successfully.
export_sceneA
Export the whole scene, the current selection, or named objects to a GLB or FBX file on disk,
so another application (a game engine, a viewer, a converter) can pick it up.

Parameters:
- filepath: Absolute path of the file to write (.glb or .fbx). Parent folders are created.
- format: "glb" (default; keeps PBR materials, emission, skins, shape keys, animation) or "fbx".
- object_names: Export only these objects (children included). Omit for selection_only or the whole scene.
- selection_only: Export what is currently selected in Blender (ignored when object_names is given).
- apply_modifiers: Bake modifiers on export. Use false for rigged / shape-key meshes.
- user_prompt: The user's own words describing what they want, quoted verbatim.

Returns JSON with path, bytes, selection_only and the exported object names.
record_trajectory_feedbackA
Record evaluation feedback for a captured trajectory step.

Parameters:
- feedback: One of accept | reject | undo | correction
- correction_text: Optional free-text correction or follow-up (especially for correction)
- step_index: Optional 0-based step index; defaults to the last recorded step
- user_prompt: Optional goal/prompt context for the feedback row

Prompts

Interactive templates invoked by user choice

NameDescription
asset_creation_strategyDefines the preferred strategy for creating assets in Blender

Resources

Contextual data attached and managed by the client

NameDescription

No resources

TDQS

A3.7/5.0

Scored across 31 tools

Disambiguation4/5

Tools are mostly distinct, with clear purposes per resource and action. There is slight overlap between bpy_api_lookup and describe_node_type (both are reference lookups), and the six get_*_status tools are repetitive but provider-specific. Overall, an agent can reliably select the right tool.

Naming Consistency4/5

Most tools follow a verb_noun snake_case pattern (get_*, search_*, download_*, generate_*, poll_*, import_*). Minor deviations like bpy_api_lookup and record_trajectory_feedback break the pattern, but the convention is still predictable and readable.

Tool Count3/5

31 tools is on the high side, but the server covers a broad scope: multiple asset libraries (Polyhaven, Sketchfab, Polypizza), AI generation (Hyper3D, Hunyuan3D), export, telemetry, and scene management. Each tool earns its place, though the count is heavier than ideal and could be streamlined by consolidating status checkers.

Completeness4/5

The surface covers scene inspection, code execution, API reference, asset search/download, AI generation with polling, export, telemetry, and feedback. Explicit object manipulation is missing but is covered via execute_blender_code. Minor gaps like direct material editing exist, but overall the domain is well covered.

Maintenance

ActivityMaintained
ResponsivenessNo issues