Model Context Protocol (MCP) เป็นมาตรฐานเปิดที่สร้างโดย Anthropic ซึ่งกำหนดวิธีที่โมเดล AI สื่อสารกับเครื่องมือภายนอก แหล่งข้อมูล และบริการต่างๆ ลองคิดว่ามันเป็น "USB-C ของ AI" - ตัวเชื่อมต่อสากลที่ช่วยให้ AI Agent ใดๆ สามารถพูดคุยกับเครื่องมือใดๆ ผ่านอินเทอร์เฟซมาตรฐาน
นับตั้งแต่เปิดตัว MCP มียอดดาวน์โหลด SDK มากกว่า 97 ล้านครั้งต่อเดือน และได้รับการยอมรับจากผู้ให้บริการ AI รายใหญ่ทุกราย: Anthropic, OpenAI, Google, Microsoft และ Amazon ในคู่มือนี้ เราจะสำรวจทุกสิ่งที่คุณจำเป็นต้องรู้เพื่อสร้างงานด้วย MCP
ทำไม MCP ถึงมีอยู่
ก่อน MCP แอปพลิเคชัน AI ทุกตัวต้องสร้างการเชื่อมต่อแบบกำหนดเองสำหรับเครื่องมือแต่ละตัวที่ต้องการใช้ อยากให้ AI อ่านไฟล์? เขียนโค้ดกำหนดเอง สอบถามฐานข้อมูล? โค้ดกำหนดเองเพิ่มเติม โพสต์ไปยัง Slack? การเชื่อมต่ออีกตัว
สิ่งนี้สร้างปัญหา N×M: แอปพลิเคชัน AI จำนวน N ตัว แต่ละตัวต้องการการเชื่อมต่อกำหนดเอง M ตัว ส่งผลให้เกิดความพยายามซ้ำซ้อนและระบบนิเวศที่กระจัดกระจาย
MCP แก้ปัญหานี้ด้วยโปรโตคอลเดียวที่ไคลเอนต์ AI ใดๆ สามารถใช้สื่อสารกับเซิร์ฟเวอร์ MCP ใดๆ:
แนวคิดหลัก
MCP มีพื้นฐานสามประการ:
1. เครื่องมือ (Tools)
เครื่องมือคือฟังก์ชันที่ AI สามารถเรียกใช้ได้ มันแทนการกระทำเช่น "สร้างไฟล์", "สอบถามฐานข้อมูล" หรือ "ส่งข้อความ" เครื่องมือแต่ละตัวมีชื่อ คำอธิบาย และ JSON Schema สำหรับพารามิเตอร์
{ name: "create_issue", description: "Create a new GitHub issue", inputSchema: { type: "object", properties: { title: { type: "string", description: "Issue title" }, body: { type: "string", description: "Issue body" }, repo: { type: "string", description: "Repository name" } }, required: ["title", "repo"] } }
2. ทรัพยากร (Resources)
ทรัพยากรคือข้อมูลที่ AI สามารถอ่านได้ มันแทนไฟล์ เรคคอร์ดฐานข้อมูล การตอบกลับ API หรือแหล่งข้อมูลอื่นๆ ทรัพยากรถูกระบุด้วย URI
{ uri: "file:///Users/dev/project/README.md", name: "Project README", mimeType: "text/markdown" }
3. พรอมต์ (Prompts)
พรอมต์คือเทมเพลตที่ใช้ซ้ำได้ซึ่งช่วยจัดโครงสร้างการโต้ตอบ สามารถรวมพารามิเตอร์แบบไดนามิกและมีประโยชน์สำหรับการกำหนดมาตรฐานเวิร์กโฟลว์ทั่วไป
{ name: "code_review", description: "Review code changes for quality and security", arguments: [ { name: "diff", description: "The code diff to review", required: true } ] }
สถาปัตยกรรม
MCP ใช้สถาปัตยกรรมไคลเอนต์-เซิร์ฟเวอร์:
- โฮสต์: แอปพลิเคชัน AI (Claude Desktop, Cursor, แอปกำหนดเองของคุณ)
- ไคลเอนต์: รักษาการเชื่อมต่อ 1:1 กับเซิร์ฟเวอร์ MCP
- เซิร์ฟเวอร์: เปิดเผยเครื่องมือ ทรัพยากร และพรอมต์ให้กับไคลเอนต์
- ทรานสปอร์ต: การสื่อสารเกิดขึ้นผ่าน JSON-RPC 2.0 บน stdio (ในเครื่อง) หรือ Server-Sent Events (ระยะไกล)
การสร้างเซิร์ฟเวอร์ MCP
มาสร้างเซิร์ฟเวอร์ MCP ในทางปฏิบัติที่โต้ตอบกับรายการสิ่งที่ต้องทำที่เก็บในไฟล์ JSON
การตั้งค่า
mkdir mcp-todo-server && cd mcp-todo-server npm init -y npm install @modelcontextprotocol/sdk zod
การพัฒนาเซิร์ฟเวอร์
// src/index.ts import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js"; import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js"; import { z } from "zod"; import fs from "fs"; const TODO_FILE = "./todos.json"; function readTodos(): { id: number; text: string; done: boolean }[] { if (!fs.existsSync(TODO_FILE)) return []; return JSON.parse(fs.readFileSync(TODO_FILE, "utf-8")); } function writeTodos(todos: { id: number; text: string; done: boolean }[]) { fs.writeFileSync(TODO_FILE, JSON.stringify(todos, null, 2)); } const server = new McpServer({ name: "todo-server", version: "1.0.0", }); // Tool: Add a todo server.tool( "add_todo", "Add a new todo item", { text: z.string().describe("The todo text") }, async ({ text }) => { const todos = readTodos(); const newTodo = { id: Date.now(), text, done: false }; todos.push(newTodo); writeTodos(todos); return { content: [{ type: "text", text: `Added: "${text}"` }] }; } ); // Tool: List todos server.tool( "list_todos", "List all todo items", {}, async () => { const todos = readTodos(); const list = todos .map((t) => `${t.done ? "✅" : "⬜"} [${t.id}] ${t.text}`) .join("\n"); return { content: [{ type: "text", text: list || "No todos yet." }] }; } ); // Tool: Complete a todo server.tool( "complete_todo", "Mark a todo as completed", { id: z.number().describe("The todo ID to complete") }, async ({ id }) => { const todos = readTodos(); const todo = todos.find((t) => t.id === id); if (!todo) return { content: [{ type: "text", text: "Todo not found." }] }; todo.done = true; writeTodos(todos); return { content: [{ type: "text", text: `Completed: "${todo.text}"` }] }; } ); // Resource: Current todos as a readable resource server.resource( "todos://list", "Current todo list", async () => ({ contents: [{ uri: "todos://list", mimeType: "application/json", text: JSON.stringify(readTodos(), null, 2), }], }) ); // Start the server const transport = new StdioServerTransport(); await server.connect(transport);
การกำหนดค่า
เพื่อใช้เซิร์ฟเวอร์นี้กับ Claude Desktop ให้เพิ่มในการกำหนดค่า:
{ "mcpServers": { "todo": { "command": "npx", "args": ["tsx", "/path/to/mcp-todo-server/src/index.ts"] } } }
การสร้างไคลเอนต์ MCP
คุณยังสามารถสร้างไคลเอนต์กำหนดเองที่เชื่อมต่อกับเซิร์ฟเวอร์ MCP ใดๆ:
import { Client } from "@modelcontextprotocol/sdk/client/index.js"; import { StdioClientTransport } from "@modelcontextprotocol/sdk/client/stdio.js"; const transport = new StdioClientTransport({ command: "npx", args: ["tsx", "./src/index.ts"], }); const client = new Client({ name: "my-client", version: "1.0.0" }); await client.connect(transport); // List available tools const { tools } = await client.listTools(); console.log("Available tools:", tools.map((t) => t.name)); // Call a tool const result = await client.callTool({ name: "add_todo", arguments: { text: "Write MCP blog post" }, }); console.log(result);
เซิร์ฟเวอร์ MCP ยอดนิยม
ระบบนิเวศ MCP เติบโตอย่างรวดเร็ว นี่คือเซิร์ฟเวอร์ยอดนิยมบางตัว:
| เซิร์ฟเวอร์ | คำอธิบาย | กรณีการใช้งาน |
|---|---|---|
| GitHub | สร้าง issue, PR, จัดการ repo | เวิร์กโฟลว์การพัฒนา |
| Slack | ส่งข้อความ, จัดการช่อง | การสื่อสารทีม |
| PostgreSQL | สอบถามและจัดการฐานข้อมูล | การเข้าถึงข้อมูล |
| Filesystem | อ่าน เขียน และค้นหาไฟล์ | การพัฒนาในเครื่อง |
| Puppeteer | การทำงานอัตโนมัติของเบราว์เซอร์และสแครป | การทดสอบเว็บ |
| Sentry | การตรวจสอบข้อผิดพลาดและการดีบัก | การสนับสนุนโปรดักชัน |
| Supabase | ฐานข้อมูล, การยืนยันตัวตน, ที่เก็บข้อมูล | การดำเนินงานแบ็กเอนด์ |
MCP เทียบกับ A2A (Agent-to-Agent)
ในขณะที่ MCP จัดการการสื่อสารตัวแทน-เครื่องมือ โปรโตคอล A2A (Agent-to-Agent) ของ Google จัดการการสื่อสารตัวแทน-ตัวแทน ทั้งสองเสริมซึ่งกันและกัน:
- MCP: AI Agent ใช้เครื่องมืออย่างไร (การรวมแนวตั้ง)
- A2A: AI Agent ร่วมมือกันอย่างไร (การรวมแนวนอน)
แนวทางปฏิบัติที่ดีที่สุด
- ให้เซิร์ฟเวอร์มุ่งเน้น: หนึ่งเซิร์ฟเวอร์ต่อโดเมน (เซิร์ฟเวอร์ GitHub, เซิร์ฟเวอร์ Slack ฯลฯ) อย่าสร้างเซิร์ฟเวอร์แบบ monolithic
- ตรวจสอบอินพุตด้วย Zod: ตรวจสอบอินพุตเครื่องมือด้วยสคีมาที่เหมาะสมเสมอ
- จัดการข้อผิดพลาดอย่างสง่างาม: ส่งคืนข้อความข้อผิดพลาดที่มีความหมาย ไม่ใช่ stack trace
- ใช้ทรัพยากรสำหรับข้อมูลอ่านอย่างเดียว: หาก AI ต้องการเพียงอ่านข้อมูล ให้เปิดเผยเป็นทรัพยากรแทนเครื่องมือ
- เพิ่มคำอธิบายที่เหมาะสม: คำอธิบายเครื่องมือและพารามิเตอร์ที่ดีช่วยให้ AI เข้าใจว่าจะใช้เครื่องมือแต่ละตัวเมื่อใดและอย่างไร
- ทดสอบด้วย MCP Inspector: ใช้
npx @modelcontextprotocol/inspectorเพื่อทดสอบเซิร์ฟเวอร์แบบโต้ตอบ
เริ่มต้น
# Create a new MCP server from template npx @modelcontextprotocol/create-server my-server # Test with the MCP Inspector npx @modelcontextprotocol/inspector npx tsx ./src/index.ts
สรุป
MCP กลายเป็นมาตรฐานโดยพฤตินัยสำหรับการใช้เครื่องมือ AI ในปี 2026 ไม่ว่าคุณจะกำลังสร้าง AI Agent แบบกำหนดเอง ขยาย Claude Code หรือสร้างการเชื่อมต่อสำหรับแพลตฟอร์มที่มีอยู่ การเข้าใจ MCP เป็นสิ่งจำเป็น โปรโตคอลนี้เรียบง่ายพอที่จะเรียนรู้ได้ในบ่ายเดียว แต่ทรงพลังพอที่จะสร้างเวิร์กโฟลว์ AI ระดับโปรดักชัน
ขั้นตอนถัดไป:
- สำรวจ ข้อกำหนด MCP
- เรียกดูเซิร์ฟเวอร์ MCP ที่มีอยู่ เพื่อแรงบันดาลใจ
- สร้างเซิร์ฟเวอร์แรกด้วย TypeScript หรือ Python SDK
- ทดสอบด้วย Claude Desktop หรือ MCP Inspector