Blender-MCP
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
No arguments | |||
Capabilities
Features and capabilities supported by this server
| Capability | Details |
|---|---|
| tools | {
"listChanged": false
} |
| prompts | {
"listChanged": false
} |
| resources | {
"subscribe": false,
"listChanged": false
} |
| experimental | {} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| blender_pingA | Check whether Blender is running and the bridge addon is reachable. Use this as the first step before any other tool to confirm the integration is live. Returns:
JSON with Example: blender_ping() → {"status": "success", "result": {"reachable": true}} |
| blender_get_scene_infoA | Get an overview of the current Blender scene. Returns scene name, frame range, render engine, and total object count. Args: params: GetSceneInfoInput with response_format ('markdown' or 'json'). Returns: Markdown summary or JSON object describing the scene. Example: blender_get_scene_info(response_format="json") |
| blender_list_objectsA | List objects in the current Blender scene, optionally filtered by type. Args:
params: ListObjectsInput with optional Returns: Markdown table or JSON list of objects with name, type, and location. Example: blender_list_objects(object_type="MESH", response_format="json") |
| blender_get_object_infoA | Get detailed information about a specific object by name. Returns transform, dimensions, material slots, and type-specific data (mesh stats for MESH, light settings for LIGHT, focal length for CAMERA). Args:
params: GetObjectInfoInput with the object Returns: Markdown summary or JSON with full object properties. Example: blender_get_object_info(name="Cube") |
| blender_save_fileA | Save the current Blender scene to a .blend file. Args:
params: SaveFileInput with optional Returns: JSON with the path the file was saved to. Example: blender_save_file(filepath="/tmp/my_scene.blend") blender_save_file() # saves to current file path |
| blender_open_fileA | Open a .blend file in Blender, replacing the current scene. WARNING: Unsaved changes to the current scene will be lost. Args:
params: OpenFileInput with Returns: JSON confirming the file that was opened. Example: blender_open_file(filepath="/home/user/projects/scene.blend") |
| blender_get_viewport_screenshotA | Capture a screenshot of the current Blender 3D viewport. Renders using OpenGL and returns the image inline. Great for inspecting the current state of the scene visually. Args:
params: ViewportScreenshotInput with Returns: An inline PNG image of the viewport, or an error string if capture fails. Example: blender_get_viewport_screenshot(max_size=1024) |
| blender_create_primitiveA | Create a primitive mesh (cube, sphere, cylinder, etc.) in the scene. Args: params: CreatePrimitiveInput with primitive_type, optional name, location (x, y, z), and size. Returns: JSON describing the newly created object. Example: blender_create_primitive(primitive_type="cube", name="MyCube", location=(0,0,1)) |
| blender_transform_objectA | Set location, rotation, and/or scale of an existing object. Any field left as Args:
params: TransformObjectInput with the target object name and any
combination of Returns: JSON with the updated transform values. Example: blender_transform_object(name="Cube", location=(1,0,0), scale=(2,2,2)) |
| blender_delete_objectA | Delete an object from the scene by name. DESTRUCTIVE: permanently removes the object. Idempotent: deleting a missing object returns success with a note. Args:
params: DeleteObjectInput with the exact Returns: JSON confirming the deletion. Example: blender_delete_object(name="Cube") |
| blender_set_materialA | Apply a PBR material to an object using Principled BSDF. Creates or updates a material with the given base color, metallic, roughness, and optional emission. Assigns it to the first material slot of the object. Args: params: SetMaterialInput with object_name, color (RGBA), metallic, roughness, optional material_name, and optional emission. Returns: JSON with the material name and applied properties. Example: blender_set_material(object_name="Cube", color=(0.2, 0.4, 0.8, 1.0), metallic=0.9) |
| blender_add_lightA | Add a light source to the scene. Supports POINT (omnidirectional), SUN (directional), SPOT (cone), and AREA (panel) lights. Args: params: AddLightInput with light_type, optional name, location, energy, color, and type-specific settings (spot_size, size, etc.). Returns: JSON with the light object name and properties. Example: blender_add_light(light_type="POINT", location=(0, 0, 4), energy=2000) |
| blender_set_cameraA | Configure a camera's position, aim target, and focal length. Uses the active scene camera if no name is given. Creates a new camera if the scene has none. Optionally points the camera at a 3D target point. Args: params: SetCameraInput with optional name, location, target (point to aim at), lens (focal length in mm), and set_active flag. Returns: JSON with the camera name, location, rotation, and lens. Example: blender_set_camera(location=(5, -5, 3), target=(0, 0, 0), lens=50) |
| blender_render_imageA | Render a frame using Blender's render engine and return the result inline. Blocks until the render is complete. For fast previews use EEVEE; for photorealistic output use CYCLES (much slower — increase timeout_seconds). Returns both a JSON metadata block and an inline image preview. If output_path is given the full-resolution render is also saved to disk. Args: params: RenderImageInput with optional frame, output_path, engine override, Cycles sample override, preview size, and timeout. Returns: List of [metadata JSON string, inline PNG preview Image]. Example: blender_render_image(engine="BLENDER_EEVEE", frame=1, max_preview_size=512) blender_render_image(engine="CYCLES", samples=64, timeout_seconds=600) |
| blender_execute_pythonA | Execute arbitrary Python code inside Blender (escape hatch for advanced ops). The code runs with DESTRUCTIVE: arbitrary code can modify or delete anything in the scene. Args:
params: ExecutePythonInput with the Returns:
JSON with the value of Example: code = "result = [obj.name for obj in bpy.data.objects if obj.type == 'MESH']" |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
No prompts | |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
No resources | |
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/Aayushdubey101/Blender-MCP'
If you have feedback or need assistance with the MCP directory API, please join our Discord server