SH

suradath/hermes-blender-mcp

Developer tools
0 stars 0 forks Quality 71 Trend 20MIT

MCP Server ให้ Hermes Agent สั่งงาน Blender 5.2 ผ่าน bpy — 12 เครื่องมือ · คลังของฟรี CC0 · ตัวสร้างโมเดลโพลิกอน · ทดสอบ 756 ข้อ

Overview

MCP Server (stdio) ที่เชื่อม เข้ากับ ผ่าน bpy ให้ AI อ่านฉาก สร้าง/ขยับวัตถุ ใส่สี และรันสคริปต์ได้จริงจากในแชท 🎯 ทดสอบอัตโนมัติผ่าน + (hermes mcp add → เชื่อมต่อได้ เห็นทั้ง 12 เครื่องมือ) ⏳ — เครื่องที่พัฒนาไม่มี Blender ติดตั้ง (ดูหัวข้อ ทดสอบอะไรแล้ว / ยังไม่ได้ทดสอบอะไร) *🏠 — 88 ชิ้น สร้างจากเรขาคณิตจริง (ไม่ได้ปั้นมือ · ไม่ได้ใช้ภาพจาก AI) เสายกพื้น · หลังคาซ้อนชั้นชัน 40.6° · หน้าบัน · ป้านลม · ช่อฟ้าโค้ง · ระเบียง · บันได — ดูในคู่มือ §10* MCP สื่อสารผ่าน stdio แต่ blender -b พ่นข้อความต้อนรับ/บันทึกของตัวเองลง ตั้งแต่ก่อนสคริปต์จะได้รัน ถ้าให้ MCP server รันใน Blender เอง ไคลเอนต์จะอ่านเจอขยะ ก่อน JSON แรก → พังทันที (ไฟล์นี้จึงยืนยันได้ว่า ตอนสตาร์ต) สะพานจึงใช้ และปล่อยให้ stdout ของ Blender เป็นแค่บันทึก เอกสารและรายงานบั๊กของชุมชนยืนยันตรงกัน: เรียก bpy จาก thread อื่นได้ และ ด้วย (มี PR จริงที่แก้เรื่องนี้ — เซิร์ฟเวอร์ที่พึ่ง timer จะค้างทุกคำสั่งในโหมด headless) การออกแบบจึงแยกเป็นสองโหมดตามที่ bpy บังคับ: blender_bridge.

README

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 ของตัวเองมา)


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 ได้ด้วยบรรทัดนี้ (แทนที่ /): [![tests](https://github.com///actions/workflows/tests.yml/badge.svg)](https://github.com///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) · ``
  • MCP Python SDK 2.x — FastMCP เปลี่ยนชื่อเป็น MCPServer · ``
  • เหตุผลเรื่อง bpy.app.timers ไม่ทำงานในโหมด -b — issue #251 และ PR #252 (ยังเปิดอยู่ ณ 17 ต.ค. 2026)
  • โครงการที่คนใช้มากที่สุดในระบบนิเวศ — ahujasid/mcp-for-blender (31,125★)
View this README on GitHub

Install

This server does not publish a one-line install command.

Open the repository installation guide