เจาะลึกการสร้าง MCP Server: เลือกทำ Desktop App หรือ Hosted Web App ดีกว่ากัน

8 นาที 6 views บันทึกเป็น PDF
เจาะลึกการสร้าง MCP Server: เลือกทำ Desktop App หรือ Hosted Web App ดีกว่ากัน

อยากสร้าง MCP Server ให้ AI ใช้งาน? มาดูความต่างระหว่างการรันบนเครื่องตัวเอง (Desktop) กับบนคลาวด์ (Web App) เพื่อเลือกแนวทางที่เหมาะกับโปรเจกต์ของคุณ

ทำความรู้จักกับ MCP Server: หัวใจสำคัญของ AI ยุคใหม่

ถ้าคุณกำลังศึกษาเรื่อง AI (ปัญญาประดิษฐ์) คุณอาจเคยได้ยินเรื่อง MCP (Model Context Protocol) มาบ้าง มันคือมาตรฐานกลางที่ช่วยให้ AI สามารถ "คุย" กับข้อมูลหรือเครื่องมือภายนอกได้ง่ายขึ้น เปรียบเหมือนการมีล่ามแปลภาษาที่ทำให้ AI เข้าใจข้อมูลในคอมพิวเตอร์หรือฐานข้อมูลของเราได้โดยตรง

ก่อนหน้านี้เวลาเราจะให้ AI ทำงานกับไฟล์ในเครื่อง มันทำได้ยากเพราะ AI ไม่รู้ว่าข้อมูลอยู่ไหน แต่ MCP Server (โปรแกรมตัวกลางที่คอยรับส่งข้อมูลให้ AI) เข้ามาแก้ปัญหานี้ โดยทำหน้าที่เป็นสะพานเชื่อมต่อระหว่างโมเดลภาษาขนาดใหญ่กับแหล่งข้อมูลส่วนตัวของเรา

สำหรับการเป็นโปรแกรมเมอร์มือใหม่ การเข้าใจความแตกต่างระหว่างการรัน MCP Server บนเครื่องตัวเอง (Desktop App) กับบนเซิร์ฟเวอร์ (Hosted Web App) เป็นทักษะสำคัญในการออกแบบระบบ เพราะมันส่งผลต่อความปลอดภัย การอัปเดต และการใช้งานจริงอย่างมหาศาล

เมื่อเซิร์ฟเวอร์อยู่ในเครื่องเรา: ความเร็วและความเป็นส่วนตัว

การรัน MCP Server ไว้ใน Desktop App (โปรแกรมที่ติดตั้งลงบนคอมพิวเตอร์) คือการให้ AI เข้าถึงข้อมูลที่อยู่บนเครื่องนั้นโดยตรง เช่น โปรแกรมจัดการเอกสารหรือไฟล์งานของคุณ AI จะทำงานผ่านช่องทางที่เรียกว่า stdio (มาตรฐานการรับส่งข้อมูลผ่านทางบรรทัดคำสั่ง) ทำให้ข้อมูลไม่ต้องวิ่งออกไปนอกเครื่องเลย

ความได้เปรียบที่ชัดเจนคือเรื่อง ความปลอดภัย เพราะไม่มีการเปิดพอร์ตเครือข่าย (ช่องทางเชื่อมต่ออินเทอร์เน็ต) ให้คนอื่นเข้าถึงได้ ระบบจะใช้สิทธิ์ของผู้ใช้คนเดิมที่ล็อกอินเครื่องอยู่แล้ว ทำให้เราไม่ต้องเขียนโค้ดเรื่องระบบสมาชิกหรือการตรวจสอบตัวตนให้ซับซ้อน

อย่างไรก็ตาม ข้อควรระวังคือเรื่องการดูแลโปรแกรม เมื่อมีการอัปเดตเวอร์ชัน คุณต้องบังคับให้ผู้ใช้ติดตั้งโปรแกรมใหม่เท่านั้น ต่างจากเว็บแอปที่อัปเดตปุ๊บทุกคนได้ใช้ฟีเจอร์ใหม่ทันที

// ตัวอย่างการเรียกใช้งานผ่าน stdio ในฝั่ง Desktop
const { StdioServerTransport } = require("@modelcontextprotocol/sdk/server/stdio");

// สร้างการเชื่อมต่อผ่านช่องทางมาตรฐานของเครื่อง
const transport = new StdioServerTransport();

// เริ่มต้นการทำงานของเซิร์ฟเวอร์
server.connect(transport);
// บรรทัดนี้เป็นการบอกให้โปรแกรมเริ่มฟังคำสั่งจาก AI 
// ผ่านระบบรับส่งข้อมูลในเครื่องตัวเอง

ในโค้ดนี้ StdioServerTransport คือตัวกำหนดว่าเราจะสื่อสารผ่านระบบภายในเครื่อง ผลลัพธ์ที่ได้คือ AI จะสามารถอ่านไฟล์ในโฟลเดอร์ที่คุณกำหนดไว้ได้ทันทีโดยไม่มีความหน่วงจากอินเทอร์เน็ต

เมื่อเซิร์ฟเวอร์อยู่บนคลาวด์: การเข้าถึงที่ไร้พรมแดน

ในทางกลับกัน Hosted Web App (แอปพลิเคชันที่รันบนเซิร์ฟเวอร์ออนไลน์) คือการวาง MCP Server ไว้บนระบบคลาวด์เพื่อให้ AI จากที่ไหนก็ได้มาเชื่อมต่อ การทำแบบนี้เหมาะมากสำหรับแอปที่มีผู้ใช้หลายคน (Multi-tenant) และต้องการให้ AI ช่วยจัดการข้อมูลส่วนกลาง

จุดที่ยากที่สุดของการทำแบบนี้คือ Authentication (การยืนยันตัวตน) คุณต้องสร้างระบบตรวจสอบว่าใครเป็นคนเรียกใช้ AI และคนนั้นมีสิทธิ์เห็นข้อมูลชุดไหนบ้าง เพราะข้อมูลของลูกค้าแต่ละคนถูกเก็บไว้ในฐานข้อมูลเดียวกัน คุณต้องมั่นใจว่า AI จะไม่เผลอเอาข้อมูลของบริษัท A ไปให้บริษัท B ดู

การกระจายซอฟต์แวร์แบบนี้ทำได้ง่ายมาก เพราะคุณเป็นคนคุมเซิร์ฟเวอร์เอง ทั้งหมดคือการปรับจูนที่ฝั่งคุณโดยไม่ต้องสนใจว่าผู้ใช้จะใช้เครื่องคอมพิวเตอร์รุ่นไหนหรือระบบปฏิบัติการอะไร

// ตัวอย่างการตรวจสอบสิทธิ์ก่อนตอบคำถาม AI
async function handleToolCall(userToken, toolName) {
  const user = await verifyToken(userToken); // ตรวจสอบว่าผู้ใช้มีสิทธิ์จริงไหม
  if (!user.hasAccess(toolName)) {
    throw new Error("คุณไม่มีสิทธิ์เข้าถึงข้อมูลนี้");
  }
  return executeTool(toolName);
}
// บรรทัดที่สองเป็นการเช็กสิทธิ์ก่อนรันคำสั่ง 
// เพื่อป้องกันข้อมูลรั่วไหลระหว่างผู้ใช้

ผลลัพธ์ที่ได้คือระบบที่มีความปลอดภัยสูง เพราะทุกครั้งที่มีการเรียกเครื่องมือ AI จะต้องผ่านด่านตรวจสอบสิทธิ์ก่อนเสมอ ซึ่งเป็นสิ่งที่โปรแกรมเมอร์สายเว็บต้องให้ความสำคัญเป็นอันดับหนึ่ง

การจัดการเวอร์ชัน: ปัญหาที่คนมักมองข้าม

ความแตกต่างที่ใหญ่ที่สุดระหว่างสองแบบนี้คือ Versioning (การจัดการเลขเวอร์ชันของโปรแกรม) บน Desktop App คุณไม่มีทางรู้เลยว่าผู้ใช้กำลังรันโปรแกรมเวอร์ชันไหนอยู่ บางคนอาจจะใช้เวอร์ชันที่เก่ามากจนฟังก์ชันการทำงานบางอย่างไม่รองรับแล้ว

ดังนั้นเวลาคุณเขียนโปรแกรมให้ Desktop App คุณต้องยึดหลักการ Additive (การเพิ่มฟีเจอร์ใหม่โดยไม่ลบของเก่า) คือห้ามเปลี่ยนชื่อหรือโครงสร้างคำสั่งเดิมเด็ดขาด เพราะถ้าคุณลบคำสั่งเก่าทิ้ง โปรแกรมของผู้ใช้ที่ไม่ได้อัปเดตจะพังทันที

ส่วนบน Hosted Web App คุณคุมทุกอย่างได้ 100% คุณสามารถอัปเดตโค้ดใหม่ให้ทุกคนเห็นพร้อมกันได้ แต่ต้องระวังเรื่องการเปลี่ยนแปลงที่ทำให้ระบบเดิมใช้งานไม่ได้ (Breaking Change) เพราะถ้าคุณพลาด ทุกคนจะได้รับผลกระทบพร้อมกันหมด

ขอบเขตของเครื่องมือ: อะไรที่ AI ทำได้และไม่ได้

การตัดสินใจว่า AI จะทำอะไรได้บ้างขึ้นอยู่กับว่าข้อมูลอยู่ที่ไหน สำหรับ Desktop App ข้อมูลเป็นของผู้ใช้เอง การให้ AI สั่งลบหรือแก้ไขไฟล์จึงทำได้ง่ายเพราะผู้ใช้เป็นคนควบคุมเอง แต่ต้องมี Audit Trail (บันทึกการทำงาน) ไว้เสมอว่า AI ทำอะไรไปบ้าง

สำหรับ Hosted Web App กฎเหล็กคือ ห้ามให้ AI แก้ไขข้อมูลสำคัญ โดยเด็ดขาด เพราะถ้า AI เกิดอาการ Hallucination (การที่ AI มั่นใจเกินไปจนให้ข้อมูลที่ผิดพลาด) แล้วไปลบข้อมูลในฐานข้อมูลส่วนกลาง ความเสียหายจะรุนแรงมาก

มือใหม่ควรเริ่มจากสร้างเครื่องมือแบบ Read-only (อ่านได้อย่างเดียว) ก่อนเสมอ เพื่อทดสอบว่า AI เข้าใจบริบทของข้อมูลได้ดีแค่ไหน แล้วค่อยๆ เพิ่มความสามารถในการเขียนหรือแก้ไขข้อมูลเมื่อระบบมีความเสถียรเพียงพอ

สรุป: เลือกแบบไหนให้เหมาะกับงาน

การเลือกสร้าง MCP Server แบบไหนขึ้นอยู่กับว่า "ใครเป็นคนรับความเสี่ยงถ้า AI ทำงานผิดพลาด" ถ้าเป็น Desktop App ความเสี่ยงอยู่ที่ผู้ใช้และข้อมูลของเขาเอง แต่ถ้าเป็น Hosted Web App ความเสี่ยงอยู่ที่ธุรกิจของคุณและข้อมูลของลูกค้าทุกคน

ถ้าคุณกำลังเริ่มต้นทำโปรเจกต์ส่วนตัว ผมแนะนำให้ลองเริ่มจาก Desktop App ก่อน เพราะคุณจะได้เรียนรู้การจัดการไฟล์ในเครื่องและการใช้ stdio ซึ่งเป็นพื้นฐานที่แน่นมาก ก่อนจะขยับไปทำระบบที่ซับซ้อนขึ้นบนคลาวด์ที่มีเรื่องของเครือข่ายเข้ามาเกี่ยวข้อง

จงจำไว้ว่าเครื่องมือไม่ใช่แค่เรื่องของโค้ด แต่เป็นเรื่องของสถาปัตยกรรม (การออกแบบโครงสร้างโปรแกรม) การเลือกว่าจะวางเซิร์ฟเวอร์ไว้ที่ไหน คือก้าวแรกที่สำคัญที่สุดในการเป็นโปรแกรมเมอร์ที่มองภาพรวมของระบบออกครับ


ที่มา: Shipping an MCP Server: Desktop App vs Hosted Web App — DEV Community

แชร์บทความ

Facebook X LINE

บทความที่เกี่ยวข้อง

เทคนิคเขียนแอป Flutter สำหรับ Meta Smart Glasses ให้ลื่นไหลและมีประสิทธิภาพ

เทคนิคเขียนแอป Flutter สำหรับ Meta Smart Glasses ให้ลื่นไหลและมีประสิทธิภาพ

เรียนรู้วิธีเขียนแอป Flutter เชื่อมต่อ Meta Smart Glasses ให้ทำงานเร็ว ไม่กระตุก ด้วยการวางสถาปัตยกรรมโค้ดและการจัดการข้อมูลแบบมือโปรที่มือใหม่ทำตามได้จริง

ที่มา: DEV Community

6 hours ago 10 นาที
5 views
เปรียบเทียบ WebSocket, SSE และ Polling เลือกวิธีทำระบบ Real-Time ให้เหมาะกับงาน

เปรียบเทียบ WebSocket, SSE และ Polling เลือกวิธีทำระบบ Real-Time ให้เหมาะกับงาน

อยากทำระบบ Real-Time แต่ไม่รู้จะเลือกใช้ Polling, SSE หรือ WebSocket ดี? มาดูวิธีเลือกใช้ให้เหมาะกับงาน เพื่อให้แอปของคุณทำงานลื่นไหลและประหยัดทรัพยากรเซิร์ฟเวอร์

ที่มา: DEV Community

10 hours ago 10 นาที
4 views