Skip to main content
Glama
blender-control-mcp

blender-control-mcp

by parkspark

blender-control-mcp

blender-control-mcp 是一个独立的 STDIO MCP 服务器,用于在本地 Windows 的 background 模式下安全地控制 Blender。它不包含 LLM、自然语言解析或任意 Python/Shell 执行功能。只能使用服务器公开的 7 个结构化工具,并且主机和 Blender 内部都会分别验证输入。

环境要求

  • Windows

  • Python 3.12 或更高版本

  • 推荐使用 Blender 5.2 LTS

  • 默认 Blender 路径:C:\Users\park\Applications\blender-5.2.0-windows-x64\blender.exe

Related MCP server: blender-lab-mcp-client

安装

在项目根目录下使用 PowerShell 运行。

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

如果 Blender 位于其他位置,请设置环境变量。

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

可选环境变量:

  • BLENDER_EXECUTABLE:blender.exe 的路径

  • BLENDER_TIMEOUT_SECONDS:单个操作的超时时间,1~3600 秒,默认 180 秒

  • BLENDER_CONTROL_WORKDIR:只读检查操作的日志/计划存储根目录。默认值为 %TEMP%\blender-control-mcp

服务器运行

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

或者可以按以下方式运行。

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

由于是 STDIO 服务器,正常运行时不会向 stdout 输出交互式提示或常规日志。MCP 客户端会启动该进程并通过 JSON-RPC 进行通信。

连接 Codex

Codex 支持本地 STDIO MCP 服务器,可以在用户的 ~/.codex/config.toml 或受信任项目的 .codex/config.toml 中进行配置。以下路径是使用此仓库默认位置的示例。

[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"

配置完成后,重启 Codex,并通过 /mcp 或 codex mcp list 检查连接状态。在 UI 中,也可以选择 Settings → MCP servers → Add server → STDIO 并输入相同的 command/args。最新配置项请参考 OpenAI 的 Codex MCP 文档。

通过 CLI 添加的示例如下。

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

连接其他 MCP 客户端

这是 STDIO 服务器设置格式为 JSON 的客户端的一般示例。实际配置文件位置和键名请查阅客户端文档。

{
  "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"
      }
    }
  }
}

工具

所有路径输入均为字符串。输入资源仅允许 .glb、.blend、.fbx 格式。target 必须是 all 或包含大小写在内的完全匹配名称。如果找不到或存在歧义,服务器不会随意选择,而是返回 target_not_found/ambiguous_target 错误及候选列表。

scene.inspect

输入:

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

data.objects 中返回名称、类型、材质槽位、网格顶点/多边形数量、dimensions、location 和 Modifier 列表。

{
  "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_path":"C:\\assets\\chair.blend"}

返回示例:

{
  "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 是 01 范围的 RGB 或 RGBA,roughness、metallic、alpha 也均为 01。至少需要一个更改值。

{
  "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
}

目标为精确的材质名称,或仅有一个材质的对象名称。会同时生成修改后的 GLB、BLEND、FBX。如果一个对象有多个材质,则返回材质候选列表并要求明确选择。

asset.transform

每个向量由 3 个数字组成。scale 每个轴为 0.001~1000,且至少需要一个更改值。

{
  "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]
}

会同时生成修改后的 GLB、BLEND、FBX。

asset.add_modifier

Bevel 输入示例:

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

Decimate 输入示例:

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

Bevel 仅允许 width > 01000、segments 116(默认 0.1/3)。Decimate 仅允许 ratio 0.01~1(默认 0.5)。拒绝其他 Modifier 或混合参数。会同时生成修改后的三种格式。

asset.set_smooth_shading

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

为目标网格多边形设置平滑着色,并同时生成修改后的 GLB、BLEND、FBX。

asset.export

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

formats 必须是 glb、blend、fbx 中不重复的一个或多个,并且只生成请求的格式。

通用响应与产物

所有调用都会返回结构化响应。修改/导出工具会在 <output_directory>/<operation_id>/ 下生成产物,只读工具会在临时工作根目录下留下日志。

{
  "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": []
}

即使失败,也会尽可能保留 operation.json 和 blender.log,并按以下方式返回错误代码和候选列表。

{
  "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"]
  }]
}

测试

完整测试:

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

在没有 Blender 的环境中,只有一个实际的 Blender 集成测试会自动跳过,单元测试仍会通过。

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

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

集成测试会先创建一个小型 GLB,然后在实际 Blender 中验证场景检查、材质颜色/粗糙度/透明度修改、scale 修改、Bevel 添加以及 GLB/BLEND/FBX 生成。

安全设计

  • 没有接受任意 Blender Python、Python 字符串、自然语言计划或 Shell 命令的工具。

  • 桥接器是固定的 blender_mcp_bridge.py 一个文件,并通过 allow-list 重新验证 JSON operation type/字段/值。

  • 桥接器中不包含 eval、exec、subprocess 或外部命令执行。

  • Blender 以 --background --factory-startup --disable-autoexec 方式运行。

  • 使用 subprocess.run(..., shell=False) 和参数数组,并应用超时。

  • 在启动 Blender 之前验证输入文件的存在性和扩展名。

  • 输出仅写入随机 operation ID 子文件夹,不会覆盖现有产物和原始文件。

  • 桥接器会再次确认计划、结果和产物都位于同一工作文件夹边界内。

MVP 限制

  • 不支持图像纹理像素修改、Texture Paint 和烘焙。

  • 如果 Base Color 插槽连接了纹理/节点,即使更改默认值,最终外观也可能不会改变。在这种情况下,会在 blender.log 中留下警告。

  • 材质修改仅支持具有 Principled BSDF 的材质。

  • Modifier 仅添加 Bevel 和 Decimate,不进行应用(apply)。导出格式的 exporter 如何处理评估后的结果,遵循 Blender 各格式的行为。

  • Blender 文件本身的损坏、Blender importer/exporter 错误以及格式之间的功能差异会通过结构化错误和日志报告,但不会自动修复。

  • 每次工具调用都会启动一个独立的 Blender 进程,因此对于大型资源,启动和转换成本较高。

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.

NameRequiredDescriptionDefault
ratioNo
widthNo
targetYes
segmentsNo
input_pathYes
modifier_typeYes
output_directoryYes

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

NameRequiredDescriptionDefault
alphaNo
targetYes
metallicNo
roughnessNo
base_colorNo
input_pathYes
output_directoryYes

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

NameRequiredDescriptionDefault
formatsYes
input_pathYes
output_directoryYes

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

NameRequiredDescriptionDefault
targetYes
input_pathYes
output_directoryYes

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

NameRequiredDescriptionDefault
scaleNo
targetYes
locationNo
input_pathYes
output_directoryYes
rotation_degreesNo

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

NameRequiredDescriptionDefault
input_pathYes

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

NameRequiredDescriptionDefault
input_pathYes

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

Related MCP Connectors

Related MCP Servers

  • A
    license
    A
    quality
    D
    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
  • A
    license
    C
    quality
    B
    maintenance
    Enables secure, local automation of Blender through typed MCP tools for scene, modeling, material, animation, rendering, and file workflows via an authenticated loopback bridge.
    173
    MIT
  • A
    license
    Not graded
    quality
    C
    maintenance
    Enables MCP-compatible clients to control Blender for modeling, materials, animation, physics, rendering, scene inspection, documentation search, and asset/generation service integration. It exposes a stdio endpoint with many Blender operations for creating and editing 3D content.
    AGPL 3.0