MCP spec 2026-07-28: โปรโตคอลกลายเป็น stateless · ลบ session ระดับโปรโตคอลและ handshake ทิ้ง เป็น breaking change ที่มีช่วงผ่อนผัน 12 เดือน
Model Context Protocol ออกสเปกฉบับใหม่ลงวันที่ 2026-07-28 ซึ่งเปลี่ยนหลักการพื้นฐานของโปรโตคอล จากที่เคยมี session ต่อเนื่องระหว่าง client กับ server เป็น ทุก request เป็นอิสระในตัวเอง
หน้า Base Protocol ของสเปกระบุคุณสมบัติสามข้อ: "JSON-RPC message format · Stateless, self-contained requests · Per-request capability negotiation" (modelcontextprotocol.io)
⚠ ชื่อเรียก: "MCP 2.0" ไม่ใช่ชื่อทางการ
MCP ใช้ระบบเวอร์ชันแบบ ลงวันที่ ไม่ใช่ semver · ฉบับก่อนหน้าคือ 2025-11-25 ฉบับนี้คือ 2026-07-28
Simon Willison เรียกมันว่า "MCP 2.0, or the 2026-07-28 Model Context Protocol specification" (Simon Willison) ซึ่งเป็นคำเรียกสั้นของเขาและของชุมชน · ผู้ดูแลสเปกไม่เคยใช้ชื่อ "MCP 2.0" · ถ้าจะใช้คำนี้ต้องบอกด้วยว่าเป็นชื่อเล่น ไม่ใช่ชื่อทางการ ไม่งั้นคนอ่านอาจเข้าใจผิดว่ามีเวอร์ชันที่ชื่อนี้จริงๆ
เปลี่ยนอะไรบ้าง
changelog ของสเปกระบุตรงๆ สองบรรทัด:
"Remove protocol-level sessions and the
Mcp-Session-Idheader" "Make MCP stateless: remove theinitialize/notifications/initializedhandshake"
แบบเดิมต้องยิงสองรอบ: รอบแรก initialize เพื่อขอ session id แล้วรอบสองถึงจะเรียก tool ได้พร้อมแนบ header · แบบใหม่ยิงรอบเดียวโดยแนบข้อมูลที่จำเป็นไปกับ request เลย
header ที่ใช้ เช่น MCP-Protocol-Version: 2026-07-28 และ Mcp-Method: tools/call อยู่ในสเปกจริง ไม่ใช่ตัวอย่างที่ Simon แต่งขึ้น และสเปกระบุว่า "These headers are REQUIRED for compliance" · แต่มีข้อสำคัญคือ header ไม่ใช่แหล่งความจริง: "The body remains the source of truth" · header มีไว้ให้ load balancer อ่านเพื่อ route ได้โดยไม่ต้องแกะ body · ถ้า header กับ body ไม่ตรงกันจะได้ error -32020 HeaderMismatch (transports)
🔴 จุดที่คนเข้าใจผิดกันมากที่สุด
"stateless" หมายถึงโปรโตคอลไม่มี session ไม่ได้แปลว่าแอปของคุณเก็บ state ไม่ได้ · ผู้ดูแลสเปกเขียนเตือนเรื่องนี้ไว้เองเพราะกลัวคนเข้าใจผิด:
"Dropping the protocol-level session doesn't force your application to be stateless. If your server needs to carry state across calls, mint an explicit handle from a tool and have the model pass it back as an argument."
(blog.modelcontextprotocol.io)
แปลว่าถ้า server ต้องจำอะไรข้ามการเรียก ให้ tool คืน handle ออกมาแล้วให้โมเดลส่งกลับเข้ามาเป็น argument ธรรมดา · state ย้ายจากชั้นโปรโตคอลไปอยู่ในชั้นข้อมูลของแอป
และไม่ใช่ว่าทุกอย่างจบใน POST เดียวเสมอ · สเปกเขียนว่า "Every JSON-RPC message sent from the client MUST be a new HTTP POST request" ซึ่งแปลว่างานที่ต้องถามข้อมูลเพิ่มระหว่างทางจะยิงหลายรอบ (ตอบ InputRequiredResult แล้ว client ยิงใหม่พร้อม inputResponses) และ subscriptions/listen ยังเป็น stream ที่เปิดค้างไว้
เป็น breaking change แต่มีทางลง
สเปกยืนยันว่าเป็น breaking change และให้ compatibility matrix ไว้ชัด (versioning):
| client | server | ผล |
|---|---|---|
| ใหม่ | เก่า | ใช้ไม่ได้ |
| เก่า | ใหม่ | ใช้ไม่ได้ |
| ฝั่งใดฝั่งหนึ่งรองรับสองยุค (dual-era) | ใช้ได้ |
มี deprecation window 12 เดือน สำหรับของเดิม · ข้อสรุปเชิงปฏิบัติ: ถ้าองค์กรมี MCP server ของตัวเองอยู่แล้ว การอัปเกรด client อย่างเดียวจะทำให้ของพัง ต้องวางแผนสองฝั่งพร้อมกันหรือทำ dual-era ฝั่งใดฝั่งหนึ่งก่อน
Extension: อะไรเป็นทางการแล้วบ้าง
สเปกแยก extension ออกจาก core โดยระบุว่า "Extensions are always disabled by default and require explicit opt-in from the developer"
- Tasks (
io.modelcontextprotocol/tasks) เป็น official extension แล้ว · changelog ระบุว่าเป็นการ "Move experimental tasks out of the core protocol and into an official extension" คืองานระยะยาวแบบ async ถูกย้ายออกจากแกนกลาง - MCP Apps (UI แบบ chart/form/video ที่แสดงในบทสนทนา) เป็น official extension
- ⚠ "Skills over MCP" ยังไม่ใช่ extension ที่ผ่านการรับรอง · มันเป็น working group ที่ยังไม่ผ่าน SEP · ห้ามเล่าว่าเป็นมาตรฐานแล้ว
ข้อความค้างเก่าในสเปกเอง ห้ามลอกไปใช้: หน้า index ของสเปกยังเขียนว่า extension ถูก "negotiated during initialization" ทั้งที่ initialize ถูกลบไปแล้วในเวอร์ชันนี้ · ของจริงตามหน้า versioning คือไม่มี negotiation handshake แต่ negotiate ผ่าน _meta ของแต่ละ request และ server/discover
เครื่องมือที่ออกตามมา
Simon Willison เขียนโพสต์ "Stateless MCP Has Recaptured My Interest" เมื่อ 31 ก.ค. รวบยอดแนะนำสามโปรเจกต์ที่เขาทยอยปล่อยระหว่าง 28-31 ก.ค. (ไม่ได้ปล่อยพร้อมกันวันเดียว):
- mcp-explorer · CLI สำหรับสำรวจและเรียก tool ของ MCP server (0.1-0.2 = 28 ก.ค. · 0.3 = 29 ก.ค.)
- datasette-mcp · ปลั๊กอิน Datasette เพิ่ม endpoint
/-/mcpให้list_databases(),get_database_schema()และexecute_sql()แบบอ่านอย่างเดียว (28 ก.ค.) - llm-mcp-client · ปลั๊กอินต่อ MCP เข้ากับเครื่องมือ LLM ของเขา (31 ก.ค.)
ข้อสังเกตของ Simon เป็นความเห็น ไม่ใช่ผลวัด: เขาเสนอว่าความซับซ้อนที่ลดลงทำให้โมเดลเล็กที่รันบนโน้ตบุ๊กขับเครื่องมือเหล่านี้ได้พอสมควร และเถียงว่า MCP tool ตรวจสอบและควบคุมได้ง่ายกว่าการปล่อยให้ agent มี shell กับ curl แบบอิสระ · ทั้งสองข้อยังไม่มี benchmark รองรับ เป็นการประเมินจากประสบการณ์ของเขาคนเดียว
ทำไมเรื่องนี้สำคัญกับคนทำงานไทยที่ใช้ AI
ประเด็นเร่งด่วนที่สุดคือองค์กรที่ต่อ MCP เข้ากับระบบภายในไปแล้วต้องรู้ว่านี่คือ breaking change ที่มีเวลานับถอยหลัง 12 เดือน องค์กรที่เขียน MCP server เชื่อมระบบไว้เมื่อครึ่งปีก่อนต้องเช็กว่าของนั้นมีวันหมดอายุแล้ว เพราะมาตรฐานที่ยังอายุไม่ถึงสองปีเพิ่งเปลี่ยนวิธีทำงานพื้นฐานของตัวเองไปแล้ว
อีกมุมหนึ่งที่นำไปใช้ได้กว้างกว่าเรื่อง MCP คือหลักการออกแบบระบบ การลบ session ทิ้งคือการเลือกความเรียบง่ายแลกกับความสะดวก ระบบที่ไม่ต้องจำว่าใครคุยอะไรไว้ก่อนหน้าจะขยายง่ายกว่ามาก เพราะ request ไหนจะวิ่งไปลงเครื่องไหนก็ได้ หลักคิดคือยิ่งแต่ละครั้งของการทำงานพึ่งพาความจำของครั้งก่อนน้อยเท่าไร ระบบยิ่งขยายและซ่อมง่ายเท่านั้น
ข้อควรระวังคือ state ไม่ได้หายไปแต่ย้ายที่ จากที่โปรโตคอลเคยดูแลให้ กลายเป็นหน้าที่ของคนออกแบบ tool ที่ต้องคืน handle ออกมาเอง ถ้า handle เดาได้ง่ายหรือไม่ผูกกับสิทธิ์ของผู้ใช้ มันจะกลายเป็นช่องให้เข้าถึงข้อมูลของคนอื่นได้ เพราะ server ไม่มี session มายืนยันตัวตนให้อีกแล้ว
ข้อเสนอของ Simon ที่ว่า MCP ปลอดภัยกว่าการให้ agent มี shell อิสระนั้นสมเหตุสมผลในหลักการ เพราะ tool ที่นิยามไว้ชัดตรวจสอบได้ง่ายกว่าคำสั่งอะไรก็ได้ แต่ต้องพูดคู่กันไปด้วยว่าตัว MCP เองก็เคยเป็นทางเข้าของ prompt injection มาแล้ว เช่นเคส Cursor ที่ชื่อ DuneSlide ซึ่งยิงผ่าน MCP ทะลุไปเป็น remote code execution (RCE) ได้ ขอบเขตที่แคบลงช่วยลดความเสียหาย แต่ไม่ได้แปลว่าปลอดภัยเสมอไป
สิ่งที่ยังไม่รู้
- ผู้ให้บริการรายใหญ่จะรองรับ dual-era ถึงเมื่อไร และจะปิดของเก่าก่อนครบ 12 เดือนหรือไม่
- "Skills over MCP" จะผ่าน SEP เป็น official extension เมื่อไร
- ยังไม่มีข้อมูลวัดจริงว่าโมเดลเล็กขับ MCP แบบ stateless ได้ดีกว่าแบบเดิมจริงตามที่ Simon คาดหรือไม่
cursor-ide-rce-2026 · gitlost-github-agent-injection · claude-web-fetch-exfiltration · anthropic-eval-incidents-2026
Sources (6)
- https://modelcontextprotocol.io/specification/2026-07-28 fetched 2026-08-01
- https://modelcontextprotocol.io/specification/2026-07-28/changelog fetched 2026-08-01
- https://modelcontextprotocol.io/specification/2026-07-28/basic/versioning fetched 2026-08-01
- https://modelcontextprotocol.io/specification/2026-07-28/basic/transports/streamable-http fetched 2026-08-01
- https://blog.modelcontextprotocol.io/posts/2026-07-28/ fetched 2026-08-01
- https://simonwillison.net/2026/Jul/31/stateless-mcp/ fetched 2026-08-01
อ่านจบแล้วอยากตามเรื่อง AI แบบนี้ต่อทุกวัน เรามีสรุปข่าวภาษาไทยส่งทาง LINE ทุกเช้า กดเพิ่มเพื่อนไว้ได้เลย ไม่มีค่าใช้จ่าย