Blender MCP
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| BLENDER_MCP_HOST | No | Host used by connected-session tools to reach the addon in the authoring container. | 127.0.0.1 |
| BLENDER_MCP_PORT | No | Port used by connected-session tools to reach the addon in the authoring container. | 9876 |
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 |
|---|---|
| execute_blender_codeA | Execute Python code in the connected Blender instance. The code runs in Blender's Python environment with full access to |
| execute_blender_code_for_cliA | Execute Python code in a background Blender process. Opens blend_file with |
| get_blendfile_summary_datablocksA | Return a summary of the blend file: data-block counts, active workspace, and render engine. |
| get_blendfile_summary_datablocks_for_cliB | Return a data-block summary by opening blend_file in background Blender. |
| get_blendfile_summary_missing_filesA | Report external file references that are missing from disk (images, libraries, fonts, sounds, movie clips, caches, sequences). |
| get_blendfile_summary_missing_files_for_cliB | Report missing file references by opening blend_file in background Blender. |
| get_blendfile_summary_of_linked_librariesA | Return a tree of directly and indirectly linked library files. |
| get_blendfile_summary_of_linked_libraries_for_cliB | Return linked-library info by opening blend_file in background Blender. |
| get_blendfile_summary_path_infoA | Simple/fast access to the blend file's path, save status, age, and backups. |
| get_blendfile_summary_path_info_for_cliB | Return path info by opening blend_file in background Blender. |
| get_blendfile_summary_usage_guessA | Guess the primary use-cases of the current blend file (scored 0-100 with certainty). |
| get_blendfile_summary_usage_guess_for_cliA | Guess use-cases by opening blend_file in background Blender. |
| get_object_detail_summaryA | Return a structured summary of the object identified by name. Includes type, transforms, parent, children, modifiers, constraints, materials, visibility, data-block name, and collections. |
| get_objects_summaryA | Return the scene's collection hierarchy and their objects. Each collection lists its objects (name, type, parent, data name, selection, visibility) and nested child collections. |
| get_python_api_docsA | Return the Blender Python API docs for identifier, or list
modules matching a trailing- identifier should be a fully-qualified Python name (e.g.
Both return a The response always carries
|
| get_screenshot_of_area_as_imageA | Take a screenshot of a single Blender area and return it as a PNG image. area_ui_type matches the area's size_limit_in_bytes caps the image size in bytes. Zero (the default) uses the MCP message size limit. |
| get_screenshot_of_window_as_imageA | Take a screenshot of the entire Blender window and return it as a PNG image. size_limit_in_bytes caps the image size in bytes. Zero (the default) uses the MCP message size limit. |
| get_screenshot_of_window_as_jsonA | Return a JSON description of the Blender window layout, areas, active object, and selection. |
| jump_to_tab_by_nameB | Switch the active workspace tab to name. |
| jump_to_tab_by_space_typeA | Switch to a workspace whose main area matches space_type. If allow_edits is True and no matching workspace exists, a new one is created by duplicating the current workspace. |
| jump_to_view3d_object_by_nameA | Move the 3D viewport to focus on an object by name. If allow_edits is True the object may be un-hidden and its collections enabled to make it visible. |
| jump_to_view3d_object_data_by_nameA | Move the 3D viewport to the object whose data block matches name. If allow_edits is True the object may be un-hidden and its collections enabled to make it visible. |
| render_thumbnail_to_pathB | Render a small, low-quality thumbnail to output_path (temporarily overrides settings). |
| render_viewport_to_pathA | Render the current scene to output_path using current render settings. |
| search_api_docsA | Full-text search over the bundled Blender Python API reference. Returns a ranked list of hits. Each hit has:
The query is tokenised on whitespace and matched
case-insensitively. Every token must appear somewhere in
the paragraph body, the file path, or an enclosing section
title - in any order. Common English stop-words ( Use Read-only; consults bundled RST files only. |
| search_manual_docsA | Full-text search over the bundled Blender user manual. Returns a ranked list of hits. Each hit has:
The query is tokenised on whitespace and matched
case-insensitively. Every token must appear somewhere in
the paragraph body, the file path, or an enclosing section
title - in any order. Common English stop-words ( Use Read-only; consults bundled RST files only. |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
No prompts | |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
No resources | |
TDQS
Scored across 26 tools
Most tools target clearly distinct actions or resources, and the _for_cli suffix cleanly separates live vs. background modes. However, the get_blendfile_summary_* family and the get_objects_summary/get_object_detail_summary pair are similar enough that an agent must read descriptions carefully to avoid misselection.
Tool names are uniformly snake_case and verb-first (get_, jump_to_, render_, execute_, search_), which is predictable and readable. Minor inconsistencies like get_screenshot_of_window_as_json returning layout JSON rather than an image, and mixed get_blendfile_summary_of_* vs. get_blendfile_summary_* patterns, keep it from a perfect score.
At 26 tools, the server exceeds the 25-tool threshold for 'too many,' and the six nearly identical _for_cli variants inflate the count without adding much conceptual breadth. The core categories are sensible, but merging live/CLI variants into single parameterized tools would make the surface much cleaner.
The set covers scene inspection, object details, screenshots, navigation, rendering, documentation search, and blend-file health checks, which is broad coverage for Blender. There are no dedicated mutation tools beyond execute_blender_code, but that escape hatch plus the CLI variants covers most workflows, leaving only minor gaps.