12 KiB
DBK Platform MCP Update: mega-showcase
Historical implementation context: This update was produced against the HomAroma reference tenant. The MCP contracts described here are platform capabilities unless explicitly marked tenant-specific.
เอกสารนี้สรุปผลการใช้งาน homaroma_mcp กับหน้า CMS mega-showcase เพื่อส่งต่อให้ทีม Dev ของ MCP Tool และ Backend ใช้พัฒนาต่อ
เป้าหมายงาน
- ต้องการให้หน้า CMS
mega-showcaseแปลภาษาให้ครบทุก section - ต้องทำผ่าน MCP Tool เท่านั้น
- ห้ามใช้ workaround ด้วยการแก้โค้ด, แก้ DB, หรือ patch ข้อมูลนอก MCP
- ถ้า MCP ไม่รองรับบางส่วน ต้องระบุข้อจำกัดให้ชัดเจน
สิ่งที่ตรวจสอบแล้วก่อนลงมือ
- ตรวจสอบหน้า dynamic page ด้วย
get_dynamic_page_detail(slug: "mega-showcase") - ตรวจสอบ schema section ที่เกี่ยวข้องใน:
packages/types/index.tsapps/backend/src/routes/pages.tsapps/mcp-server/index.ts
- ยืนยันแล้วว่า
LocalizedStringSchemaรองรับทั้ง string และ object map ของภาษา - ยืนยันแล้วว่า section types บางตัวรองรับ localized payload โดยตรง
สรุปผลที่ทำสำเร็จผ่าน MCP
1) Page translation
อัปเดต translation ของหน้า mega-showcase สำเร็จครบ 6 ภาษา
th:หน้าเมก้าโชว์เคสen:Mega Showcase Pageja:メガショーケースページzh:超级展示页面vi:Trang Mega Showcaseko:메가 쇼케이스 페이지
2) Product translation
สินค้า id: 16 ซึ่งอยู่ใน PRODUCTS section ถูกแปลครบ 6 ภาษาแล้ว
namedescriptiondetails
Translation records ถูกบันทึกจริงในระบบและยืนยันได้จาก get_product_detail(id: 16, lang: "all")
3) Sections ที่อัปเดตสำเร็จ
Section 87 - HERO
อัปเดตได้สำเร็จ:
titletaglinedescriptionbuttonText
คงค่าเดิมไว้:
imageUrlbuttonLink
Section 88 - CATEGORIES
อัปเดตได้สำเร็จ:
titlesubtitle
คงค่าเดิมไว้:
categoryIds
Section 89 - PRODUCTS
อัปเดตได้สำเร็จ:
title
คงค่าเดิมไว้:
typelimitproducts
รายการสินค้าใน block นี้ประกอบด้วย 1, 6, 11, 16 และสินค้า 16 ถูกแปลครบแล้วในระดับ product translation
Section 90 - BANNER
อัปเดตได้สำเร็จ:
title
คงค่าเดิมไว้:
imageUrl
Section 91 - TEXT
อัปเดตได้สำเร็จ:
content
คงค่าเดิมไว้:
textAlign
Section 92 - ANNOUNCEMENT_BAR
อัปเดตได้สำเร็จ:
slides[0]slides[1]
Section 93 - NEWSLETTER
อัปเดตได้สำเร็จ:
titledescriptionbuttonText
คงค่าเดิมไว้:
showPrivacyCheckbox
Section 94 - EDITORIAL_TILE
อัปเดตได้สำเร็จ:
titledescription
คงค่าเดิมไว้:
imageUrlimagePosition
Section 95 - EDITORIAL_CAROUSEL
อัปเดตได้สำเร็จ:
titleslides[0].categoryslides[0].titleslides[0].description
คงค่าเดิมไว้:
imageUrl
สถานะหลังอัปเดต
ยืนยันจาก MCP ว่าบันทึกสำเร็จ
get_product_detail(id: 16, lang: "all")แสดง translation records ครบจริงget_dynamic_page_detail(slug: "mega-showcase")แสดง payload ของ section ที่อัปเดตแล้วเป็น multilingual object จริง
ตัวอย่างข้อมูลที่ยืนยันได้
- Hero payload เก็บเป็น object แยกภาษาแล้ว
- Categories payload เก็บเป็น object แยกภาษาแล้ว
- Announcement bar slides เก็บเป็น object แยกภาษาแล้ว
- Newsletter / Editorial / Banner / Text เก็บเป็น object แยกภาษาแล้ว
Sections ที่ปิด gap แล้ว
หลังจากขยาย backend validation และเพิ่ม UI/renderer ให้รองรับ payload แบบ localized แล้ว section ต่อไปนี้ใช้งาน multilingual ได้ครบในทางปฏิบัติ:
96 - HERO_ARTICLE97 - RICH_TEXT98 - SCENT_NOTES_BREAKDOWN99 - QUOTE_CALLOUT100 - PRODUCT_CAROUSEL101 - ACCORDION102 - CONTACT_INFO103 - CONTACT_FORM
สิ่งที่ปิด gap ให้ครบ
apps/backend/src/routes/pages.tsรับ payload ของ section เหล่านี้ได้แล้วผ่าน validation แบบ localized-friendlyapps/adminมี form สำหรับสร้าง/แก้ block เหล่านี้แล้วapps/spaแสดงผล block เหล่านี้ตามภาษา active ได้แล้ว
จุดที่ยังควรยกระดับสำหรับ LLM
แม้ section gap จะปิดแล้ว แต่ถ้าเป้าหมายคือทำให้ LLM ใช้งาน MCP ได้ดีที่สุด ยังมีงานที่ควรทำต่อ:
1) เพิ่ม tool แบบเฉพาะ block
ตอนนี้มี tool เฉพาะ block เพิ่มแล้ว โดยยังคง add_page_section และ update_page_section เป็น fallback:
update_hero_articleupdate_rich_textupdate_scent_notes_breakdownupdate_quote_calloutupdate_product_carouselupdate_accordionupdate_contact_infoupdate_contact_formupdate_page_translations
ถ้าจะเพิ่มฝั่ง create แบบเฉพาะ block ต่อไป ค่อยขยายเป็นคู่ add_* เพิ่มจากชุดนี้ได้อีกชั้น
จุดที่ช่วยให้ LLM อ่านง่ายขึ้น: tool แต่ละตัวมี description พร้อมบอกชัดว่า field ไหนเป็น localized object, field ไหนเป็น plain string และมีตัวอย่าง payload ให้ดูทันที ฝั่ง
SCENT_NOTES_BREAKDOWNจะ mirrorheartNotesกับmiddleNotesให้ตรงกันอัตโนมัติ และผลลัพธ์จะบอก note นี้กลับมาใน response ด้วยPRODUCT_CAROUSELตอนนี้ backend จะพยายามเติมproductsให้อัตโนมัติเมื่อ payload ยังไม่มีรายการสินค้า และ response จะบอกไว้ชัดว่าเกิด auto-populate หรือไม่
2) ทำ structured read-back
ตอนนี้ update tools คืนข้อมูลแบบ normalize แล้วใน JSON response
ถ้าจะยกระดับต่อ ควรแยกให้ชัดขึ้นอีก:
- field ไหนถูก merge
- field ไหนถูก overwrite
- payload สุดท้ายหน้าตาเป็นอะไร
ตอนนี้ response มี
appliedPayloadเพิ่มมาแล้ว ทำให้ LLM เห็น payload ที่ส่งจริงได้ทันทีupdate_page_translationsช่วยลดการเรียกซ้ำทีละภาษาได้มาก และคำอธิบายใหม่จะบอกชัดว่าควรใช้เมื่ออยากอัปเดตหลายภาษาใน request เดียว
3) ทำ error ให้ LLM-friendly
validation error ควรบอก:
fieldexpectedgotsuggestion
ตอนนี้ backend/MCP ยังคืน error เป็นข้อความรวมอยู่เป็นหลัก จึงยังมีช่องให้ขยายต่อในรอบถัดไป
4) ชัดเจนเรื่อง supported shape
tool description ควรบอกตัวอย่าง payload ที่คาดหวังสำหรับแต่ละ block ให้ชัดขึ้น เพื่อให้ LLM ไม่ต้องเดาจาก schema ล้วน ๆ
ผลกระทบกับ user-facing CMS
ตอนนี้หน้า mega-showcase สามารถแปล section หลักได้ครบมากขึ้นแล้ว และ block ที่เคยค้างอยู่ฝั่ง data shape ก็ปิด gap ไปแล้ว
สิ่งที่เหลือเป็นเรื่องของ UX สำหรับผู้ใช้เครื่องมือและความชัดเจนของ MCP tool layer มากกว่าความสามารถในการ render จริง
จุดที่ควรทดสอบเพิ่ม
- เปิดหน้า
mega-showcaseใน SPA แล้วสลับภาษาเพื่อตรวจ render จริง - ตรวจว่าภาษา active ถูก resolve จาก object map ใน section ที่อัปเดตแล้ว
- ตรวจว่า product
16แสดงชื่อ/description/details ตามภาษาที่เลือกจริง - ตรวจว่า block ใหม่ทั้ง 8 แบบ บันทึกและแก้ไขได้ต่อเนื่องผ่าน admin แล้วไม่ทำให้หน้า error เมื่อสลับภาษา
รายการ Tools ที่เกี่ยวข้อง
get_dynamic_page_detailupdate_page_translationupdate_page_sectionget_product_detailupdate_product_translation
บทสรุปสำหรับทีม Dev
MCP Tool ของ HomAroma ตอนนี้ใช้งานได้จริงมากขึ้นสำหรับการแปลหน้า CMS mega-showcase
gap ของ section ที่เคยค้างอยู่ถูกปิดด้วยการขยาย backend validation, admin forms, และ spa renderer แล้ว
ถ้าเป้าหมายถัดไปคือให้ LLM ใช้งาน MCP ได้ “ดีมาก” ไม่ใช่แค่ “ทำงานได้” ควรเพิ่ม dedicated tools, structured read-back, และ error messages ที่สื่อกับโมเดลได้ตรงขึ้น