Skip to main content
Glama
blender-control-mcp

blender-control-mcp

by parkspark

blender-control-mcp

blender-control-mcp는 Blender를 로컬 Windows의 background 모드에서 안전하게 제어하는 독립형 STDIO MCP 서버입니다. LLM, 자연어 해석, 임의 Python/셸 실행 기능은 포함하지 않습니다. 서버가 공개하는 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: 한 작업의 timeout, 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"
}

대상 메시 폴리곤에 smooth shading을 설정하고 수정된 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 통합 테스트 하나만 자동으로 skip되고 단위 테스트는 통과합니다.

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

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

통합 테스트는 작은 GLB를 만든 뒤 씬 검사, 재질 색상/거칠기/투명도 변경, scale 변경, Bevel 추가, GLB/BLEND/FBX 생성을 실제 Blender에서 검증합니다.

보안 설계

  • 임의 Blender Python, Python 문자열, 자연어 계획, 셸 명령을 받는 도구가 없습니다.

  • 브리지는 고정된 blender_mcp_bridge.py 하나이며 JSON operation type/필드/값을 allow-list로 재검증합니다.

  • 브리지에 eval, exec, subprocess, 외부 명령 실행이 없습니다.

  • Blender는 --background --factory-startup --disable-autoexec로 실행됩니다.

  • subprocess.run(..., shell=False)와 인자 배열을 사용하며 timeout을 적용합니다.

  • 입력 파일은 존재 여부와 확장자를 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.

Maintenance

ActivityStale
ResponsivenessNo recent community issues

Related MCP Connectors

Related MCP Servers

  • 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
  • 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