Tools, Resources และ Prompts: 3 ส่วนประกอบของ MCP
เข้าใจว่า Tools, Resources และ Prompts ต่างกันยังไง ใครเป็นคนควบคุมแต่ละส่วน และออกแบบ MCP Server ให้ใช้ทั้ง 3 อย่างร่วมกัน
หลายคนสร้าง MCP Server แล้วยัดทุกอย่างเป็น Tool หมด ทั้งการค้นหา การอ่านเอกสาร และคำสั่งสำเร็จรูป ผลคือโมเดลต้องเดาเยอะ ผู้ใช้คุมอะไรไม่ได้ และบริบทเต็มไปด้วยข้อมูลที่ไม่จำเป็น สาเหตุคือยังไม่เห็นว่า MCP แบ่งความสามารถของ Server ไว้ 3 แบบโดยตั้งใจ
3 ส่วนประกอบของ MCP Server คืออะไร
เอกสาร Server Concepts ของ MCP แบ่งไว้ชัดเจน และจุดที่สำคัญที่สุดคือ "ใครเป็นคนควบคุม"
- Tools ฟังก์ชันที่โมเดลเรียกเพื่อลงมือทำ ควบคุมโดย โมเดล
- Resources ข้อมูลสำหรับอ่านเป็นบริบท ควบคุมโดย แอปพลิเคชัน
- Prompts เทมเพลตคำสั่งสำเร็จรูป ควบคุมโดย ผู้ใช้
Tools: ให้ AI ลงมือทำ
Tool คือการกระทำที่มี input และ output ชัดเจน เช่น ค้นเที่ยวบิน ส่งอีเมล เขียนข้อมูลลงฐานข้อมูล แต่ละ tool ประกาศ input ด้วย JSON Schema และโมเดลค้นพบได้เองผ่านคำขอรายการเครื่องมือ
กลไกที่ควรรู้
- tool อาจประกาศ output schema เพื่อส่งผลลัพธ์แบบมีโครงสร้าง ให้แอปตรวจและนำไปใช้ต่อได้ง่าย
- tool มี annotations บอกพฤติกรรม เช่น เป็นแบบอ่านอย่างเดียวไหม แต่สเปกเตือนว่า Client ต้องถือว่า annotations ไม่น่าเชื่อถือ ถ้าไม่ได้มาจาก Server ที่ไว้ใจ
- เพราะโมเดลเรียกได้เอง สเปกจึงแนะนำให้มีคนอยู่ในวงจรที่ปฏิเสธการเรียกได้เสมอ
Resources: ให้ข้อมูลเป็นบริบท
Resource คือข้อมูลแบบ passive เช่น เนื้อหาไฟล์ schema ฐานข้อมูล หรือเอกสาร API แต่ละ resource มี URI ของตัวเองและระบุ MIME type
2 รูปแบบที่ใช้บ่อย
- Direct Resource URI ตายตัว ชี้ไปที่ข้อมูลชุดเดียว
- Resource Template URI ที่มีพารามิเตอร์ เช่น เมืองและหมวดหมู่ ใช้ดึงข้อมูลได้หลายชุด และรองรับการเติมค่าอัตโนมัติ (parameter completion)
ข้อดีคือแอปเป็นผู้ตัดสินว่าจะส่งข้อมูลส่วนไหนให้โมเดล จะเลือกบางส่วน ค้นด้วย embedding หรือส่งทั้งหมดก็ได้ จึงคุมบริบทได้ดีกว่าให้โมเดลเรียก tool อ่านไฟล์เอง
Prompts: ทางลัดที่ผู้ใช้เรียกเอง
Prompt คือเทมเพลตที่มีช่องให้กรอก ผู้ใช้ต้องเลือกเรียกเองเสมอ ไม่ทำงานอัตโนมัติ แอปมักแสดงเป็น slash command เช่น พิมพ์ "/" แล้วเลือกคำสั่ง ข้อดีคือทำให้งานที่ทำซ้ำได้ผลลัพธ์สม่ำเสมอ และสอนผู้ใช้ว่าควรใช้ Server นี้อย่างไร
ตัวอย่าง: บริษัททัวร์ในเชียงใหม่
บริษัททัวร์อยากให้พนักงานขายใช้ AI วางโปรแกรมให้ลูกค้า จึงออกแบบ Server แบบนี้
- Resources: แพ็กเกจทัวร์ทั้งหมด และ template สำหรับดูกิจกรรมตามอำเภอและประเภท เช่น ธรรมชาติหรือคาเฟ่
- Tools: เช็กที่นั่งว่าง สร้างใบเสนอราคา และจองรถตู้ ซึ่งต้องให้พนักงานกดยืนยันก่อน
- Prompt: "/วางทริป" ที่ให้กรอกจำนวนวัน งบ และความสนใจ
พนักงานเรียก "/วางทริป" กรอก 3 วัน งบ 15,000 บาท ชอบธรรมชาติ แอปแนบ resource แพ็กเกจที่เกี่ยวข้อง โมเดลเรียก tool เช็กที่นั่งว่าง แล้วร่างใบเสนอราคาให้ตรวจก่อนส่งลูกค้า
ข้อควรระวัง
- อย่าทำทุกอย่างเป็น Tool ข้อมูลอ้างอิงที่ไม่เปลี่ยนบ่อยเหมาะเป็น Resource มากกว่า
- แอปแต่ละตัวรองรับไม่เท่ากัน บาง Client รองรับ Tools ได้ดีแต่แสดง Resources หรือ Prompts ต่างกัน ทดสอบกับแอปที่ผู้ใช้จริงใช้
- เนื้อหาใน Resource อาจมีคำสั่งแฝง ข้อความในเอกสารที่ดึงมาอาจพยายามสั่งโมเดล ถือเป็นข้อมูล ไม่ใช่คำสั่ง
- สเปกเปลี่ยนตามเวอร์ชัน ฟีเจอร์ฝั่ง Client บางตัวถูกประกาศเลิกใช้ในเวอร์ชันใหม่ เช็กเอกสารล่าสุดก่อนพึ่งพา
Tools ให้ AI ลงมือ Resources ให้ AI รู้ Prompts ให้คนกำหนดทิศทาง
เริ่มต้นยังไง
- ลิสต์สิ่งที่อยากให้ Server ทำ แล้วแยกว่าอะไรคือ "การกระทำ" อะไรคือ "ข้อมูล" อะไรคือ "งานที่ทำซ้ำ"
- การกระทำเป็น Tools ข้อมูลอ้างอิงเป็น Resources งานซ้ำเป็น Prompts
- เขียนคำอธิบายของแต่ละส่วนให้คนที่ไม่รู้จักระบบอ่านแล้วเข้าใจ
- ทดสอบใน Client ที่ทีมใช้จริง ว่าแสดงทั้ง 3 ส่วนอย่างไร
ถ้ายังไม่เคยสร้าง Server เลย อ่าน สร้าง MCP Server ตัวแรก ก่อน แล้วลองลงมือกับคอร์ส ลองใช้ MCP เชื่อม AI กับเครื่องมือจริง บน Plants.work Learn