Skip to main content
Glama

Server Configuration

Describes the environment variables required to run the server.

NameRequiredDescriptionDefault
BLENDER_MCP_HOSTNoHost address for the Blender MCP server.localhost
BLENDER_MCP_PORTNoPort for the Blender MCP server.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

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

Tools

Functions exposed to the LLM to take actions

NameDescription
execute_blender_codeA

Execute Python code in the connected Blender instance.

The code runs in Blender's Python environment with full access to bpy. To return data, assign a JSON-serialisable dict to a variable named result. Deferred completion via check_is_finished is only supported by the interactive addon server, and is rejected in background mode.

execute_blender_code_for_cliA

Execute Python code in a background Blender process.

Opens blend_file with blender --background and runs code. Assign a dict to result to return data.

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-* discovery pattern.

identifier should be a fully-qualified Python name (e.g. bpy.app or bpy.types.Scene.frame_current). The trailing-* forms are supported as discovery entry-points:

  • * enumerates the top-level modules (bpy, bmesh, mathutils, gpu, ...).

  • X.* enumerates the direct-child identifiers under the X namespace (bpy.* -> bpy.app, bpy.context, ...).

Both return a namespace response even when X.rst would otherwise resolve to exact; the .* form lets an agent force the child listing.

The response always carries kind, found, and identifier. The remaining keys depend on kind:

  • "exact" (found=True): <identifier>.rst was read. Extra keys: content (RST text), examples. When the file exceeds 32 KB, content is replaced with a dot-point summary of the file's top-level definitions (prefixed by a header noting the truncation) and examples is empty - re-query individual members for their rendered blocks.

  • "namespace" (found=True): no <identifier>.rst but <identifier>.<child>.rst siblings exist. Extra key: submodules (list of child identifiers).

  • "definition" (found=True): identifier is defined inside a parent RST (e.g. bpy.props.IntProperty lives in bpy.props.rst). Extra keys: content (rendered block), examples.

  • "partial" (found=False): the parent RST was located but the trailing component isn't defined in it. Extra keys:

    • parent the identifier whose RST was loaded.

    • available top-level definitions in that RST.

    • submodules sibling identifiers <parent>.<child> with their own RSTs, filtered to those whose last component contains every character of the missing tail.

    For a toctree landing page like bpy.types available is empty and submodules is the near-miss list; for a self-contained module like bpy.props it's the reverse.

  • "suggestions" (found=False): no direct match, but identifier appears as a component of other files. Extra key: suggestions (list of full identifiers).

  • "missing" (found=False): nothing matched.

examples (present on the exact and definition kinds) is a list of {path, content} entries referenced from this documentation.

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 ui_type.

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:

  • path: file path relative to the bundled docs.

  • text: the matching paragraph plus context paragraphs on either side.

  • breadcrumb: the section path containing the hit (Section > Sub-section > ...).

  • index: the hit's position in the result list.

  • score: a relevance score; higher is better.

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 (the, a, how, to, ...) are dropped, so natural phrasings like "how to bake" work as expected. Regular expressions are not supported.

Use context to pull more surrounding paragraphs into each hit (symmetric, default 0). Use index with the position of a previous hit (same query) to get that hit alone with its text widened to its enclosing section.

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:

  • path: file path relative to the bundled docs.

  • text: the matching paragraph plus context paragraphs on either side.

  • breadcrumb: the section path containing the hit (Section > Sub-section > ...).

  • index: the hit's position in the result list.

  • score: a relevance score; higher is better.

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 (the, a, how, to, ...) are dropped, so natural phrasings like "how to bake" work as expected. Regular expressions are not supported.

Use context to pull more surrounding paragraphs into each hit (symmetric, default 0). Use index with the position of a previous hit (same query) to get that hit alone with its text widened to its enclosing section.

Read-only; consults bundled RST files only.

Prompts

Interactive templates invoked by user choice

NameDescription

No prompts

Resources

Contextual data attached and managed by the client

NameDescription

No resources

TDQS

A3.6/5.0

Scored across 26 tools

Disambiguation4/5

Most tools have clearly distinct targets: manual docs vs API docs, window vs area screenshots, object name vs data-block name, and interactive vs CLI execution. A few pairs are close, especially search_manual_docs and search_api_docs, but the names and first-line descriptions make the intended choice reasonably clear.

Naming Consistency5/5

All tool names are snake_case and follow a predictable verb-first pattern: search_*, get_*, jump_to_*, execute_*, render_*. The get_blendfile_summary_* family and the repeated _for_cli suffix make parallel interactive/CLI tools easy to recognize.

Tool Count2/5

At 26 tools, the surface is too heavy, and much of the count comes from every get_blendfile_summary_* tool having a _for_cli twin that duplicates the same logical operation. Consolidating the CLI variants into a mode parameter would make the set much tighter.

Completeness4/5

The domain is clearly Blender inspection, navigation, rendering, and documentation, and those workflows are well covered: object summaries, blend-file health checks, viewport jumps, screenshots, rendering, and doc search. The main gap is a lack of direct high-level object or file mutation tools, but execute_blender_code provides an escape hatch for arbitrary bpy operations.

Maintenance

ActivityMaintained
ResponsivenessNo issues