การใส่ MCP Server ไว้ภายในแอป Laravel
AI agent ต้องการมากกว่าแค่ UI ที่ถูก scrape มา พวกเขาต้องการวิธีเรียกใช้เครื่องมือเฉพาะทางด้วยสิทธิ์ที่เหมาะสม นี่คือสิ่งที่ Model Context Protocol (MCP) ทำ
เมื่อเร็วๆ นี้ ผมได้รวม MCP server เข้ากับแอปพลิเคชัน Laravel โดยตรง ผมจึงอยากแบ่งปันการตัดสินใจเชิงสถาปัตยกรรมในการสร้างสิ่งนี้อย่างปลอดภัย
อุปมาอุปไมยเรื่องพนักงานต้อนรับ
ลองนึกภาพว่าแอปของคุณคืออาคารสำนักงาน
- Web UI คือล็อบบี้สำหรับมนุษย์
- REST API คือทางเข้าสำหรับพนักงานที่เป็นระบบ
- MCP server คือโต๊ะต้อนรับสำหรับ AI agent
เอเจนต์จะแสดงบัตรประจำตัวและขอทำภารกิจเฉพาะอย่าง พนักงานต้อนรับจะไม่มอบกุญแจอาคารให้พวกเขา แต่จะตรวจสอบสิทธิ์ ดำเนินการเพียงหนึ่งภารกิจ และส่งคำตอบที่มีโครงสร้างกลับไป
การตัดสินใจในการออกแบบที่สำคัญ
1. ใช้ endpoint เดียว
อย่าสร้างหลาย route สำหรับเครื่องมือที่แตกต่างกัน ให้ใช้ endpoint /mcp เพียงอันเดียว โปรโตคอลจะจัดการเรื่องการค้นหาเครื่องมือ (tool discovery) โดยอัตโนมัติ การมีจุดเชื่อมต่อเดียวทำให้การรักษาความปลอดภัยและการทำเอกสาร (documentation) ทำได้ง่ายกว่า
2. รองรับการยืนยันตัวตนแบบคู่
ผู้เรียกใช้งานที่ต่างกันต้องการวิธีการรักษาความปลอดภัยที่ต่างกัน:
- ผู้เรียกใช้งานภายใน (เช่น เครื่องมือ CLI) ใช้ Sanctum personal access tokens
- เอเจนต์จากภายนอก (ที่ทำหน้าที่แทนผู้ใช้) ใช้ OAuth 2.1
ใช้ driver-style resolver เพื่อจัดการทั้งสองแบบ โค้ดของเครื่องมือควรสนใจแค่ผู้ใช้ที่ผ่านการยืนยันตัวตนแล้วเท่านั้น ไม่ใช่สนใจว่าพวกเขาล็อกอินเข้ามาอย่างไร
3. บังคับใช้ RBAC ที่มีอยู่
การยืนยันตัวตน (Authentication) พิสูจน์เพียงแค่ว่าผู้เรียกคือใคร คุณยังต้องตรวจสอบว่าพวกเขาทำอะไรได้บ้าง เครื่องมือทุกอย่างควรจับคู่กับสิทธิ์ (ability) ที่มีอยู่ หากผู้ใช้ไม่สามารถดูรายชื่อผู้เข้าร่วมใน Web UI ได้ พวกเขาก็ไม่ควรทำผ่าน MCP ได้เช่นกัน
4. จำกัดการแสดงผลข้อมูล
อย่าส่งคืน database model แบบเต็มรูปแบบ ให้ปฏิบัติกับ output ของ MCP เหมือนกับ Public API ส่งคืนเฉพาะฟิลด์ที่เอเจนต์จำเป็นต้องใช้เท่านั้น วิธีนี้จะช่วยป้องกันข้อมูลรั่วไหลโดยไม่ตั้งใจ
การทดสอบเพื่อความปลอดภัย
การทดสอบของคุณต้องพิสูจน์ได้ว่าระบบล้มเหลวอย่างถูกต้อง ทดสอบว่า:
- ผู้ใช้ที่ไม่ได้รับอนุญาตจะได้รับข้อผิดพลาด
403 Forbidden - ผู้ใช้ที่ได้รับอนุญาตจะได้รับเฉพาะฟิลด์ที่ได้รับอนุญาตเท่านั้น
ชุดการทดสอบ (test suite) ที่ดีคือเกราะป้องกันที่ดีที่สุดของคุณจากการรั่วไหลของข้อมูลเมื่อใช้งานเอเจนต์แบบอัตโนมัติ (autonomous agents)
สรุป
ในการสร้าง MCP server ที่มีความรับผิดชอบ ให้ปฏิบัติตามกฎสามข้อนี้:
- ยืนยันตัวตน (Authenticate) ผู้เรียกทุกคนด้วยวิธีการที่เหมาะสม
- อนุญาตสิทธิ์ (Authorize) เครื่องมือทุกอย่างโดยใช้โมเดลการอนุญาตที่มีอยู่ของคุณ
- ปฏิบัติต่อ output ของเครื่องมือทุกอย่างเสมือนเป็นทรัพยากรสาธารณะที่มีการจำกัดสิทธิ์
