
suradath/hermes-blender-mcp
Developer toolsMCP 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 ได้ด้วยบรรทัดนี้ (แทนที่
/):[](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★)
Install
This server does not publish a one-line install command.
Open the repository installation guide