Skip to content

Latest commit

 

History

History
625 lines (476 loc) · 60.2 KB

File metadata and controls

625 lines (476 loc) · 60.2 KB

แนวคิดหลักของ MCP: การเชี่ยวชาญใน Model Context Protocol สำหรับการผสานรวม AI

MCP Core Concepts

(คลิกที่ภาพด้านบนเพื่อดูวิดีโอของบทเรียนนี้)

Model Context Protocol (MCP) เป็นกรอบมาตรฐานที่ทรงพลังซึ่งช่วยเพิ่มประสิทธิภาพการสื่อสารระหว่าง Large Language Models (LLMs) กับเครื่องมือภายนอก, แอปพลิเคชัน และแหล่งข้อมูลต่างๆ คู่มือนี้จะพาคุณไปทำความเข้าใจแนวคิดหลักของ MCP โดยคุณจะได้เรียนรู้เกี่ยวกับสถาปัตยกรรมแบบไคลเอนต์-เซิร์ฟเวอร์, องค์ประกอบสำคัญ, กลไกการสื่อสาร และแนวทางปฏิบัติที่ดีที่สุดในการใช้งาน

  • การยินยอมจากผู้ใช้อย่างชัดเจน: การเข้าถึงข้อมูลและการดำเนินการทั้งหมดต้องได้รับการอนุมัติจากผู้ใช้อย่างชัดเจนก่อนดำเนินการ ผู้ใช้ต้องเข้าใจอย่างชัดเจนว่าข้อมูลใดจะถูกเข้าถึงและการกระทำใดจะถูกดำเนินการ พร้อมทั้งมีการควบคุมสิทธิ์และการอนุญาตอย่างละเอียด

  • การปกป้องความเป็นส่วนตัวของข้อมูล: ข้อมูลของผู้ใช้จะถูกเปิดเผยก็ต่อเมื่อได้รับการยินยอมอย่างชัดเจน และต้องได้รับการปกป้องด้วยการควบคุมการเข้าถึงที่แข็งแกร่งตลอดวงจรการโต้ตอบ การใช้งานต้องป้องกันการส่งข้อมูลโดยไม่ได้รับอนุญาตและรักษาขอบเขตความเป็นส่วนตัวอย่างเข้มงวด

  • ความปลอดภัยในการเรียกใช้เครื่องมือ: การเรียกใช้เครื่องมือทุกครั้งต้องได้รับการยินยอมจากผู้ใช้อย่างชัดเจน พร้อมทั้งความเข้าใจในฟังก์ชัน, พารามิเตอร์ และผลกระทบที่อาจเกิดขึ้น ต้องมีการกำหนดขอบเขตความปลอดภัยที่แข็งแกร่งเพื่อป้องกันการเรียกใช้เครื่องมือที่ไม่ตั้งใจ, ไม่ปลอดภัย หรือเป็นอันตราย

  • ความปลอดภัยของชั้นการส่งข้อมูล: ช่องทางการสื่อสารทั้งหมดควรใช้กลไกการเข้ารหัสและการตรวจสอบสิทธิ์ที่เหมาะสม การเชื่อมต่อระยะไกลควรใช้โปรโตคอลการส่งข้อมูลที่ปลอดภัยและการจัดการข้อมูลประจำตัวที่เหมาะสม

แนวทางการใช้งาน:

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

ภาพรวม

บทเรียนนี้จะสำรวจสถาปัตยกรรมพื้นฐานและองค์ประกอบที่ประกอบขึ้นเป็นระบบนิเวศของ Model Context Protocol (MCP) คุณจะได้เรียนรู้เกี่ยวกับสถาปัตยกรรมแบบไคลเอนต์-เซิร์ฟเวอร์, องค์ประกอบสำคัญ และกลไกการสื่อสารที่ขับเคลื่อนการโต้ตอบของ MCP

วัตถุประสงค์การเรียนรู้ที่สำคัญ

เมื่อจบบทเรียนนี้ คุณจะสามารถ:

  • เข้าใจสถาปัตยกรรมแบบไคลเอนต์-เซิร์ฟเวอร์ของ MCP
  • ระบุบทบาทและความรับผิดชอบของ Hosts, Clients และ Servers
  • วิเคราะห์คุณสมบัติหลักที่ทำให้ MCP เป็นชั้นการผสานรวมที่ยืดหยุ่น
  • เรียนรู้วิธีการไหลของข้อมูลภายในระบบนิเวศของ MCP
  • ได้รับข้อมูลเชิงลึกเชิงปฏิบัติผ่านตัวอย่างโค้ดใน .NET, Java, Python และ JavaScript

สถาปัตยกรรม MCP: การสำรวจเชิงลึก

ระบบนิเวศของ MCP ถูกสร้างขึ้นบนโมเดลแบบไคลเอนต์-เซิร์ฟเวอร์ โครงสร้างแบบแยกส่วนนี้ช่วยให้แอปพลิเคชัน AI สามารถโต้ตอบกับเครื่องมือ, ฐานข้อมูล, API และทรัพยากรเชิงบริบทได้อย่างมีประสิทธิภาพ มาสำรวจสถาปัตยกรรมนี้ในองค์ประกอบหลักกัน

โดยพื้นฐานแล้ว MCP ใช้สถาปัตยกรรมแบบไคลเอนต์-เซิร์ฟเวอร์ ซึ่งแอปพลิเคชันโฮสต์สามารถเชื่อมต่อกับเซิร์ฟเวอร์หลายตัว:

flowchart LR
    subgraph "Your Computer"
        Host["Host with MCP (Visual Studio, VS Code, IDEs, Tools)"]
        S1["MCP Server A"]
        S2["MCP Server B"]
        S3["MCP Server C"]
        Host <-->|"MCP Protocol"| S1
        Host <-->|"MCP Protocol"| S2
        Host <-->|"MCP Protocol"| S3
        S1 <--> D1[("Local\Data Source A")]
        S2 <--> D2[("Local\Data Source B")]
    end
    subgraph "Internet"
        S3 <-->|"Web APIs"| D3[("Remote\Services")]
    end
Loading
  • MCP Hosts: โปรแกรมเช่น VSCode, Claude Desktop, IDEs หรือเครื่องมือ AI ที่ต้องการเข้าถึงข้อมูลผ่าน MCP
  • MCP Clients: ไคลเอนต์โปรโตคอลที่รักษาการเชื่อมต่อแบบ 1:1 กับเซิร์ฟเวอร์
  • MCP Servers: โปรแกรมน้ำหนักเบาที่เปิดเผยความสามารถเฉพาะผ่าน Model Context Protocol มาตรฐาน
  • Local Data Sources: ไฟล์, ฐานข้อมูล และบริการในคอมพิวเตอร์ของคุณที่ MCP servers สามารถเข้าถึงได้อย่างปลอดภัย
  • Remote Services: ระบบภายนอกที่สามารถเข้าถึงได้ผ่านอินเทอร์เน็ตซึ่ง MCP servers สามารถเชื่อมต่อผ่าน API

โปรโตคอล MCP เป็นมาตรฐานที่พัฒนาอย่างต่อเนื่องโดยใช้การกำหนดเวอร์ชันตามวันที่ (รูปแบบ YYYY-MM-DD) เวอร์ชันโปรโตคอลปัจจุบันคือ 2025-06-18 คุณสามารถดูการอัปเดตล่าสุดของ ข้อกำหนดโปรโตคอล

1. Hosts

ใน Model Context Protocol (MCP), Hosts คือแอปพลิเคชัน AI ที่ทำหน้าที่เป็นอินเทอร์เฟซหลักที่ผู้ใช้โต้ตอบกับโปรโตคอล Hosts ประสานงานและจัดการการเชื่อมต่อกับ MCP servers หลายตัวโดยการสร้าง MCP clients เฉพาะสำหรับการเชื่อมต่อแต่ละเซิร์ฟเวอร์ ตัวอย่างของ Hosts ได้แก่:

  • แอปพลิเคชัน AI: Claude Desktop, Visual Studio Code, Claude Code
  • สภาพแวดล้อมการพัฒนา: IDEs และตัวแก้ไขโค้ดที่มีการผสานรวม MCP
  • แอปพลิเคชันที่กำหนดเอง: ตัวแทน AI และเครื่องมือที่สร้างขึ้นเพื่อวัตถุประสงค์เฉพาะ

Hosts เป็นแอปพลิเคชันที่ประสานงานการโต้ตอบของโมเดล AI โดย:

  • จัดการโมเดล AI: เรียกใช้หรือโต้ตอบกับ LLMs เพื่อสร้างคำตอบและประสานงานเวิร์กโฟลว์ AI
  • จัดการการเชื่อมต่อไคลเอนต์: สร้างและรักษา MCP client หนึ่งตัวต่อการเชื่อมต่อ MCP server
  • ควบคุมอินเทอร์เฟซผู้ใช้: จัดการการไหลของการสนทนา, การโต้ตอบของผู้ใช้ และการนำเสนอคำตอบ
  • บังคับใช้ความปลอดภัย: ควบคุมสิทธิ์, ข้อจำกัดด้านความปลอดภัย และการตรวจสอบสิทธิ์
  • จัดการการยินยอมของผู้ใช้: จัดการการอนุมัติของผู้ใช้สำหรับการแบ่งปันข้อมูลและการเรียกใช้เครื่องมือ

2. Clients

Clients เป็นองค์ประกอบสำคัญที่รักษาการเชื่อมต่อแบบหนึ่งต่อหนึ่งระหว่าง Hosts และ MCP servers ไคลเอนต์ MCP แต่ละตัวถูกสร้างขึ้นโดย Host เพื่อเชื่อมต่อกับ MCP server เฉพาะ ซึ่งช่วยให้ช่องทางการสื่อสารมีการจัดระเบียบและปลอดภัย ไคลเอนต์หลายตัวช่วยให้ Hosts สามารถเชื่อมต่อกับเซิร์ฟเวอร์หลายตัวพร้อมกัน

Clients เป็นองค์ประกอบตัวเชื่อมต่อภายในแอปพลิเคชันโฮสต์ โดย:

  • การสื่อสารโปรโตคอล: ส่งคำขอ JSON-RPC 2.0 ไปยังเซิร์ฟเวอร์พร้อมคำสั่งและคำแนะนำ
  • การเจรจาความสามารถ: เจรจาคุณสมบัติที่รองรับและเวอร์ชันโปรโตคอลกับเซิร์ฟเวอร์ในระหว่างการเริ่มต้น
  • การเรียกใช้เครื่องมือ: จัดการคำขอเรียกใช้เครื่องมือจากโมเดลและประมวลผลคำตอบ
  • การอัปเดตแบบเรียลไทม์: จัดการการแจ้งเตือนและการอัปเดตแบบเรียลไทม์จากเซิร์ฟเวอร์
  • การประมวลผลคำตอบ: ประมวลผลและจัดรูปแบบคำตอบของเซิร์ฟเวอร์เพื่อแสดงให้ผู้ใช้

3. Servers

Servers เป็นโปรแกรมที่ให้บริบท, เครื่องมือ และความสามารถแก่ MCP clients เซิร์ฟเวอร์สามารถทำงานในเครื่อง (บนเครื่องเดียวกับ Host) หรือระยะไกล (บนแพลตฟอร์มภายนอก) และมีหน้าที่จัดการคำขอของไคลเอนต์และให้คำตอบที่มีโครงสร้าง เซิร์ฟเวอร์เปิดเผยฟังก์ชันเฉพาะผ่าน Model Context Protocol มาตรฐาน

Servers เป็นบริการที่ให้บริบทและความสามารถ โดย:

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

เซิร์ฟเวอร์สามารถพัฒนาโดยใครก็ได้เพื่อขยายความสามารถของโมเดลด้วยฟังก์ชันเฉพาะ และรองรับทั้งสถานการณ์การปรับใช้ในเครื่องและระยะไกล

4. Server Primitives

เซิร์ฟเวอร์ใน Model Context Protocol (MCP) ให้บริการ primitives สามประเภทหลักที่กำหนดองค์ประกอบพื้นฐานสำหรับการโต้ตอบที่หลากหลายระหว่างไคลเอนต์, โฮสต์ และโมเดลภาษา Primitives เหล่านี้ระบุประเภทของข้อมูลบริบทและการกระทำที่มีให้ผ่านโปรโตคอล

เซิร์ฟเวอร์ MCP สามารถเปิดเผย primitive หลักสามประเภทดังนี้:

Resources

Resources คือแหล่งข้อมูลที่ให้ข้อมูลบริบทแก่แอปพลิเคชัน AI โดยแสดงถึงเนื้อหาคงที่หรือไดนามิกที่ช่วยเพิ่มความเข้าใจและการตัดสินใจของโมเดล:

  • ข้อมูลบริบท: ข้อมูลที่มีโครงสร้างและบริบทสำหรับการบริโภคของโมเดล AI
  • ฐานความรู้: คลังเอกสาร, บทความ, คู่มือ และงานวิจัย
  • แหล่งข้อมูลในเครื่อง: ไฟล์, ฐานข้อมูล และข้อมูลระบบในเครื่อง
  • ข้อมูลภายนอก: การตอบสนอง API, บริการเว็บ และข้อมูลระบบระยะไกล
  • เนื้อหาไดนามิก: ข้อมูลเรียลไทม์ที่อัปเดตตามเงื่อนไขภายนอก

Resources ถูกระบุด้วย URI และรองรับการค้นพบผ่าน resources/list และการดึงข้อมูลผ่าน resources/read:

file://documents/project-spec.md
database://production/users/schema
api://weather/current

Prompts

Prompts คือแม่แบบที่นำกลับมาใช้ใหม่ได้ซึ่งช่วยจัดโครงสร้างการโต้ตอบกับโมเดลภาษา โดยให้รูปแบบการโต้ตอบมาตรฐานและเวิร์กโฟลว์ที่เป็นแม่แบบ:

  • การโต้ตอบแบบแม่แบบ: ข้อความที่มีโครงสร้างล่วงหน้าและตัวเริ่มต้นการสนทนา
  • แม่แบบเวิร์กโฟลว์: ลำดับมาตรฐานสำหรับงานและการโต้ตอบทั่วไป
  • ตัวอย่าง Few-shot: แม่แบบที่ใช้ตัวอย่างสำหรับคำแนะนำโมเดล
  • System Prompts: คำสั่งพื้นฐานที่กำหนดพฤติกรรมและบริบทของโมเดล
  • แม่แบบไดนามิก: Prompts ที่มีพารามิเตอร์ซึ่งปรับให้เหมาะกับบริบทเฉพาะ

Prompts รองรับการแทนที่ตัวแปรและสามารถค้นพบได้ผ่าน prompts/list และดึงข้อมูลด้วย prompts/get:

Generate a {{task_type}} for {{product}} targeting {{audience}} with the following requirements: {{requirements}}

Tools

Tools คือฟังก์ชันที่สามารถเรียกใช้ได้ซึ่งโมเดล AI สามารถเรียกใช้เพื่อดำเนินการเฉพาะ โดยแสดงถึง "คำกริยา" ของระบบนิเวศ MCP ซึ่งช่วยให้โมเดลโต้ตอบกับระบบภายนอก:

  • ฟังก์ชันที่สามารถเรียกใช้ได้: การดำเนินการที่แยกออกจากกันซึ่งโมเดลสามารถเรียกใช้ได้พร้อมพารามิเตอร์เฉพาะ
  • การผสานรวมระบบภายนอก: การเรียก API, การสืบค้นฐานข้อมูล, การดำเนินการไฟล์, การคำนวณ
  • เอกลักษณ์เฉพาะตัว: เครื่องมือแต่ละตัวมีชื่อ, คำอธิบาย และสคีมาพารามิเตอร์ที่แตกต่างกัน
  • I/O ที่มีโครงสร้าง: เครื่องมือยอมรับพารามิเตอร์ที่ผ่านการตรวจสอบแล้วและส่งคืนคำตอบที่มีโครงสร้างและพิมพ์
  • ความสามารถในการดำเนินการ: ช่วยให้โมเดลสามารถดำเนินการในโลกจริงและดึงข้อมูลสด

Tools ถูกกำหนดด้วย JSON Schema สำหรับการตรวจสอบพารามิเตอร์และค้นพบผ่าน tools/list และเรียกใช้ผ่าน tools/call:

server.tool(
  "search_products", 
  {
    query: z.string().describe("Search query for products"),
    category: z.string().optional().describe("Product category filter"),
    max_results: z.number().default(10).describe("Maximum results to return")
  }, 
  async (params) => {
    // Execute search and return structured results
    return await productService.search(params);
  }
);

Client Primitives

ใน Model Context Protocol (MCP), clients สามารถเปิดเผย primitives ที่ช่วยให้เซิร์ฟเวอร์สามารถร้องขอความสามารถเพิ่มเติมจากแอปพลิเคชันโฮสต์ได้ Primitives ฝั่งไคลเอนต์เหล่านี้ช่วยให้การใช้งานเซิร์ฟเวอร์มีความหลากหลายและโต้ตอบได้มากขึ้น โดยสามารถเข้าถึงความสามารถของโมเดล AI และการโต้ตอบของผู้ใช้

Sampling

Sampling ช่วยให้เซิร์ฟเวอร์สามารถร้องขอการเติมข้อความจากโมเดลภาษาของแอปพลิเคชัน AI ของไคลเอนต์ Primitive นี้ช่วยให้เซิร์ฟเวอร์สามารถเข้าถึงความสามารถของ LLM ได้โดยไม่ต้องฝังการพึ่งพาโมเดลของตนเอง:

  • การเข้าถึงโมเดลที่ไม่ขึ้นกับเซิร์ฟเวอร์: เซิร์ฟเวอร์สามารถร้องขอการเติมข้อความโดยไม่ต้องรวม SDK ของ LLM หรือจัดการการเข้าถึงโมเดล
  • AI ที่เริ่มต้นโดยเซิร์ฟเวอร์: ช่วยให้เซิร์ฟเวอร์สามารถสร้างเนื้อหาได้อย่างอิสระโดยใช้โมเดล AI ของไคลเอนต์
  • การโต้ตอบ LLM แบบวนซ้ำ: รองรับสถานการณ์ที่ซับซ้อนซึ่งเซิร์ฟเวอร์ต้องการความช่วยเหลือจาก AI สำหรับการประมวลผล
  • การสร้างเนื้อหาไดนามิก: ช่วยให้เซิร์ฟเวอร์สามารถสร้างคำตอบที่มีบริบทโดยใช้โมเดลของโฮสต์

การ Sampling เริ่มต้นผ่านวิธี sampling/complete ซึ่งเซิร์ฟเวอร์ส่งคำขอเติมข้อความไปยังไคลเอนต์

Elicitation

Elicitation ช่วยให้เซิร์ฟเวอร์สามารถร้องขอข้อมูลเพิ่มเติมหรือการยืนยันจากผู้ใช้ผ่านอินเทอร์เฟซของไคลเอนต์:

  • คำขอข้อมูลจากผู้ใช้: เซิร์ฟเวอร์สามารถขอข้อมูลเพิ่มเติมเมื่อจำเป็นสำหรับการเรียกใช้เครื่องมือ
  • กล่องโต้ตอบการยืนยัน: ขอการอนุมัติจากผู้ใช้สำหรับการดำเนินการที่ละเอียดอ่อนหรือมีผลกระทบ
  • เวิร์กโฟลว์แบบโต้ตอบ: ช่วยให้เซิร์ฟเวอร์สามารถสร้างการโต้ตอบกับผู้ใช้ทีละขั้นตอน
  • การรวบรวมพารามิเตอร์แบบไดนามิก: รวบรวมพารามิเตอร์ที่ขาดห
  • โปรโตคอล JSON-RPC 2.0: การสื่อสารทั้งหมดใช้รูปแบบข้อความ JSON-RPC 2.0 ที่เป็นมาตรฐานสำหรับการเรียกใช้เมธอด การตอบกลับ และการแจ้งเตือน
  • การจัดการวงจรชีวิต: จัดการการเริ่มต้นการเชื่อมต่อ การเจรจาความสามารถ และการสิ้นสุดเซสชันระหว่างไคลเอนต์และเซิร์ฟเวอร์
  • Server Primitives: ช่วยให้เซิร์ฟเวอร์สามารถให้บริการฟังก์ชันหลักผ่านเครื่องมือ ทรัพยากร และพรอมต์
  • Client Primitives: ช่วยให้เซิร์ฟเวอร์สามารถร้องขอการสุ่มตัวอย่างจาก LLMs, ขอข้อมูลจากผู้ใช้ และส่งข้อความบันทึก
  • การแจ้งเตือนแบบเรียลไทม์: รองรับการแจ้งเตือนแบบอะซิงโครนัสสำหรับการอัปเดตแบบไดนามิกโดยไม่ต้องใช้การ polling

คุณสมบัติสำคัญ:

  • การเจรจาเวอร์ชันโปรโตคอล: ใช้การกำหนดเวอร์ชันตามวันที่ (YYYY-MM-DD) เพื่อให้มั่นใจในความเข้ากันได้
  • การค้นพบความสามารถ: ไคลเอนต์และเซิร์ฟเวอร์แลกเปลี่ยนข้อมูลคุณสมบัติที่รองรับระหว่างการเริ่มต้น
  • เซสชันแบบมีสถานะ: รักษาสถานะการเชื่อมต่อข้ามการโต้ตอบหลายครั้งเพื่อความต่อเนื่องของบริบท

เลเยอร์การขนส่ง

เลเยอร์การขนส่ง จัดการช่องทางการสื่อสาร การจัดกรอบข้อความ และการตรวจสอบสิทธิ์ระหว่างผู้เข้าร่วม MCP:

กลไกการขนส่งที่รองรับ:

  1. STDIO Transport:

    • ใช้สตรีมอินพุต/เอาต์พุตมาตรฐานสำหรับการสื่อสารระหว่างกระบวนการโดยตรง
    • เหมาะสำหรับกระบวนการในเครื่องเดียวกันโดยไม่มีค่าใช้จ่ายเครือข่าย
    • ใช้กันทั่วไปสำหรับการใช้งานเซิร์ฟเวอร์ MCP ในเครื่อง
  2. Streamable HTTP Transport:

    • ใช้ HTTP POST สำหรับข้อความจากไคลเอนต์ไปยังเซิร์ฟเวอร์
    • รองรับ Server-Sent Events (SSE) สำหรับการสตรีมจากเซิร์ฟเวอร์ไปยังไคลเอนต์ (ตัวเลือก)
    • ช่วยให้การสื่อสารกับเซิร์ฟเวอร์ระยะไกลผ่านเครือข่าย
    • รองรับการตรวจสอบสิทธิ์ HTTP มาตรฐาน (โทเค็น bearer, คีย์ API, เฮดเดอร์แบบกำหนดเอง)
    • MCP แนะนำ OAuth สำหรับการตรวจสอบสิทธิ์แบบใช้โทเค็นที่ปลอดภัย

การแยกเลเยอร์การขนส่ง:

เลเยอร์การขนส่งแยกรายละเอียดการสื่อสารออกจากเลเยอร์ข้อมูล ทำให้สามารถใช้รูปแบบข้อความ JSON-RPC 2.0 เดียวกันในกลไกการขนส่งทั้งหมด การแยกนี้ช่วยให้ง่ายต่อการสลับระหว่างเซิร์ฟเวอร์ในเครื่องและเซิร์ฟเวอร์ระยะไกลได้อย่างราบรื่น

ข้อควรพิจารณาด้านความปลอดภัย

การใช้งาน MCP ต้องปฏิบัติตามหลักการด้านความปลอดภัยที่สำคัญหลายประการเพื่อให้มั่นใจว่าการดำเนินการโปรโตคอลทั้งหมดปลอดภัยและเชื่อถือได้:

  • ความยินยอมและการควบคุมของผู้ใช้: ผู้ใช้ต้องให้ความยินยอมอย่างชัดเจนก่อนที่จะเข้าถึงข้อมูลหรือดำเนินการใดๆ พวกเขาควรมีการควบคุมที่ชัดเจนเกี่ยวกับข้อมูลที่แชร์และการดำเนินการที่ได้รับอนุญาต โดยได้รับการสนับสนุนจากอินเทอร์เฟซผู้ใช้ที่ใช้งานง่ายสำหรับการตรวจสอบและอนุมัติกิจกรรม

  • ความเป็นส่วนตัวของข้อมูล: ข้อมูลของผู้ใช้ควรถูกเปิดเผยก็ต่อเมื่อได้รับความยินยอมอย่างชัดเจน และต้องได้รับการปกป้องด้วยการควบคุมการเข้าถึงที่เหมาะสม การใช้งาน MCP ต้องป้องกันการส่งข้อมูลโดยไม่ได้รับอนุญาตและรับรองว่าความเป็นส่วนตัวจะได้รับการรักษาไว้ตลอดการโต้ตอบทั้งหมด

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

ด้วยการปฏิบัติตามหลักการด้านความปลอดภัยเหล่านี้ MCP ช่วยให้มั่นใจได้ว่าความไว้วางใจ ความเป็นส่วนตัว และความปลอดภัยของผู้ใช้จะได้รับการรักษาไว้ในทุกการโต้ตอบของโปรโตคอล พร้อมทั้งเปิดใช้งานการผสานรวม AI ที่ทรงพลัง

ตัวอย่างโค้ด: ส่วนประกอบสำคัญ

ด้านล่างนี้คือตัวอย่างโค้ดในหลายภาษาโปรแกรมยอดนิยมที่แสดงวิธีการใช้งานส่วนประกอบเซิร์ฟเวอร์ MCP และเครื่องมือสำคัญ

ตัวอย่าง .NET: การสร้างเซิร์ฟเวอร์ MCP อย่างง่ายพร้อมเครื่องมือ

นี่คือตัวอย่างโค้ด .NET ที่แสดงวิธีการใช้งานเซิร์ฟเวอร์ MCP อย่างง่ายพร้อมเครื่องมือที่กำหนดเอง ตัวอย่างนี้แสดงวิธีการกำหนดและลงทะเบียนเครื่องมือ จัดการคำขอ และเชื่อมต่อเซิร์ฟเวอร์โดยใช้ Model Context Protocol

using System;
using System.Threading.Tasks;
using ModelContextProtocol.Server;
using ModelContextProtocol.Server.Transport;
using ModelContextProtocol.Server.Tools;

public class WeatherServer
{
    public static async Task Main(string[] args)
    {
        // Create an MCP server
        var server = new McpServer(
            name: "Weather MCP Server",
            version: "1.0.0"
        );
        
        // Register our custom weather tool
        server.AddTool<string, WeatherData>("weatherTool", 
            description: "Gets current weather for a location",
            execute: async (location) => {
                // Call weather API (simplified)
                var weatherData = await GetWeatherDataAsync(location);
                return weatherData;
            });
        
        // Connect the server using stdio transport
        var transport = new StdioServerTransport();
        await server.ConnectAsync(transport);
        
        Console.WriteLine("Weather MCP Server started");
        
        // Keep the server running until process is terminated
        await Task.Delay(-1);
    }
    
    private static async Task<WeatherData> GetWeatherDataAsync(string location)
    {
        // This would normally call a weather API
        // Simplified for demonstration
        await Task.Delay(100); // Simulate API call
        return new WeatherData { 
            Temperature = 72.5,
            Conditions = "Sunny",
            Location = location
        };
    }
}

public class WeatherData
{
    public double Temperature { get; set; }
    public string Conditions { get; set; }
    public string Location { get; set; }
}

ตัวอย่าง Java: ส่วนประกอบเซิร์ฟเวอร์ MCP

ตัวอย่างนี้แสดงการใช้งานเซิร์ฟเวอร์ MCP และการลงทะเบียนเครื่องมือแบบเดียวกับตัวอย่าง .NET ด้านบน แต่ใช้ Java

import io.modelcontextprotocol.server.McpServer;
import io.modelcontextprotocol.server.McpToolDefinition;
import io.modelcontextprotocol.server.transport.StdioServerTransport;
import io.modelcontextprotocol.server.tool.ToolExecutionContext;
import io.modelcontextprotocol.server.tool.ToolResponse;

public class WeatherMcpServer {
    public static void main(String[] args) throws Exception {
        // Create an MCP server
        McpServer server = McpServer.builder()
            .name("Weather MCP Server")
            .version("1.0.0")
            .build();
            
        // Register a weather tool
        server.registerTool(McpToolDefinition.builder("weatherTool")
            .description("Gets current weather for a location")
            .parameter("location", String.class)
            .execute((ToolExecutionContext ctx) -> {
                String location = ctx.getParameter("location", String.class);
                
                // Get weather data (simplified)
                WeatherData data = getWeatherData(location);
                
                // Return formatted response
                return ToolResponse.content(
                    String.format("Temperature: %.1f°F, Conditions: %s, Location: %s", 
                    data.getTemperature(), 
                    data.getConditions(), 
                    data.getLocation())
                );
            })
            .build());
        
        // Connect the server using stdio transport
        try (StdioServerTransport transport = new StdioServerTransport()) {
            server.connect(transport);
            System.out.println("Weather MCP Server started");
            // Keep server running until process is terminated
            Thread.currentThread().join();
        }
    }
    
    private static WeatherData getWeatherData(String location) {
        // Implementation would call a weather API
        // Simplified for example purposes
        return new WeatherData(72.5, "Sunny", location);
    }
}

class WeatherData {
    private double temperature;
    private String conditions;
    private String location;
    
    public WeatherData(double temperature, String conditions, String location) {
        this.temperature = temperature;
        this.conditions = conditions;
        this.location = location;
    }
    
    public double getTemperature() {
        return temperature;
    }
    
    public String getConditions() {
        return conditions;
    }
    
    public String getLocation() {
        return location;
    }
}

ตัวอย่าง Python: การสร้างเซิร์ฟเวอร์ MCP

ในตัวอย่างนี้ เราแสดงวิธีการสร้างเซิร์ฟเวอร์ MCP ใน Python พร้อมทั้งแสดงสองวิธีที่แตกต่างกันในการสร้างเครื่องมือ

#!/usr/bin/env python3
import asyncio
from mcp.server.fastmcp import FastMCP
from mcp.server.transports.stdio import serve_stdio

# Create a FastMCP server
mcp = FastMCP(
    name="Weather MCP Server",
    version="1.0.0"
)

@mcp.tool()
def get_weather(location: str) -> dict:
    """Gets current weather for a location."""
    # This would normally call a weather API
    # Simplified for demonstration
    return {
        "temperature": 72.5,
        "conditions": "Sunny",
        "location": location
    }

# Alternative approach using a class
class WeatherTools:
    @mcp.tool()
    def forecast(self, location: str, days: int = 1) -> dict:
        """Gets weather forecast for a location for the specified number of days."""
        # This would normally call a weather API forecast endpoint
        # Simplified for demonstration
        return {
            "location": location,
            "forecast": [
                {"day": i+1, "temperature": 70 + i, "conditions": "Partly Cloudy"}
                for i in range(days)
            ]
        }

# Instantiate the class to register its tools
weather_tools = WeatherTools()

# Start the server using stdio transport
if __name__ == "__main__":
    asyncio.run(serve_stdio(mcp))

ตัวอย่าง JavaScript: การสร้างเซิร์ฟเวอร์ MCP

ตัวอย่างนี้แสดงการสร้างเซิร์ฟเวอร์ MCP ใน JavaScript และวิธีการลงทะเบียนเครื่องมือที่เกี่ยวข้องกับสภาพอากาศสองตัว

// Using the official Model Context Protocol SDK
import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
import { z } from "zod"; // For parameter validation

// Create an MCP server
const server = new McpServer({
  name: "Weather MCP Server",
  version: "1.0.0"
});

// Define a weather tool
server.tool(
  "weatherTool",
  {
    location: z.string().describe("The location to get weather for")
  },
  async ({ location }) => {
    // This would normally call a weather API
    // Simplified for demonstration
    const weatherData = await getWeatherData(location);
    
    return {
      content: [
        { 
          type: "text", 
          text: `Temperature: ${weatherData.temperature}°F, Conditions: ${weatherData.conditions}, Location: ${weatherData.location}` 
        }
      ]
    };
  }
);

// Define a forecast tool
server.tool(
  "forecastTool",
  {
    location: z.string(),
    days: z.number().default(3).describe("Number of days for forecast")
  },
  async ({ location, days }) => {
    // This would normally call a weather API
    // Simplified for demonstration
    const forecast = await getForecastData(location, days);
    
    return {
      content: [
        { 
          type: "text", 
          text: `${days}-day forecast for ${location}: ${JSON.stringify(forecast)}` 
        }
      ]
    };
  }
);

// Helper functions
async function getWeatherData(location) {
  // Simulate API call
  return {
    temperature: 72.5,
    conditions: "Sunny",
    location: location
  };
}

async function getForecastData(location, days) {
  // Simulate API call
  return Array.from({ length: days }, (_, i) => ({
    day: i + 1,
    temperature: 70 + Math.floor(Math.random() * 10),
    conditions: i % 2 === 0 ? "Sunny" : "Partly Cloudy"
  }));
}

// Connect the server using stdio transport
const transport = new StdioServerTransport();
server.connect(transport).catch(console.error);

console.log("Weather MCP Server started");

ตัวอย่าง JavaScript นี้แสดงวิธีการสร้างไคลเอนต์ MCP ที่เชื่อมต่อกับเซิร์ฟเวอร์ ส่งพรอมต์ และประมวลผลการตอบกลับ รวมถึงการเรียกใช้เครื่องมือที่เกิดขึ้น

ความปลอดภัยและการอนุญาต

MCP รวมแนวคิดและกลไกในตัวหลายอย่างสำหรับการจัดการความปลอดภัยและการอนุญาตตลอดโปรโตคอล:

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

  2. การตรวจสอบสิทธิ์:
    เซิร์ฟเวอร์สามารถกำหนดให้มีการตรวจสอบสิทธิ์ก่อนที่จะให้สิทธิ์เข้าถึงเครื่องมือ ทรัพยากร หรือการดำเนินการที่ละเอียดอ่อน ซึ่งอาจเกี่ยวข้องกับคีย์ API, โทเค็น OAuth หรือรูปแบบการตรวจสอบสิทธิ์อื่นๆ การตรวจสอบสิทธิ์ที่เหมาะสมช่วยให้มั่นใจได้ว่าเฉพาะไคลเอนต์และผู้ใช้ที่เชื่อถือได้เท่านั้นที่สามารถเรียกใช้ความสามารถฝั่งเซิร์ฟเวอร์ได้

  3. การตรวจสอบความถูกต้อง:
    การตรวจสอบพารามิเตอร์จะถูกบังคับใช้สำหรับการเรียกใช้เครื่องมือทั้งหมด เครื่องมือแต่ละตัวกำหนดประเภท รูปแบบ และข้อจำกัดที่คาดหวังสำหรับพารามิเตอร์ และเซิร์ฟเวอร์จะตรวจสอบคำขอที่เข้ามาตามนั้น สิ่งนี้ช่วยป้องกันอินพุตที่ไม่ถูกต้องหรือเป็นอันตรายไม่ให้เข้าถึงการใช้งานเครื่องมือ และช่วยรักษาความสมบูรณ์ของการดำเนินการ

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

ด้วยการรวมกลไกเหล่านี้ MCP มอบรากฐานที่ปลอดภัยสำหรับการผสานรวมโมเดลภาษากับเครื่องมือและแหล่งข้อมูลภายนอก พร้อมทั้งให้การควบคุมการเข้าถึงและการใช้งานอย่างละเอียดแก่ผู้ใช้และนักพัฒนา

ข้อความโปรโตคอล & การไหลของการสื่อสาร

การสื่อสาร MCP ใช้ข้อความ JSON-RPC 2.0 ที่มีโครงสร้างเพื่ออำนวยความสะดวกในการโต้ตอบที่ชัดเจนและเชื่อถือได้ระหว่างโฮสต์ ไคลเอนต์ และเซิร์ฟเวอร์ โปรโตคอลกำหนดรูปแบบข้อความเฉพาะสำหรับการดำเนินการประเภทต่างๆ:

ประเภทข้อความหลัก:

ข้อความเริ่มต้น

  • คำขอ initialize: สร้างการเชื่อมต่อและเจรจาเวอร์ชันโปรโตคอลและความสามารถ
  • การตอบกลับ initialize: ยืนยันคุณสมบัติที่รองรับและข้อมูลเซิร์ฟเวอร์
  • notifications/initialized: ส่งสัญญาณว่าการเริ่มต้นเสร็จสมบูรณ์และเซสชันพร้อมใช้งาน

ข้อความการค้นพบ

  • คำขอ tools/list: ค้นหาเครื่องมือที่มีอยู่จากเซิร์ฟเวอร์
  • คำขอ resources/list: แสดงรายการทรัพยากรที่มีอยู่ (แหล่งข้อมูล)
  • คำขอ prompts/list: ดึงแม่แบบพรอมต์ที่มีอยู่

ข้อความการดำเนินการ

  • คำขอ tools/call: เรียกใช้เครื่องมือเฉพาะพร้อมพารามิเตอร์ที่ให้มา
  • คำขอ resources/read: ดึงเนื้อหาจากทรัพยากรเฉพาะ
  • คำขอ prompts/get: ดึงแม่แบบพรอมต์พร้อมพารามิเตอร์เพิ่มเติม

ข้อความฝั่งไคลเอนต์

  • คำขอ sampling/complete: เซิร์ฟเวอร์ร้องขอการเติมข้อความจาก LLM
  • elicitation/request: เซิร์ฟเวอร์ร้องขอข้อมูลจากผู้ใช้ผ่านอินเทอร์เฟซไคลเอนต์
  • ข้อความบันทึก: เซิร์ฟเวอร์ส่งข้อความบันทึกที่มีโครงสร้างไปยังไคลเอนต์

ข้อความแจ้งเตือน

  • notifications/tools/list_changed: เซิร์ฟเวอร์แจ้งไคลเอนต์เกี่ยวกับการเปลี่ยนแปลงเครื่องมือ
  • notifications/resources/list_changed: เซิร์ฟเวอร์แจ้งไคลเอนต์เกี่ยวกับการเปลี่ยนแปลงทรัพยากร
  • notifications/prompts/list_changed: เซิร์ฟเวอร์แจ้งไคลเอนต์เกี่ยวกับการเปลี่ยนแปลงพรอมต์

โครงสร้างข้อความ:

ข้อความ MCP ทั้งหมดปฏิบัติตามรูปแบบ JSON-RPC 2.0 โดยมี:

  • ข้อความคำขอ: รวม id, method และ params (ตัวเลือก)
  • ข้อความตอบกลับ: รวม id และ result หรือ error
  • ข้อความแจ้งเตือน: รวม method และ params (ตัวเลือก) โดยไม่มี id หรือการตอบกลับที่คาดหวัง

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

ประเด็นสำคัญ

  • สถาปัตยกรรม: MCP ใช้สถาปัตยกรรมแบบไคลเอนต์-เซิร์ฟเวอร์ โดยที่โฮสต์จัดการการเชื่อมต่อไคลเอนต์หลายตัวไปยังเซิร์ฟเวอร์
  • ผู้เข้าร่วม: ระบบนิเวศประกอบด้วยโฮสต์ (แอปพลิเคชัน AI), ไคลเอนต์ (ตัวเชื่อมต่อโปรโตคอล) และเซิร์ฟเวอร์ (ผู้ให้บริการความสามารถ)
  • กลไกการขนส่ง: การสื่อสารรองรับ STDIO (ในเครื่อง) และ Streamable HTTP พร้อม SSE (ระยะไกล)
  • Core Primitives: เซิร์ฟเวอร์เปิดเผยเครื่องมือ (ฟังก์ชันที่เรียกใช้ได้), ทรัพยากร (แหล่งข้อมูล), และพรอมต์ (แม่แบบ)
  • Client Primitives: เซิร์ฟเวอร์สามารถร้องขอการสุ่มตัวอย่าง (การเติมข้อความ LLM), การขอข้อมูล (ข้อมูลจากผู้ใช้), และการบันทึกจากไคลเอนต์
  • พื้นฐานโปรโตคอล: สร้างขึ้นบน JSON-RPC 2.0 พร้อมการกำหนดเวอร์ชันตามวันที่ (ปัจจุบัน: 2025-06-18)
  • ความสามารถแบบเรียลไทม์: รองรับการแจ้งเตือนสำหรับการอัปเดตแบบไดนามิกและการซิงโครไนซ์แบบเรียลไทม์
  • ความปลอดภัยเป็นอันดับแรก: ความยินยอมของผู้ใช้ การปกป้องความเป็นส่วนตัวของข้อมูล และการขนส่งที่ปลอดภัยเป็นข้อกำหนดหลัก

แบบฝึกหัด

ออกแบบเครื่องมือ MCP อย่างง่ายที่มีประโยชน์ในโดเมนของคุณ กำหนด:

  1. ชื่อของเครื่องมือ
  2. พารามิเตอร์ที่เครื่องมือจะรับ
  3. ผลลัพธ์ที่เครื่องมือจะส่งกลับ
  4. วิธีที่โมเดลอาจใช้เครื่องมือนี้เพื่อแก้ปัญหาของผู้ใช้

ขั้นตอนถัดไป

ถัดไป: บทที่ 2: ความปลอดภัย

ข้อจำกัดความรับผิดชอบ:
เอกสารนี้ได้รับการแปลโดยใช้บริการแปลภาษา AI Co-op Translator แม้ว่าเราจะพยายามให้การแปลมีความถูกต้อง แต่โปรดทราบว่าการแปลอัตโนมัติอาจมีข้อผิดพลาดหรือความไม่แม่นยำ เอกสารต้นฉบับในภาษาต้นทางควรถือเป็นแหล่งข้อมูลที่เชื่อถือได้ สำหรับข้อมูลที่สำคัญ ขอแนะนำให้ใช้บริการแปลภาษามนุษย์มืออาชีพ เราจะไม่รับผิดชอบต่อความเข้าใจผิดหรือการตีความที่ผิดพลาดซึ่งเกิดจากการใช้การแปลนี้