Blender-MCP
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
No arguments | |||
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
| 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