Skip to main content
Glama
parkspark

blender-control-mcp

by parkspark

blender-control-mcp

blender-control-mcp is a standalone STDIO MCP server that safely controls Blender in background mode on local Windows. It does not include LLM, natural language interpretation, or arbitrary Python/shell execution. Only the 7 structured tools exposed by the server can be used, and inputs are validated both on the host and inside Blender.

Requirements

  • Windows

  • Python 3.12 or later

  • Blender 5.2 LTS recommended

  • Default Blender path: C:\Users\park\Applications\blender-5.2.0-windows-x64\blender.exe

Related MCP server: blend-ai

Installation

Run in PowerShell from the project root.

py -3.12 -m venv .venv
.\.venv\Scripts\python.exe -m pip install --upgrade pip
.\.venv\Scripts\python.exe -m pip install -e ".[dev]"

If Blender is located elsewhere, set the environment variable.

$env:BLENDER_EXECUTABLE = "D:\Apps\Blender\blender.exe"

Optional environment variables:

  • BLENDER_EXECUTABLE: path to blender.exe

  • BLENDER_TIMEOUT_SECONDS: timeout for one operation, 1~3600 seconds, default 180 seconds

  • BLENDER_CONTROL_WORKDIR: root for storing logs/plans of read-only inspection operations. Default is %TEMP%\blender-control-mcp

Running the server

.\.venv\Scripts\blender-control-mcp.exe

Or you can run it as follows.

.\.venv\Scripts\python.exe -m blender_control_mcp.server

Since it is a STDIO server, it does not print an interactive prompt or normal logs to stdout during normal operation. The MCP client starts the process and exchanges JSON-RPC.

Connecting to Codex

Codex supports local STDIO MCP servers and can be configured in the user's ~/.codex/config.toml or in a trusted project's .codex/config.toml. The paths below are examples using the default location of this repository.

[mcp_servers.blender_control]
command = "C:/Users/park/Desktop/dev_tool/blender-control-mcp/.venv/Scripts/python.exe"
args = ["-m", "blender_control_mcp.server"]
cwd = "C:/Users/park/Desktop/dev_tool/blender-control-mcp"
startup_timeout_sec = 20
tool_timeout_sec = 300
default_tools_approval_mode = "writes"

[mcp_servers.blender_control.env]
BLENDER_EXECUTABLE = "C:/Users/park/Applications/blender-5.2.0-windows-x64/blender.exe"
BLENDER_TIMEOUT_SECONDS = "180"

After configuration, restart Codex and check the connection status with /mcp or codex mcp list. In the UI, you can also select Settings → MCP servers → Add server → STDIO and enter the same command/args. Refer to OpenAI's Codex MCP documentation for the latest configuration items.

An example of adding via CLI is as follows.

codex mcp add blender_control --env BLENDER_EXECUTABLE=C:\Users\park\Applications\blender-5.2.0-windows-x64\blender.exe -- C:\Users\park\Desktop\dev_tool\blender-control-mcp\.venv\Scripts\python.exe -m blender_control_mcp.server

Connecting to other MCP clients

A typical example for clients whose STDIO server configuration format is JSON. Check the client documentation for the actual configuration file location and key names.

{
  "mcpServers": {
    "blender-control": {
      "command": "C:\\Users\\park\\Desktop\\dev_tool\\blender-control-mcp\\.venv\\Scripts\\python.exe",
      "args": ["-m", "blender_control_mcp.server"],
      "env": {
        "BLENDER_EXECUTABLE": "C:\\Users\\park\\Applications\\blender-5.2.0-windows-x64\\blender.exe"
      }
    }
  }
}

Tools

All path inputs are strings. Input assets only accept .glb, .blend, and .fbx. target must be all or a name that matches exactly, including case. If not found or ambiguous, the server does not make an arbitrary selection and instead returns a target_not_found/ambiguous_target error along with a list of candidates.

scene.inspect

Input:

{"input_path":"C:\\assets\\chair.glb"}

data.objects returns name, type, material slots, mesh vertex/polygon counts, dimensions, location, and Modifier list.

{
  "success": true,
  "data": {
    "object_count": 1,
    "objects": [{
      "name": "Chair",
      "type": "MESH",
      "material_slots": ["Wood"],
      "vertex_count": 1200,
      "polygon_count": 800,
      "dimensions": [1.0, 1.1, 1.8],
      "location": [0.0, 0.0, 0.0],
      "modifiers": []
    }]
  }
}

material.list

Input:

{"input_path":"C:\\assets\\chair.blend"}

Example response:

{
  "success": true,
  "data": {
    "material_count": 1,
    "materials": [{
      "name": "Wood",
      "base_color": [0.4, 0.2, 0.1, 1.0],
      "roughness": 0.55,
      "metallic": 0.0,
      "alpha": 1.0,
      "base_color_texture_linked": true
    }]
  }
}

asset.apply_material

base_color is an RGB or RGBA in the 01 range, and roughness, metallic, and alpha are also 01. At least one changed value is required.

{
  "input_path":"C:\\assets\\chair.glb",
  "output_directory":"C:\\assets\\outputs",
  "target":"Wood",
  "base_color":[0.1,0.3,0.8,0.75],
  "roughness":0.25,
  "alpha":0.75
}

Target an exact material name or an object name that has only one material. Generates modified GLB, BLEND, and FBX files. If an object has multiple materials, material candidates are returned and an explicit selection is required.

asset.transform

Each vector is 3 numbers. scale is 0.001~1000 per axis, and at least one changed value is required.

{
  "input_path":"C:\\assets\\chair.glb",
  "output_directory":"C:\\assets\\outputs",
  "target":"Chair",
  "location":[0,0,1],
  "rotation_degrees":[0,0,90],
  "scale":[1.2,1.2,1.2]
}

Generates modified GLB, BLEND, and FBX files.

asset.add_modifier

Bevel input example:

{
  "input_path":"C:\\assets\\chair.blend",
  "output_directory":"C:\\assets\\outputs",
  "target":"Chair",
  "modifier_type":"bevel",
  "width":0.03,
  "segments":3
}

Decimate input example:

{
  "input_path":"C:\\assets\\chair.blend",
  "output_directory":"C:\\assets\\outputs",
  "target":"Chair",
  "modifier_type":"decimate",
  "ratio":0.5
}

Bevel only accepts width > 01000 and segments 116 (default 0.1/3). Decimate only accepts ratio 0.01~1 (default 0.5). Other Modifiers or mixed parameters are rejected. Generates all three modified formats.

asset.set_smooth_shading

{
  "input_path":"C:\\assets\\chair.fbx",
  "output_directory":"C:\\assets\\outputs",
  "target":"Chair"
}

Sets smooth shading on the target mesh polygons and generates modified GLB, BLEND, and FBX files.

asset.export

{
  "input_path":"C:\\assets\\chair.blend",
  "output_directory":"C:\\assets\\exports",
  "formats":["glb","blend","fbx"]
}

formats must contain one or more of glb, blend, fbx without duplicates, and only the requested formats are generated.

Common responses and artifacts

Every call returns a structured response. Modification/export tools create artifacts in <output_directory>/<operation_id>/, and read tools leave logs under the temporary work root.

{
  "success": true,
  "operation_id": "9bc12a7f57f24f8ba9d9af2f78de3041",
  "operation": "asset.export",
  "artifacts": [
    "C:\\assets\\exports\\9bc12a7f57f24f8ba9d9af2f78de3041\\chair.glb"
  ],
  "summary": "asset.export completed successfully",
  "data": {"formats":["glb"],"artifact_count":1},
  "operation_path": "...\\operation.json",
  "log_path": "...\\blender.log",
  "log_excerpt": "Blender 5.2.0 ...",
  "command": ["...\\blender.exe","--background","..."],
  "exit_code": 0,
  "errors": []
}

On failure, operation.json and blender.log are also written when possible, and an error code and candidates are returned as follows.

{
  "success": false,
  "summary": "object target 'Seat' was not found",
  "artifacts": [],
  "errors": [{
    "code": "target_not_found",
    "message": "object target 'Seat' was not found",
    "candidates": ["Chair", "Table"]
  }]
}

Testing

Full test suite:

.\.venv\Scripts\python.exe -m pytest -q

In environments without Blender, only the actual Blender integration test is automatically skipped, and unit tests pass.

# 빠른 단위 테스트만
.\.venv\Scripts\python.exe -m pytest -m "not integration" -q

# 실제 Blender 통합 테스트만
.\.venv\Scripts\python.exe -m pytest -m integration -q

The integration test creates a small GLB and then verifies scene inspection, material color/roughness/transparency changes, scale changes, Bevel addition, and GLB/BLEND/FBX generation in actual Blender.

Security design

  • There are no tools that accept arbitrary Blender Python, Python strings, natural language plans, or shell commands.

  • The bridge is a single fixed blender_mcp_bridge.py that re-validates JSON operation type/fields/values against an allow-list.

  • The bridge has no eval, exec, subprocess, or external command execution.

  • Blender runs with --background --factory-startup --disable-autoexec.

  • subprocess.run(..., shell=False) with an argument array is used, and a timeout is applied.

  • Input files are validated for existence and extension before Blender runs.

  • Output is written only to a random operation ID subfolder and never overwrites existing artifacts or originals.

  • The bridge re-checks that the plan, results, and artifacts all stay within the same operation folder boundary.

MVP limitations

  • Image texture pixel editing, Texture Paint, and baking are not supported.

  • For materials where a texture/node is connected to the Base Color socket, changing the default value may not change the final appearance. In this case, a warning is written to blender.log.

  • Material changes only support materials with Principled BSDF.

  • Modifiers only add Bevel and Decimate and do not apply them. How each export format's exporter handles the evaluated result follows Blender's per-format behavior.

  • Corruption of the Blender file itself, Blender importer/exporter errors, and cross-format feature differences are reported as structured errors and logs but are not automatically recovered.

  • Each tool call starts a separate Blender process, so startup and conversion costs are high for large assets.

Available Tools

7 tools
asset.add_modifierA

Add only a Bevel or Decimate modifier to exact target mesh objects.

Bevel accepts width >0..1000 and segments 1..16 (defaults 0.1 and 3). Decimate accepts ratio 0.01..1 (default 0.5). Parameters for the other modifier are rejected. Creates new GLB, BLEND, and FBX files without changing the input.

ParametersJSON Schema
NameRequiredDescriptionDefault
ratioNo
widthNo
targetYes
segmentsNo
input_pathYes
modifier_typeYes
output_directoryYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataNo
errorsNo
commandNo
successYes
summaryYes
log_pathNo
artifactsNo
exit_codeNo
operationYes
log_excerptNo
operation_idYes
operation_pathNo

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations are all neutral/false, so the description carries the disclosure burden. It adds valuable behavior: 'Creates new GLB, BLEND, and FBX files without changing the input' (non-destructive) and 'Parameters for the other modifier are rejected' plus per-type range constraints. This exceeds what annotations convey, though it omits any mention of auth or failure modes.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three compact sentences with zero filler. The primary purpose and restriction are front-loaded, and modifier-specific parameter constraints occupy the second paragraph. Every sentence adds distinct value.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With 7 parameters, 0% schema coverage, and no annotation safety info, the description covers the informative parts: parameter ranges, defaults, rejection semantics, and the non-destructive output behavior. The implicit parameters are low-risk, and the output schema exists, so nothing critical is missing for correct invocation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must compensate. It explains width (0..1000), segments (1..16, defaults 0.1/3), and ratio (0.01..1, default 0.5), and clarifies that cross-type parameters are rejected — real meaning beyond the bare schema. input_path, output_directory, and target are left implicit, but they are self-evident string parameters.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (Add), constrained resource (only Bevel or Decimate modifier), and precise scope (exact target mesh objects). The 'only' qualifier plus the enumerated modifier types sharply distinguishes it from the sibling set, none of which concern modifiers.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies when to use it — when a Bevel/Decimate modifier must be added to a mesh — but never names alternatives or gives explicit when-not-to-use guidance. Differentiation from siblings is implicit by domain (no sibling is modifier-related) rather than stated.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

asset.apply_materialA

Change only allow-listed Principled BSDF values and create new GLB, BLEND, and FBX files.

target is 'all', an exact material name, or an exact object name with exactly one material. base_color accepts normalized RGB or RGBA. Scalar values are 0..1. The input is never overwritten; outputs and logs go into a unique job subfolder.

ParametersJSON Schema
NameRequiredDescriptionDefault
alphaNo
targetYes
metallicNo
roughnessNo
base_colorNo
input_pathYes
output_directoryYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataNo
errorsNo
commandNo
successYes
summaryYes
log_pathNo
artifactsNo
exit_codeNo
operationYes
log_excerptNo
operation_idYes
operation_pathNo

TDQS

A3.7/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations are all false (no hints), so the description carries the full burden. It discloses that the input is never overwritten and outputs go to a unique job subfolder, adding non-destructive context. It also implies a constrained modification ('only allow-listed'). This goes beyond annotations and is useful for an agent deciding to invoke the tool.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two sentences with zero fluff. The core action is front-loaded, and critical constraints (target, formats, non-destructive behavior) are packed efficiently. Every clause adds value; no redundant information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool has 7 parameters, no schema descriptions, and no helpful annotations, the description needs to be thorough. It covers key aspects (target, base_color, scalars, non-destructive output) but leaves ambiguity about which Principled BSDF values are 'allow-listed' and what happens for unspecified parameters. It also doesn't mention output file naming. The output schema exists, so return values are covered, but the description is not complete enough for an agent to fully predict behavior.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0%, so the description must compensate. It explains target (all, material name, or object name), base_color (normalized RGB/RGBA), and scalar values (0..1). However, it does not elaborate on input_path, output_directory, or the individual scalar parameters (alpha, metallic, roughness) by name, nor clarify their optionality/default null. It covers some parameters but not all, so it's partial.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a clear action: 'Change only allow-listed Principled BSDF values and create new GLB, BLEND, and FBX files.' This specifies the verb, resource, and output format. It is distinct from sibling tools like material.list (listing) and asset.transform (geometry), though it doesn't explicitly name alternatives. The mention of 'only allow-listed' adds specificity.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides parameter-level guidance (target syntax, base_color format, scalar range) and implies the tool is for modifying materials, but it does not explicitly state when to use this tool versus alternatives or exclusions. No direct comparison to siblings is given. This is adequate but not explicit.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

asset.exportA

Export the complete asset to a non-empty unique list of GLB, BLEND, and/or FBX formats.

Outputs and logs are isolated in a new operation-ID subfolder. The input is never overwritten.

ParametersJSON Schema
NameRequiredDescriptionDefault
formatsYes
input_pathYes
output_directoryYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataNo
errorsNo
commandNo
successYes
summaryYes
log_pathNo
artifactsNo
exit_codeNo
operationYes
log_excerptNo
operation_idYes
operation_pathNo

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations indicate non-read-only and non-destructive, but the description adds valuable context: outputs and logs are isolated in an operation-ID subfolder, and the input is never overwritten. This goes beyond the annotations and clarifies side effects, though it does not mention any required permissions or disk write specifics.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two concise sentences with no redundant phrasing. The primary action is front-loaded, and the additional behavioral detail is presented efficiently. Every word contributes meaning.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the presence of an output schema (which explains return values) and the relatively simple 3-parameter interface, the description covers the essential behavior: what it does, output isolation, and non-overwriting. It could mention validation constraints (e.g., path existence) but these are not critical for invocation. Overall, it is sufficiently complete for an agent to call correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With 0% schema description coverage, the description must explain parameters. It clarifies that 'formats' must be a non-empty unique list of GLB, BLEND, and/or FBX, but does not elaborate on input_path or output_directory semantics beyond their names. The names are self-explanatory, so the description provides moderate value but does not fully compensate for the schema gap.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the verb 'Export' and the resource 'complete asset', specifying the target formats (GLB, BLEND, FBX). It distinguishes from siblings like scene.inspect or material.list, which have different purposes. The action is unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies this is the export tool among siblings, but it does not explicitly state when to use it versus alternatives or provide exclusions. However, the context is clear enough that an agent can infer it is for exporting assets, not for inspection or modification. A small gap: no mention of scenarios where export might not be appropriate.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

asset.set_smooth_shadingA

Enable smooth shading on 'all' mesh objects or one exact mesh object.

Creates new GLB, BLEND, and FBX files in a unique job subfolder; never overwrites input.

ParametersJSON Schema
NameRequiredDescriptionDefault
targetYes
input_pathYes
output_directoryYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataNo
errorsNo
commandNo
successYes
summaryYes
log_pathNo
artifactsNo
exit_codeNo
operationYes
log_excerptNo
operation_idYes
operation_pathNo

TDQS

A3.7/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description discloses concrete side effects beyond the annotations: it creates new GLB, BLEND, and FBX files in a unique job subfolder and never overwrites input. This adds safety-relevant behavioral context that the sparse annotations do not provide.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two compact sentences front-load the core action and scope, then add output and non-destructive behavior. There is no filler or redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a tool with three required string parameters and zero schema descriptions, the description gives a usable overview but leaves important details ambiguous, such as exact target syntax, accepted input formats, and precise output_directory behavior. The presence of an output schema reduces the need to describe return values.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With 0% schema description coverage, the description partially compensates by explaining that target accepts 'all' or an exact mesh object and that output goes to a unique job subfolder. However, it does not define how an exact object should be referenced or what input_path formats are accepted.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Description uses a specific verb ('Enable'), identifies the affected resource ('mesh objects'), and scopes the action to either 'all' or one exact object. This clearly distinguishes it from sibling tools like asset.export or material.list, and the output-file sentence does not obscure the primary operation.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance is given for when to choose this tool over alternatives such as asset.apply_material, asset.transform, or asset.export. The only implied context is the operation itself, with no when-not or exclusions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

asset.transformA

Set explicit location, Euler rotation in degrees, and/or scale on target objects.

Each supplied vector must have exactly three finite numbers. target is 'all' or an exact object name. Creates new GLB, BLEND, and FBX files without changing the input.

ParametersJSON Schema
NameRequiredDescriptionDefault
scaleNo
targetYes
locationNo
input_pathYes
output_directoryYes
rotation_degreesNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataNo
errorsNo
commandNo
successYes
summaryYes
log_pathNo
artifactsNo
exit_codeNo
operationYes
log_excerptNo
operation_idYes
operation_pathNo

TDQS

A3.9/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations indicate readOnlyHint=false and destructiveHint=false, but the description adds valuable transparency by explicitly stating 'Creates new GLB, BLEND, and FBX files without changing the input.' This clarifies the non-destructive write behavior and output format. However, it does not mention details like whether existing output files are overwritten or any permission requirements, though annotations lower the bar for this dimension.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three sentences, no wasted words. The primary action is front-loaded, followed by essential constraints and output behavior. Every sentence contributes value, and the length is appropriate for the tool's scope.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a tool with 6 parameters and no schema descriptions, this description covers the critical aspects: what it does, key input constraints, and output behavior. It lacks details on error handling or edge cases (e.g., what happens if target not found), but given the output schema exists and annotations are present, it is adequately complete for an agent to call it correctly in most scenarios.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With 0% schema description coverage, the description compensates well by clarifying that each supplied vector must be exactly three finite numbers (covering location, rotation_degrees, scale) and that target is 'all' or an exact object name. It also specifies rotation is in degrees. It does not describe input_path and output_directory, but these are self-explanatory from their names. The description adds meaningful semantics for the most ambiguous parameters.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a specific verb and resource: 'Set explicit location, Euler rotation in degrees, and/or scale on target objects.' This clearly distinguishes it from sibling tools like asset.apply_material or asset.add_modifier, which target different aspects. The mention of creating new GLB, BLEND, and FBX files further clarifies its purpose, though it doesn't explicitly name an alternative to compare against.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives some usage context by explaining that 'target' can be 'all' or an exact object name, and that it creates new files without modifying input. However, it does not explicitly state when to choose this tool over alternatives, nor does it mention any prerequisites or conditions that would make it the preferred choice. The guidance is implicit rather than explicit.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

material.listB
Read-onlyIdempotent

List materials and Principled BSDF Base Color, Roughness, Metallic, and Alpha values.

Also reports whether Base Color is node-linked, since a linked texture can visually override the socket's default value. The source file is never modified.

ParametersJSON Schema
NameRequiredDescriptionDefault
input_pathYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataNo
errorsNo
commandNo
successYes
summaryYes
log_pathNo
artifactsNo
exit_codeNo
operationYes
log_excerptNo
operation_idYes
operation_pathNo

TDQS

B3.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, and destructiveHint=false. The description adds useful context beyond that: it explains the node-linked behavior and explicitly states 'The source file is never modified,' reinforcing the read-only guarantee. It also clarifies why node-link status matters. This is above the baseline of simply relying on annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is concise, with the core purpose in the first sentence and supplementary behavior in the second. It does not waste words, and the critical info is front-loaded. Minor structural improvement could be separating the 'never modified' statement into its own sentence, but it is already clear.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The output schema is present, so return format is covered. However, the input parameter is completely unexplained, which is essential for correct invocation. The description also leaves ambiguity about whether it lists all materials or only those with Principled BSDF shaders. For a tool with one required parameter and no schema description, this is a significant completeness gap.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters1/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The single parameter input_path has 0% schema description coverage, and the description does not mention it at all. An agent has no clue what input_path should be (likely a file path, but the format or meaning is undefined). Since the description is the only place to compensate for the missing schema detail, this is a critical gap.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states that the tool lists materials and specific Principled BSDF properties (Base Color, Roughness, Metallic, Alpha). It also reports node-link status for Base Color. The verb 'list' is precise, and the resource and fields are named, making the purpose unambiguous and distinguishable from siblings like apply_material or export.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies it is a read-only inspection tool but does not explicitly state when to use it versus alternatives like scene.inspect or asset.apply_material. It provides context about the node-linked override but lacks clear 'use this when' or 'use this instead' guidance. The safer read-only nature is inferred but not stated as a selection criterion.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

scene.inspectA
Read-onlyIdempotent

Open one GLB, FBX, or BLEND asset in headless Blender and return its scene structure.

Returns object names/types, material slots, mesh vertex/polygon counts, dimensions, locations, and modifier names/types. The source file is never modified.

ParametersJSON Schema
NameRequiredDescriptionDefault
input_pathYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataNo
errorsNo
commandNo
successYes
summaryYes
log_pathNo
artifactsNo
exit_codeNo
operationYes
log_excerptNo
operation_idYes
operation_pathNo

TDQS

A4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, destructiveHint=false, and idempotentHint=true. The description adds the 'headless Blender' execution context and explicitly states the source file is never modified, which reinforces but also adds context beyond annotations. No contradiction with annotations, but the extra behavioral disclosure is modest.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two concise sentences: the first states the primary action, the second enumerates what is returned. No filler, every sentence earns its place, and the most critical info (purpose) is front-loaded. An excellent example of efficient description.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists (not shown) so the return format is presumably covered. The description addresses the input format, the operation's purpose, and the safety guarantee (never modified). For a single-parameter inspection tool with annotations covering safety, this is complete. Minor missing details like error behavior or unsupported formats do not significantly hinder correct usage.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema has a single 'input_path' string with no description (coverage 0%). The description compensates by specifying that the path must point to a GLB, FBX, or BLEND asset, which adds format constraint and clarifies the purpose of the parameter. This is meaningful beyond the schema's bare type declaration.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb ('Open') and resource ('GLB, FBX, or BLEND asset'), and clearly defines the return value: scene structure with object names/types, material slots, mesh counts, etc. This distinguishes it from the sibling mutation tools (apply_material, transform, add_modifier, export) which all perform actions; only this tool inspects the scene structure.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage for inspecting scene structure, but does not explicitly name alternatives or state when not to use it. Sibling tools are clearly mutation/export oriented, so an agent can infer when to use this tool, but no explicit routing is given. This is implied usage without exclusions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 7 tool updatesv0.1.0
    • First observedasset.add_modifier
    • First observedasset.apply_material
    • First observedasset.export
    • First observedasset.set_smooth_shading
    • First observedasset.transform
    • First observedmaterial.list
    • First observedscene.inspect

TDQS

A3.9/5.0

Scored across 7 tools

Disambiguation5/5

Each tool addresses a distinct resource and action. Read-only tools (scene.inspect, material.list) are clearly separated from write operations (apply_material, transform, add_modifier, set_smooth_shading, export), and no two tools overlap in purpose. An agent could select the correct tool without ambiguity.

Naming Consistency4/5

Tools follow a consistent <domain>.<action> pattern using dots (e.g., scene.inspect, asset.transform), but action verbs vary in style (e.g., 'apply_material' vs 'transform' vs 'export'). This is a minor inconsistency, but the pattern is predictable and readable.

Tool Count5/5

With 7 tools, the server is well-scoped for asset inspection, material editing, transformations, modifiers, shading, and export. Each tool serves a clear purpose without redundancy or bloat, fitting comfortably in the ideal 3-15 range.

Completeness3/5

The surface covers common asset editing workflows (inspect, modify, export), but lacks removal operations such as deleting objects, removing modifiers, or changing material assignments. These gaps could cause dead ends in more complex pipelines, though core workflows are functional.

Maintenance

ActivityMaintained
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    B
    quality
    B
    maintenance
    An MCP server that enables AI assistants to control Blender through 108 specialized tools for 3D modeling, animation, and rendering. It provides a secure, thread-safe interface to execute validated operations in Blender using natural language commands.
    100
    138
    AGPL 3.0
  • F
    license
    A
    quality
    C
    maintenance
    A headless-first Model Context Protocol server for safe, deterministic Blender automation, exposing typed tools to inspect scenes and render previews without arbitrary command execution.
    3
    -
  • A
    license
    A
    quality
    C
    maintenance
    MCP server for Blender that connects to the official Blender Lab add-on, exposing 27 tools for scene manipulation, object editing, materials, rendering, and Python execution through the add-on's actual wire protocol.
    27
    1
    MIT