Skip to main content
Glama
suradath
by suradath

Hermes Blender MCP — ให้ Hermes สั่งงาน Blender 5.2 ได้

MCP Server (stdio) ที่เชื่อม Hermes Agent เข้ากับ Blender 5.2 LTS ผ่าน bpy ให้ AI อ่านฉาก สร้าง/ขยับวัตถุ ใส่สี และรันสคริปต์ได้จริงจากในแชท

🎯 สถานะ: ทดสอบอัตโนมัติผ่าน 756 ข้อ (10 ชุด) + ยืนยันกับ Hermes ตัวจริงแล้ว (hermes mcp add → เชื่อมต่อได้ เห็นทั้ง 12 เครื่องมือ) ⏳ ยังไม่ได้ทดสอบกับ Blender จริง — เครื่องที่พัฒนาไม่มี Blender ติดตั้ง (ดูหัวข้อ ทดสอบอะไรแล้ว / ยังไม่ได้ทดสอบอะไร)

📖 ติดตั้ง: คู่มือภาษาไทย (INSTALL.th.md) · English (INSTALL.md) — ครอบคลุม Windows 11, Linux และ macOS 🤝 ร่วมพัฒนา: CONTRIBUTING.md · 📋 ประวัติเวอร์ชัน: CHANGELOG.md ⚖️ สัญญาอนุญาต MIT (เปลี่ยนได้ตามต้องการ)

บ้านทรงไทยโพลิกอนที่สร้างจากเรขาคณิตของโปรเจกต์

🏠 บ้านทรงไทยโพลิกอน — 88 ชิ้น สร้างจากเรขาคณิตจริง (ไม่ได้ปั้นมือ · ไม่ได้ใช้ภาพจาก AI) เสายกพื้น · หลังคาซ้อนชั้นชัน 40.6° · หน้าบัน · ป้านลม · ช่อฟ้าโค้ง · ระเบียง · บันได — ดูในคู่มือ §10


1. ภาพรวมสถาปัตยกรรม (อ่านก่อนใช้งาน)

   Hermes Agent
        │  stdio (JSON-RPC)
        ▼
  blender_mcp_server.py          ← Python ของ "เครื่อง" · ใช้ mcp SDK ทางการ
        │  ├─ เปิด Blender ให้เอง (โหมด -b)
        │  └─ ซ็อกเก็ต 127.0.0.1:<พอร์ตสุ่ม> + token
        ▼
  blender_bridge.py              ← รัน "อยู่ข้างใน Blender" · stdlib ล้วน
        │  เรียก bpy บน MAIN THREAD เท่านั้น
        ▼
   Blender 5.2  (.blend ของคุณ)

ทำไมต้องแยกเป็นสองโปรเซส

เหตุผลที่ 1 — stdout ของ Blender สกปรก MCP สื่อสารผ่าน stdio แต่ blender -b พ่นข้อความต้อนรับ/บันทึกของตัวเองลง stdout ตั้งแต่ก่อนสคริปต์จะได้รัน ถ้าให้ MCP server รันใน Blender เอง ไคลเอนต์จะอ่านเจอขยะ ก่อน JSON แรก → พังทันที (ไฟล์นี้จึงยืนยันได้ว่า stdout ว่าง 0 ไบต์ ตอนสตาร์ต) สะพานจึงใช้ ซ็อกเก็ต และปล่อยให้ stdout ของ Blender เป็นแค่บันทึก

เหตุผลที่ 2 — bpy ไม่ thread-safe เอกสารและรายงานบั๊กของชุมชนยืนยันตรงกัน: เรียก bpy จาก thread อื่นได้ hard crash ไม่ใช่ exception และ bpy.app.timers ไม่ทำงานในโหมด blender -b ด้วย (มี PR จริงที่แก้เรื่องนี้ — เซิร์ฟเวอร์ที่พึ่ง timer จะค้างทุกคำสั่งในโหมด headless)

การออกแบบจึงแยกเป็นสองโหมดตามที่ bpy บังคับ:

โหมด

ใช้เมื่อ

กลไก

ไฟล์

main

blender -b (ไม่มีหน้าต่าง) — ค่าปริยาย

วนรับงานบน main thread แบบบล็อก

ไม่ต้องใช้ add-on

timer

Blender ที่เปิดหน้าต่างอยู่

รับงานใน thread แยก → ส่งให้ main thread ผ่าน bpy.app.timers

blender_addon/

เหตุผลที่ 3 — ไม่ต้อง pip install อะไรลง Blender เลย blender_bridge.py ใช้แค่ stdlib ⇒ บน Windows ไม่ต้องสิทธิ์ผู้ดูแลระบบ และไม่ต้องกังวลว่า wheel ที่คอมไพล์แล้ว (เช่น pydantic-core) จะตรงรุ่น Python ของ Blender หรือไม่ (Blender พา Python ของตัวเองมา)


Related MCP server: rogue-blender-mcp

2. สิ่งที่ต้องมี

ต้องการ

Blender

5.2 LTS (ออก 14 ก.ค. 2026 · ซ่อมล่าสุด 5.2.2) — ใช้ได้ตั้งแต่ 4.0 ขึ้นไป

Python

3.10 ขึ้นไป (ทดสอบกับ 3.12 / 3.14) — เป็น Python ของเครื่อง ไม่ใช่ของ Blender

แพ็กเกจ

mcp>=2.0,<3 (ทดสอบกับ 2.3.0)

Hermes Agent

มี MCP client ในตัวอยู่แล้ว — แค่ใส่ค่าใน ~/.hermes/config.yaml

⚠️ mcp 2.x เปลี่ยนชื่อ FastMCP → MCPServer โค้ดนี้ใช้ API ของ 2.x ถ้าติดตั้ง mcp<2 จะใช้ไม่ได้ (และโค้ดที่เขียนตามตัวอย่างเก่า ๆ บนอินเทอร์เน็ตจะพัง)


3. ติดตั้ง

🪟 Windows 11 (แนะนำ)

:: 1) วางโฟลเดอร์โปรเจกต์ไว้ที่ไหนก็ได้ เช่น C:\Hermes-blender-mcp
::    แล้วดับเบิลคลิก (หรือรันใน cmd):
C:\Hermes-blender-mcp\install-windows.bat

สคริปต์จะทำให้ทั้งหมด: หา Python → สร้าง .venv → ติดตั้ง mcp → ตรวจว่าเจอ Blender ไหม → พิมพ์ค่า config ให้คัดลอก

ถ้าขั้นสุดท้ายบอกว่า "หา Blender ไม่เจอ" ให้ระบุเอง:

C:\Hermes-blender-mcp\.venv\Scripts\python.exe C:\Hermes-blender-mcp\blender_mcp_server.py ^
  --check --blender "C:\Program Files\Blender Foundation\Blender 5.2\blender.exe"

🐧 Linux / 🍎 macOS

cd /path/to/Hermes-blender-mcp
python3 -m venv .venv
./.venv/bin/pip install -r requirements.txt
./.venv/bin/python blender_mcp_server.py --check

--check ต้องขึ้นแบบนี้:

Blender: /usr/bin/blender (เจอใน PATH)
สคริปต์สะพาน: /path/to/Hermes-blender-mcp/blender_bridge.py ✅

✅ ทดสอบครั้งแรก (แนะนำอย่างยิ่ง)

run-hermes-blender-mcp.bat --selftest      :: Windows
./run-hermes-blender-mcp.sh --selftest     :: Linux/macOS

คำสั่งนี้จะเปิด Blender จริง แล้วไล่เรียกทุกเครื่องมือให้ดูผลทีละตัว (สร้างลูกบาศก์ → ขยับ → ใส่สี → รันสคริปต์ → ลบ) ถ้าผ่านหมด = พร้อมใช้

--selftest จะเปิด Blender ขึ้นมาจริงและปิดให้เองเมื่อจบ — ไม่แตะไฟล์ .blend ของคุณ (ใช้ --factory-startup = ฉากเริ่มต้น ไม่โหลดไฟล์เดิม)


4. ต่อเข้ากับ Hermes Agent

⚠️ ตรวจก่อน (กับดักที่พบบ่อยที่สุด)

Hermes ต้องมีแพ็กเกจ mcp ใน Python ของตัวเอง ไม่งั้นมันจะ ปิดความสามารถ MCP เงียบ ๆ — ไม่มี error ให้เห็น แค่ไม่มีเครื่องมือขึ้นมา

python3 -c "import mcp; print('ok')"     # ถ้าล้มเหลว ต้องติดตั้ง
~/.hermes/bin/uv pip install --python "$(which python3)" mcp

วิธีที่ 1 (แนะนำ) — คำสั่งเดียวจบ

Hermes มีตัวจัดการ MCP ในตัว ใช้ hermes mcp add แล้วมันจะเชื่อมต่อและ ตรวจหาเครื่องมือให้เลย:

# Windows 11 (PowerShell) — ⚠️ --args ต้องอยู่ "ท้ายสุด" เสมอ
hermes mcp add blender `
  --command "C:\Hermes-blender-mcp\.venv\Scripts\python.exe" `
  --connect-timeout 120 `
  --args C:\Hermes-blender-mcp\blender_mcp_server.py
# Linux / macOS
hermes mcp add blender \
  --command "/path/to/Hermes-blender-mcp/.venv/bin/python" \
  --connect-timeout 120 \
  --args /path/to/Hermes-blender-mcp/blender_mcp_server.py

ผลลัพธ์ที่ได้จริง (คัดจากเครื่องที่ทดสอบ):

  Connecting to 'blender'...

  ✓ Connected! Found 8 tool(s) from 'blender':

    get_scene_hierarchy                      Read the active scene: collection tree, ...
    add_primitive_mesh                       Add a primitive mesh to the scene. ...
    modify_object_transform                  Move, rotate or resize an existing object ...
    get_object_details                       Full details for one object: world matrix, ...
    delete_object                            Delete an object by name. ...
    set_object_material                      Give a mesh object a simple Principled BSDF ...
    save_blend_file                          Save the current .blend. ...
    execute_blender_script                   Run raw bpy Python inside Blender ...

  Enable all 8 tools? [Y/n/select]:
  ✓ Saved 'blender' to ~/.hermes/config.yaml (8/8 tools enabled)
  Start a new session to use these tools, or run /reload-mcp to load them into open sessions.

ตรวจทีหลังด้วย:

hermes mcp list          # ดูรายการ + สถานะ
hermes mcp test blender  # → ✓ Connected (1950ms) · ✓ Tools discovered: 8
hermes mcp remove blender

⚠️ บทเรียนจริง: --args ต้องอยู่ท้ายสุด

รอบแรกที่ทดสอบ ใส่ --connect-timeout ต่อจาก --args → มันถูกกลืนเป็น อาร์กิวเมนต์ของเซิร์ฟเวอร์ → เซิร์ฟเวอร์ออกทันที → Hermes รายงานแค่ ✗ Failed to connect: Connection closed ซึ่งชี้ทางผิดไปไกล วาง --connect-timeout ไว้ก่อน --args

เปิดไฟล์ .blend ของคุณตั้งแต่ต้น

hermes mcp add blender --command "..." --connect-timeout 120 `
  --args C:\Hermes-blender-mcp\blender_mcp_server.py --blend-file "C:\งาน\บ้าน.blend"

วิธีที่ 2 — แก้ ~/.hermes/config.yaml เอง

รูปแบบนี้คือสิ่งที่ Hermes เขียนจริง (คัดจากไฟล์หลังรัน hermes mcp add):

mcp_servers:
  blender:
    command: C:\Hermes-blender-mcp\.venv\Scripts\python.exe
    args:
      - C:\Hermes-blender-mcp\blender_mcp_server.py
    connect_timeout: 120.0
    enabled: true
    timeout: 300            # เพิ่มเอง — งาน 3D ใช้เวลาได้ (ค่าปริยาย 120)

คีย์

ค่าที่แนะนำ

เพราะ

connect_timeout

120

Blender ใช้เวลาหลายวินาทีเปิดตัว

timeout

300

สคริปต์/เรนเดอร์ใช้เวลาได้

env

ปกติไม่ต้องใส่

Hermes กรอง env — โค้ดมีค่าเริ่มต้นมาตรฐานเป็นทางถอยแล้ว

📄 รายละเอียดเต็ม (รวมเรื่องตัวแปรสภาพแวดล้อมที่ Hermes กรอง, รูปแบบ JSON mcpServers สำหรับไคลเอนต์อื่น, และตารางแก้ปัญหา) อยู่ใน docs/02-Hermes-config.md

🅱️ โหมดมีหน้าต่าง (attach) — เห็นภาพขณะ AI ทำ

ติดตั้ง add-on (ดู docs/01-ติดตั้ง-Windows11.md หัวข้อสุดท้าย) → กด "เริ่มสะพาน" ในแผง View3D > Sidebar (N) > Blender MCP → แล้วสั่ง Hermes ให้ใช้ --attach:

hermes mcp add blender --command "..." --connect-timeout 60 \
  --args blender_mcp_server.py --attach 127.0.0.1:9876 --token "วาง_TOKEN_จากแผง"

✔️ เรียกใช้จริง

เริ่มเซสชันใหม่ (หรือ /reload-mcp) แล้วเครื่องมือจะขึ้นชื่อว่า mcp_blender_get_scene_hierarchy, mcp_blender_add_primitive_mesh, … (8 ตัว)

ลองสั่งเป็นภาษาธรรมชาติ:

"ใช้ Blender สร้างลูกบาศก์ที่ (0,0,3) ย่อครึ่งหนึ่ง ใส่สีแดง แล้วบอกว่าฉากมีอะไรบ้าง"


5. เครื่องมือทั้งหมด (12) + ทรัพยากร (2)

เครื่องมือ

เครื่องมือ

ทำอะไร

พารามิเตอร์สำคัญ

get_scene_hierarchy

อ่านฉากทั้งหมด: คอลเลกชัน + วัตถุ + transform + จำนวนจุดยอด

include_hidden, name_filter, max_objects

add_primitive_mesh

สร้างรูปทรงพื้นฐาน

primitive (cube/sphere/cylinder/plane/cone/torus/monkey/circle/grid/ico_sphere), name, location, rotation(องศา), scale, radius, size, collection

modify_object_transform

ขยับ/หมุน/ย่อขยายวัตถุตามชื่อ

name, location, rotation(องศา), scale, relative, rotation_mode

execute_blender_script

รันโค้ด bpy ดิบ (มีด่านตรวจ)

code, allow_unsafe, return_variables

get_object_details

รายละเอียดวัตถุชิ้นเดียว (matrix_world, modifiers, materials, custom props)

name

delete_object

ลบวัตถุ (มีสลักกันลบพลาด)

name, confirm

set_object_material

ใส่วัสดุ Principled BSDF สีง่าย ๆ

name, color, metallic, roughness, alpha

save_blend_file

บันทึกไฟล์ .blend

filepath

get_viewport_screenshot

เรนเดอร์ภาพให้ AI "เห็น" ฉาก — คืนเป็นรูปจริง + ข้อมูลกำกับ

filepath, width, height, mode (auto/render/viewport), camera

| search_polyhaven | ค้นคลัง CC0 ของฟรี (HDRI/เท็กซ์เจอร์/โมเดล) — ไม่ต้องใช้คีย์ | query, asset_type (hdris/textures/models), categories, limit | | get_polyhaven_info | ดูว่าของชิ้นนั้นมีรูปแบบ/ความละเอียดอะไร ก่อนโหลด | asset_id | | download_polyhaven_asset | โหลดของ + ไฟล์เท็กซ์เจอร์ที่ต้องใช้ แล้วใส่เข้าฉากให้เลย | asset_id, kind, resolution, apply, target_dir, max_mb, texture_map |

🆓 คลังของฟรีที่ไม่ต้องใช้คีย์ — Poly Haven เป็น CC0 (public domain) ใช้เชิงพาณิชย์ได้ ไม่ต้องอ้างอิงที่มา ไม่ต้องสมัคร ไม่ต้องมี API key · มีทั้ง HDRI สำหรับให้แสง แผนที่พื้นผิว PBR และโมเดลสำเร็จรูป (เก้าอี้/ถัง/ต้นไม้…) · download_… ดึง ไฟล์เท็กซ์เจอร์ที่ต้องใช้คู่กัน มาด้วย และวางตามพาธสัมพัทธ์เดิม เพื่อให้โมเดลอ้างถึงได้ · ไฟล์ถูกแคชไว้ เรียกซ้ำไม่โหลดใหม่ · เลือก resolution ต่ำ (1k/2k) ก่อนเสมอ — 4k ขึ้นไปไฟล์ละหลายร้อย MB (มี max_mb กันพลาด) · ทดสอบกับ API จริงในชุดทดสอบ (ข้ามเองถ้าเครือข่ายไม่พร้อม — ซื่อสัตย์กว่าแอบผ่าน)

🧍 สร้างตัวละคร 3D จากรูปที่แนบมาได้ไหม? ได้ — แต่ต้องเข้าใจขอบเขต: Hermes ดูรูป → ประเมินสัดส่วน/สี → สร้าง blockout ลงฉาก → ถ่ายภาพกลับมาดู → ปรับวนซ้ำ (ดู คู่มือ · ตัวอย่างที่รันได้) ส่วน ปั้นละเอียดจากรูปอัตโนมัติ (image-to-3D) ไม่มีในตัว เพราะต้องใช้บริการภายนอกที่มีคีย์ — โปรเจกต์นี้เลือกไม่ผูกกับคีย์ เอกสารจึงบอกตรง ๆ ว่าอะไรทำได้/ทำไม่ได้

เทียบรูปต้นแบบกับโมเดลที่สร้างจากเรขาคณิตเอง

ซ้าย = รูปต้นแบบ · กลาง/ขวา = โมเดล 27 ชิ้นที่สร้างจากเรขาคณิตของโปรเจกต์ (เรนเดอร์ด้วย tools/render_flat.py · ยังไม่ได้ใช้ Blender) — รายละเอียดอยู่ใน คู่มือ §7–§8

🏠 ตัวอย่างที่ 2 — สถาปัตยกรรม: tools/thai_house_builder.py สร้าง บ้านทรงไทยโพลิกอน 88 ชิ้น (เสายกพื้น · หลังคาช้อน 2 ชั้นชัน 40.6° · หน้าบัน · ป้านลม · ช่อฟ้าโค้ง · ระเบียง · บันได) ทุกชิ้นปิดสนิท — ดู คู่มือ §10 · ตัวอย่างเพิ่มเติม: 🌳 ต้นไม้ tree_builder.py · 🐕 สุนัข dog_builder.py — ดู คู่มือ §11 · 🏘️ ภาพหมู่ทั้งฉาก scene_builder.py — คู่มือ §12

🖼️ AI เห็นภาพได้ — get_viewport_screenshot ส่งกลับเป็น content block ชนิด image ไม่ใช่แค่ชื่อไฟล์ พร้อมบล็อกข้อความบอกโหมด/กล้อง/ความละเอียด/เวลา โหมด render ใช้ได้ทุกที่รวมถึง -b (เรนเดอร์จากกล้อง) · โหมด viewport ต้องมีหน้าต่าง Blender ค่าตั้งการเรนเดอร์ของผู้ใช้ถูกคืนกลับเสมอหลังถ่ายภาพ · ไฟล์ปริยายอยู่ในโฟลเดอร์ชั่วคราว

ทรัพยากร

URI

เนื้อหา

blender://file/metadata

ที่อยู่ไฟล์ · render engine · เฟรมปัจจุบัน/ช่วง · ความละเอียด · จำนวนของในไฟล์

blender://scene/hierarchy

ลำดับชั้นของฉากทั้งก้อน (JSON)

หน่วยหมุนเป็น "องศา" ในทุกเครื่องมือ (AI ถนัดองศา) แต่ bpy เก็บเป็นเรเดียน — โค้ดแปลงให้แล้ว และเทสต์ล็อกไว้ว่าต้องแปลงจริง


6. ⚠️ ความปลอดภัยของ execute_blender_script — อ่านตรงนี้

มันคือ "ราวกันตก" ไม่ใช่ "กรงขัง" — พูดตรง ๆ ว่า:

✅ ด่านที่กันได้จริง (ตรวจก่อนรันด้วย AST ไม่ใช่จับสตริง):

กันอะไร

ตัวอย่างที่ถูกปฏิเสธ

import โมดูลอันตราย

import os, subprocess, sys, socket, ctypes, importlib, pickle, shutil, pathlib …

ฟังก์ชันในตัวอันตราย

open(), eval(), exec(), compile(), __import__, getattr/setattr, globals/locals …

ทางหลบหนีคลาสสิก

(1).__class__.__bases__[0].__subclasses__() (ห้าม attribute __xx__)

operator ที่ทำลายงาน

bpy.ops.wm.quit_blender (ปิด Blender ทิ้งงาน), wm.read_homefile, wm.read_factory_settings

⚠️ สิ่งที่ "กันไม่ได้" — และเราไม่แอบอ้างว่ากันได้: นี่ไม่ใช่ sandbox ระดับ OS กระบวนการนี้รันด้วยสิทธิ์เดียวกับ Blender ของคุณ โค้ดที่ผ่านด่านยังแก้ฉากทั้งหมดได้ ลบวัตถุได้ บันทึกทับไฟล์ได้ ถ้าไม่ไว้ใจผู้สั่ง อย่าเปิด allow_unsafe=true และ บันทึกไฟล์ก่อน ให้เป็นนิสัย

การออกแบบที่ลดความเสี่ยง: delete_object มีสลัก confirm=false เป็นค่าปริยาย · save_blend_file ไม่บันทึกทับเองถ้าไม่ได้สั่ง · และทุกข้อความ error เป็นภาษาไทยที่ AI อ่านรู้เรื่อง


7. แก้ปัญหา

อาการ

สาเหตุ / ทางแก้

หา Blender ไม่เจอ

ใช้ --blender "พาธเต็ม" หรือตั้ง BLENDER_EXE (Hermes กรอง env ออก — ส่งผ่าน env: ใน config ด้วยก็ได้)

Blender ไม่พร้อมภายใน 90 วินาที

เปิดเองเพื่อดูข้อผิดพลาดจริง: blender -b --python blender_bridge.py -- --port 0 --selftest แล้วดูบันทึกท้าย ๆ ที่เซิร์ฟเวอร์แนบมาให้

Hermes ขึ้น "Failed to connect to MCP server 'blender'"

connect_timeout สั้นเกินไป — ตั้งเป็น 120 (Blender ใช้เวลาหลายวินาที)

เครื่องมือขึ้นแต่เรียกแล้วเงียบ

ดูบันทึกที่ /tmp/Hermes-blender-mcp/server-*.log (Windows: %TEMP%\Hermes-blender-mcp\)

ต่อสะพานไม่สำเร็จ

โหมด attach: ตรวจว่าใน Blender กด "เริ่มสะพาน" แล้ว และ token ตรงกัน

คำสั่งถูกปฏิเสธด้วยข้อความ "ฝ่าด่านความปลอดภัย"

เป็นไปตามการออกแบบ — ถ้าตั้งใจจริงส่ง allow_unsafe=true

งานค้างนาน (เช่น ลูปยาว/เรนเดอร์)

หมดเวลาตาม timeout — Blender ไม่ถูกสั่งหยุดกลางคัน (bpy หยุดกลางคันไม่ได้) จะทำงานต่อจนจบ

รันแล้วไม่มีอะไรเกิดขึ้นในหน้าต่าง cmd

ปกติ — มันรอคำสั่ง JSON-RPC ทาง stdin ให้ Hermes เรียก


8. ทดสอบ

bash tests/run_all.sh

ชุดทดสอบ

ตรวจอะไร

จำนวน

test_addon_structure.py

โครง add-on + ตัวสร้าง zip + การเปิดสะพานอัตโนมัติ

56

test_docs_links.py

ลิงก์/anchor ทุกไฟล์ · เอกสาร 2 ภาษาตรงกัน · ไม่มีอักษรต่างชาติหลุด · การเทียบโครงการอื่น · รูปประกอบมีจริงและเป็น PNG ที่สมบูรณ์

143

test_example_character.py

ตัวอย่างสร้างตัวละคร: ผ่านด่านความปลอดภัย · รันจริงในฉากจำลอง · สัดส่วนที่ให้ไปถูกใช้จริง · ตัวละครจากรูปจริง (T-pose) เทียบกับที่วัดจากพิกเซล · เอกสารซื่อสัตย์

68

test_scene.py

ฉากภาพหมู่: เมชยังสมบูรณ์หลังย้าย/หมุน/ย่อ · ทุกชิ้นยืนบนพื้น · ไม่มีของทับกัน (AABB ทุกคู่) · อยู่ในขอบแผ่นดิน · แผ่นดินแผ่นเดียว

35

test_tree_dog.py

ต้นไม้ + สุนัข: เสา/ขาแตะพื้น · พุ่มซ้อนลำต้น · กิ่งยื่นพ้น · หัว-ปาก-จมูกเรียงถูก · ตาพ้นความกว้างปาก · สมมาตร

47

test_thai_house.py

บ้านทรงไทย: ทุกชิ้นปิดสนิท · ระดับชั้นต่อกันจริง (เสา→พื้น→ฝา→หลังคา→สัน) · ช่อฟ้านั่งบนสันและโค้งจริง · หลังคาชัน ≥ 35° · บันไดไล่ถึงพื้น · ราวไม่ทับบันได (AABB)

65

test_mesh_lib.py

เมชละเอียด: ทุกชิ้นปิดสนิท/ออยเลอร์ = 2/ปริมาตรตรงสูตร · สัดส่วนตรงกับที่วัดจากรูป · ขา-เท้าไม่ทับกัน · มือไม่ใหญ่กว่าแขน · .obj อ่านได้ · สคริปต์ฝั่ง Blender ผ่านด่าน

67

test_server_utils.py

ค้นหา Blender (รวม Hermes กรอง env) · CLI · อดทนต่ออาร์กิวเมนต์แปลก · ติดตั้ง add-on ให้เอง · ตรวจโปรโตคอล

58

test_bridge_logic.py

ตรรกะทุกเครื่องมือ + ด่านความปลอดภัย + การถ่ายภาพ + คลัง Poly Haven (จำลองเครือข่าย) + ยิง API จริง

161

test_mcp_e2e.py

ครบวงจรจริง: MCP client ทางการ ⇄ เซิร์ฟเวอร์ ⇄ สะพาน (รวมรูปส่งถึงไคลเอนต์จริง)

56

รวม 756 ข้อ ทดสอบด้วยของจริงทุกชั้น ยกเว้นตัว Blender (ใช้ tests/fake_bpy.py)

ทดสอบอะไรแล้ว / ยังไม่ได้ทดสอบอะไร

สถานะ

⭐ Hermes ตัวจริงเชื่อมต่อได้ — hermes mcp add → ✓ Connected! Found 12 tool(s) · hermes mcp test → ✓ Connected (1950ms) · ✓ Tools discovered: 12

✅ ยืนยันแล้ว (ด้วยสะพานจำลอง เพราะเครื่องนี้ไม่มี Blender)

สื่อสาร MCP (handshake, tool list, สคีมา, เรียกใช้, resource, error)

✅ ทดสอบด้วย MCP client ทางการ (56 ข้อ)

ลิงก์ในเอกสารไม่เสีย (ปัญหาที่พบบ่อยสุดของรีโปสาธารณะ)

✅ ตรวจทุก push — 56 ลิงก์ใน 8 ไฟล์

โปรโตคอลสะพาน (token, JSON บรรทัดละคำขอ, ข้อผิดพลาด, ตอบไม่ถูกต้อง)

✅ ทดสอบผ่านซ็อกเก็ตจริง

ตรรกะ bpy ทุกเครื่องมือ (สร้าง/ขยับ/ลบ/วัสดุ/รันสคริปต์/ด่านตรวจ/คลังของฟรี)

✅ ทดสอบกับ bpy ปลอมที่เลียนแบบของจริง (161 ข้อ)

stdout สะอาด (ไม่มีอะไรเลอะท่อ JSON-RPC)

✅ ยืนยัน 0 ไบต์

การเปิด/ปิด Blender จริง (โดยเฉพาะบน Windows 11)

❌ ต้องมี Blender → ใช้ --selftest ยืนยัน

การเรนเดอร์ · UI · bpy.app.timers ของจริง

❌ ต้องมี Blender

การยิง API จริงของ Poly Haven

✅ ทดสอบแล้ว (ค้น "chair" เจอจริง) — ข้ามเองถ้าเครือข่ายไม่พร้อม

เครื่องที่พัฒนาไม่มี Blender ติดตั้ง จึงทดสอบได้ถึงชั้น "โปรโตคอล + ตรรกะ + การเชื่อมกับ Hermes" ส่วนชั้น Blender จริงใช้ --selftest ยืนยันได้ในคำสั่งเดียว (ดู docs/01 ขั้นที่ 3)


9. บทเรียนจากการพัฒนา (บั๊กจริงที่เทสต์จับได้)

บันทึกไว้เพราะเป็นกับดักที่คนอื่นจะเจอเหมือนกัน — ไม่ใช่รายงานความสำเร็จ

#

บั๊ก

อาการที่เห็น

ต้นเหตุจริง

1

conn._bridge_file = f ในสะพาน

ทุกการเชื่อมต่อถูกปฏิเสธเงียบ ๆ → MCP server วนลอง 90 วินาทีแล้วค้าง

socket.socket นิยาม __slots__ → กำหนด attribute ใหม่ไม่ได้ แล้ว except กวาดความผิดพลาดทิ้ง

2

ปล่อย exception ธรรมดาในเครื่องมือ

AI เห็นแค่ Error executing tool X ไม่รู้ว่าทำไมผิด

SDK กลืนข้อความ ของ exception ต้องโยน mcp.server.mcpserver.exceptions.ToolError เท่านั้นจึงจะถึงไคลเอนต์

3

allow_unsafe=true

ยังถูกบล็อก import os อยู่ดี

ด่านอยู่ สองที่ (ตรวจ AST + __import__ ที่ถูกแทน) แต่ปลดล็อกแค่ที่เดียว

4

bpy ปลอม: เปลี่ยนชื่อวัตถุแล้วคีย์ไม่ย้าย

เทสต์หา bpy.data.objects["ชื่อใหม่"] ไม่เจอ

ของจริงย้ายคีย์ให้ — ของปลอมต้องทำเหมือนกัน ไม่งั้นเทสต์ตัดสินผิด

📌 ข้อ 2 สำคัญที่สุดต่อประสบการณ์ใช้งาน: ถ้าไม่แก้ AI จะเดาสาเหตุผิดไปเรื่อย ๆ เพราะไม่มีข้อมูลอะไรเลย และข้อ 1 คือกรณีที่ "เทสต์ผ่านแต่ของจริงพัง" ถ้าไม่ทดสอบแบบ end-to-end


10. แผนผังไฟล์

Hermes-blender-mcp/
├── README.md                 ← ภาพรวมสถาปัตยกรรม + เครื่องมือ + บทเรียน
├── INSTALL.md                ← คู่มือติดตั้ง (อังกฤษ)
├── INSTALL.th.md             ← คู่มือติดตั้ง (ไทย)
├── CONTRIBUTING.md           ← วิธีร่วมพัฒนา (กฎที่โปรเจกต์บังคับ · สูตรเพิ่มเครื่องมือ)
├── CHANGELOG.md              ← บันทึกการเปลี่ยนแปลงทุกรุ่น
├── LICENSE                   ← MIT
├── blender_mcp_server.py     ← MCP server (รันด้วย Python ของเครื่อง · stdio)
├── blender_bridge.py         ← รันใน Blender (stdlib ล้วน · bpy บน main thread)
├── blender_addon/__init__.py ← add-on สำหรับโหมดมีหน้าต่าง (timer mode)
├── requirements.txt
├── install-windows.bat       ← ติดตั้งอัตโนมัติ (Windows 11)
├── run-hermes-blender-mcp.bat/.sh   ← ตัวเปิดเซิร์ฟเวอร์ / --check / --selftest
├── tools/
│   ├── build_addon_zip.py    ← สร้าง zip สำหรับติดตั้ง add-on (Install from Disk)
│   ├── preview_blockout.py   ← วาดผัง blockout เทียบรูปต้นแบบ (ต้องมี Pillow · dev-only)
│   ├── mesh_lib.py           ← เครื่องยนต์เมช (ลบมุม/แท่งสอบ/ตรวจความสมบูรณ์) stdlib ล้วน
│   ├── character_builder.py  ← ประกอบตัวละครละเอียด 27 ชิ้น → .obj/.mtl
│   ├── thai_house_builder.py ← บ้านทรงไทยโพลิกอน 88 ชิ้น (หลังคาช้อน · ช่อฟ้าโค้ง · ระเบียง · บันได)
│   ├── tree_builder.py       ← ต้นไม้โพลิกอน (โคนบาน · กิ่ง · พุ่ม 9 ก้อน)
│   ├── dog_builder.py        ← สุนัขโพลิกอน (4 ขา · ปากเรียว · หู · หาง · ปลอกคอ)
│   └── scene_builder.py      ← ประกอบทุกอย่างเป็นฉากเดียว (ภาพหมู่) → .obj + เรนเดอร์
│   └── render_flat.py        ← เรนเดอร์ระนาบสีเรียบเอง (Pillow · dev-only)
├── examples/
│   ├── character_blockout.py ← ตัวอย่างสร้างตัวละคร 3D จากสเปกที่ AI อ่านจากรูป
│   └── detail_character_in_blender.py ← นำเข้า .obj + Bevel/Subdiv/Smooth ใน Blender
├── docs/
│   ├── images/               ← รูปประกอบในคู่มือ (ภาพเทียบต้นแบบ/โมเดล/ผัง blockout)
│   ├── 01-ติดตั้ง-Windows11.md
│   ├── 02-Hermes-config.md
│   ├── 03-สร้างตัวละครจากรูป.md
│   └── 04-GitHub-repo-setup.md ← ข้อความ Description/Topics พร้อมใช้ตอน publish ← ตอบคำถาม "แนบรูปแล้วสร้างตามแบบได้ไหม"
├── .github/workflows/tests.yml ← รันชุดทดสอบบน GitHub อัตโนมัติ
├── .gitattributes            ← บังคับ CRLF/LF ให้ .bat/.sh ไม่พังข้ามระบบ
├── tests/
│   ├── run_all.sh            ← รันทุกชุด
│   ├── fake_bpy.py           ← bpy ปลอมสำหรับทดสอบ
│   ├── bridge_host.py        ← เปิดสะพานตัวจริงเพื่อทดสอบ e2e
│   ├── test_addon_structure.py · test_server_utils.py
│   ├── test_bridge_logic.py  · test_mcp_e2e.py
└── docs/
    ├── 01-ติดตั้ง-Windows11.md
    └── 02-Hermes-config.md

10.1 การพัฒนา (Contributing)

bash tests/run_all.sh                      # ชุดทดสอบทั้งหมด (ไม่ต้องมี Blender)
python tools/build_addon_zip.py            # สร้าง zip ของ add-on
python blender_mcp_server.py --list-tools  # ดูรายการเครื่องมือ

ทุก push จะรันชุดทดสอบบน GitHub อัตโนมัติ (.github/workflows/tests.yml) ทั้ง Python 3.10 และ 3.12 พร้อมตรวจว่า stdout ว่างตอนสตาร์ต (กันท่อ JSON-RPC ถูกทำให้สกปรกโดยไม่ตั้งใจ)

💡 หลังอัปขึ้น GitHub แล้ว ใส่ป้ายสถานะใน README ได้ด้วยบรรทัดนี้ (แทนที่ <OWNER>/<REPO>): [![tests](https://github.com/<OWNER>/<REPO>/actions/workflows/tests.yml/badge.svg)](https://github.com/<OWNER>/<REPO>/actions/workflows/tests.yml)


11. เปรียบเทียบกับโครงการอื่นในระบบนิเวศ (ควรใช้อันไหน)

🔍 ตรวจเมื่อ 17 ต.ค. 2026 จากข้อมูลจริง (จำนวนดาวจากหน้ารีโป · pyproject.toml · ซอร์ส addon.py · สถานะ issue/PR) — ยังไม่ได้รันของใครเลย เพราะเครื่องที่พัฒนาไม่มี Blender ติดตั้ง ตัวเลขและสถานะด้านล่างจึงเป็น "สิ่งที่อ่านจากต้นทาง" ไม่ใช่ผลทดลอง

🏆 ตัวที่คนใช้มากที่สุด: ahujasid/mcp-for-blender

ข้อมูล

ค่า

ดาว / fork

31,125★ · 2,843 forks

สัญญาอนุญาต

MIT · เวอร์ชัน 2.1.9 · หน้าเว็บ mcp-for-blender.com

ชื่อเดิม

ahujasid/Hermes-blender-mcp (เปลี่ยนชื่อแล้ว — ลิงก์เก่าจะ redirect)

ติดตั้ง

uvx mcp-for-blender + ติดตั้ง add-on ใน Blender

MCP SDK

ตรึง mcp>=1.26.0,<2 และใช้ from mcp.server.fastmcp import FastMCP

ของเขาที่เรานำมาพัฒนาแล้ว (ดูรายการในหัวข้อ "สิ่งที่ได้เรียนรู้" ท้ายหัวข้อนี้): ส่งภาพหน้าจอ viewport กลับให้ AI ดู ✅ · add-on เปิดสะพานเองอัตโนมัติ ✅ · ติดตั้ง add-on ให้เอง ✅ · ตรวจเวอร์ชันโปรโตคอล ✅ · อดทนต่ออาร์กิวเมนต์แปลก ✅

ของเขาที่ยังดีกว่าอยู่: คลังโมเดล (Poly Haven / Poly Pizza) · สร้างโมเดล 3D ช่วย AI · ตรวจเวอร์ชันโปรโตคอลระหว่าง add-on กับเซิร์ฟเวอร์ · telemetry · บันทึกว่าผู้ใช้แก้ไขอะไรไป · มี safe mode (validate_code) · ชุมชนใหญ่ (52 issue เปิด — มีคนตอบ)

ข้อควรระวังที่ตรวจพบ

  • ⚠️ โหมดไม่มีหน้าต่าง (blender -b) ยังมีปัญหาค้าง — issue #251 ("bpy.app.timers ไม่ทำงาน → ทุกคำสั่งค้าง") และ PR ที่เสนอแก้ ยังเปิดอยู่ ไม่ได้ merge ณ วันที่ตรวจ

  • ⚠️ ตรึง mcp<2 เพราะใช้ API v1 ที่ mcp 2.x ตัดออกแล้ว → ถ้ารันเซิร์ฟเวอร์ของเขา บน Python ที่มี mcp 2.x (เช่น env ของ Hermes) จะพัง ต้องปล่อยให้ uvx สร้าง env แยกให้

  • ⚠️ พอร์ตคงที่ (9876) ไม่มี token สุ่มแบบโปรเจกต์นี้

📋 ทางเลือกอื่นในระบบนิเวศ

GitHub มี 508 รีโป ที่เกี่ยวกับ "blender mcp" — ส่วนใหญ่เป็น clone/ฟอร์กของตัวข้างบน ที่อ้างจำนวนเครื่องมือสูง ๆ ควรอ่านซอร์สก่อนเชื่อตัวเลข

รีโป

ดาว

สัญญาอนุญาต

จุดที่อ้าง

RFingAdam/mcp-blender

24★

AGPL-3.0

218 เครื่องมือ + MSFS

carlosh7/Hermes-blender-mcp

—

—

"ครบที่สุด 223 เครื่องมือ"

6xvl/Hermes-blender-mcp

—

—

~270 เครื่องมือ

jenkinsm13/better-Hermes-blender-mcp

—

—

ระบุ "Blender 5" + agents/skills

🚩 สัญญาณเตือน: รีโปที่อ้าง "N เครื่องมือ" แต่ดาว 0–2 หลัก มักเป็น fork ที่เปลี่ยนชื่อ หรือสร้างด้วย AI — ให้ดูว่ามีเทสต์ไหม มี commit ต่อเนื่องไหม และอ่านโค้ดจริงก่อนติดตั้ง

🧠 สกิลใน Hermes Skills Hub (คนละชนิดกับ MCP)

ค้นใน Hub ของ Hermes แล้วพบ 3 สกิลชื่อ "blender" ทั้งหมด trust = community (ไม่ได้ผ่านการตรวจจาก Nous):

สกิล

ที่มา

เป็นอะไร

skills-sh/monumentalsystems/atlas-agent-teams/blender

skills.sh

ความรู้เรื่อง UI/ลำดับงานของ Blender

clawhub/blender

clawhub

"หลีกเลี่ยงข้อผิดพลาดที่พบบ่อย" (transform, modifier)

skills-sh/sfkislev/flue/blender

skills.sh

ความรู้ทั่วไป

⚠️ สำคัญ: สกิลกับ MCP คนละหน้าที่ — สกิลคือ "ความรู้" (บอก AI ว่า Blender ทำงานยังไง) แต่ สั่ง Blender ไม่ได้ ส่วน MCP (โปรเจกต์นี้ หรือตัว 31k★) คือ "ลงมือทำ" ⇒ ใช้คู่กันได้ และ แค็ตตาล็อก MCP ที่ Nous รับรองยังไม่มี Blender (ตรวจแล้ว) (ยังไม่ได้ประเมินคุณภาพของ 3 สกิลนั้น — ตรวจแค่ว่ามีอยู่จริงและ trust เป็น community)

✅ สรุป: เลือกอันไหน

ถ้าคุณต้องการ…

ใช้

ฟีเจอร์เยอะ (คลังโมเดล · สร้างโมเดล 3D · ถ่ายภาพ viewport) + ชุมชนใหญ่ช่วยตอบปัญหา

ahujasid/mcp-for-blender (31k★)

รันแบบไม่มีหน้าต่าง/บนเซิร์ฟเวอร์ (headless-first) เป็นหลัก

โปรเจกต์นี้ (ออกแบบมาเพื่อ blender -b — โหมด main บล็อกบน main thread)

ไม่ต้องติดตั้ง add-on และไม่ต้อง pip install อะไรลง Blender เลย

โปรเจกต์นี้ (สะพานใช้ stdlib ล้วน)

ใช้ mcp 2.x (MCPServer)

โปรเจกต์นี้

โค้ดเล็กพออ่านจบ + เทสต์เป็นสัญญา (399 ข้อ) + เอกสารไทย

โปรเจกต์นี้

ให้ AI "รู้" ศัพท์และขั้นตอนของ Blender

ติดสกิลจาก Skills Hub เสริม (trust: community)

🙏 สิ่งที่ได้เรียนรู้จากตัว 31k★ (และนำมาแก้ในโปรเจกต์นี้)

  • เขาใช้ parse_known_args โดยตั้งใจ เพราะไคลเอนต์ MCP มักเติมอาร์กิวเมนต์ของตัวเอง ต่อท้ายบรรทัดคำสั่ง → เราเปลี่ยนตามแล้ว (เดิมออกทันที ทำให้ hermes mcp add ขึ้น Connection closed ที่หาสาเหตุยาก) ตอนนี้ข้ามพร้อมบันทึกเตือน

  • เขาแก้ปัญหา "add-on เปิดสะพานให้เอง" ด้วย bpy.app.timers ตอนโหลดไฟล์ — เรานำมาใช้แล้ว (พร้อมด่าน bpy.app.background เพื่อไม่ให้โหมด -b ค้างแบบ issue #251)

  • ส่งรูปให้ AI ดู — เราทำตามแล้ว (get_viewport_screenshot) โดยเลือกโหมด render เป็นปริยาย เพื่อให้ใช้ได้ทั้ง GUI และ -b (ของเขาถ่าย viewport ซึ่งต้องมีหน้าต่าง)

  • ติดตั้ง add-on ให้เอง — ของเขามี CLI จัดการ add-on เราก็มี --install-addon แล้ว

  • ตรวจเวอร์ชันระหว่าง add-on กับเซิร์ฟเวอร์ — นำมาใช้เป็น check_bridge_protocol() พร้อมข้อความบอกวิธีแก้ (--install-addon --force)

  • ยังไม่นำมา (พร้อมเหตุผล): คลังโมเดล Poly Haven/Poly Pizza และสร้างโมเดลด้วย AI ต้องพึ่ง API ภายนอก/คีย์ และทำให้สะพานเลิกเป็น stdlib ล้วน · telemetry เราไม่ต้องการ (ส่งข้อมูลออกโดยไม่จำเป็น) · การบันทึกว่าผู้ใช้แก้อะไรไป ยังซับซ้อนเกินความจำเป็นตอนนี้

  • การมีหน้าเว็บเอกสาร + ชื่อแพ็กเกจที่ติดตั้งด้วย uvx บรรทัดเดียว ลดแรงต้านของผู้ใช้ได้มาก


12. อ้างอิง

  • Blender 5.2 LTS — ออก 14 กรกฎาคม 2026 (ซ่อมล่าสุด 5.2.2, 15 ก.ย. 2026) · <https://developer.blender.org/docs/release_notes/5.2/>

  • MCP Python SDK 2.x — FastMCP เปลี่ยนชื่อเป็น MCPServer · <https://py.sdk.modelcontextprotocol.io/v2/migration/>

  • เหตุผลเรื่อง bpy.app.timers ไม่ทำงานในโหมด -b — issue #251 และ PR #252 (ยังเปิดอยู่ ณ 17 ต.ค. 2026)

  • โครงการที่คนใช้มากที่สุดในระบบนิเวศ — ahujasid/mcp-for-blender (31,125★)

Related MCP Connectors

Related MCP Servers

  • F
    license
    A
    quality
    C
    maintenance
    Enables AI agents to inspect and drive Blender scenes directly, either through a live editor bridge on port 8190 or automatically via headless background CLI when Blender is closed. Provides token-efficient tools for scene outlining, object creation and modification, modifiers, materials, rendering, asset export, and arbitrary bpy script execution.
    11
    -
  • A
    license
    Not graded
    quality
    C
    maintenance
    Enables AI assistants to drive a live Blender session over MCP by creating and transforming primitives, building and assigning materials, inspecting scenes and objects, capturing viewport screenshots, and executing arbitrary bpy Python. Commands are relayed over a local TCP bridge to a Blender add-on and executed on Blender's main thread, supporting multiple simultaneous AI clients.
    MIT