ข้ามไปยังเนื้อหา
Pi 0.99 กลับลำ รองรับ MCP ในตัวหลังเคยประกาศว่าจะไม่ทำ — tool จาก MCP ถูกซ่อนหลัง "Codemode" sandbox JavaScript ที่โมเดลเขียนสคริปต์เรียก tool ขนานกันได้ ไม่ต้องยัด tool ทั้งหมดลง context
เครื่องมือนักพัฒนา

Pi 0.99 กลับลำ รองรับ MCP ในตัวหลังเคยประกาศว่าจะไม่ทำ — tool จาก MCP ถูกซ่อนหลัง "Codemode" sandbox JavaScript ที่โมเดลเขียนสคริปต์เรียก tool ขนานกันได้ ไม่ต้องยัด tool ทั้งหมดลง context

อ่าน 5 นาที ที่มา: Earendil Engineering

29 ก.ย. 2026 ทีม Earendil ผู้ดูแล Pi (earendil-works/pi agent harness แบบ MIT ที่ตอนนี้มีดาวบน GitHub ราว 110,800 ดวง) ปล่อย v0.99.0 พร้อมบล็อกโพสต์ชื่อ “You Said No MCP!” ซึ่งยอมรับตรง ๆ ว่าเคยประกาศบน pi.dev ว่า Pi ไม่รองรับ MCP และเคยพูดถึง MCP แบบไม่ให้ราคาในพอดแคสต์มาหลายครั้ง แต่ตั้งแต่เวอร์ชันนี้ MCP เป็นส่วนหนึ่งของ core แล้ว โพสต์นี้ขึ้นหน้าแรก Hacker News และได้ไปกว่า 600 คะแนน

ประเด็นที่นักพัฒนาควรรู้คือ Pi ไม่ได้ยอมทำตามแบบ harness ทั่วไป ค่าเริ่มต้นคือ tool จาก MCP จะไม่ถูกประกาศให้โมเดลเห็นโดยตรง แต่ถูกเก็บไว้หลัง Codemode ซึ่งเป็น sandbox JavaScript ที่โมเดลเขียนสคริปต์ค้นหา tool เรียก tool หลายตัวพร้อมกัน แล้วรวมผลลัพธ์ก่อนส่งกลับเข้า context

ทำไมถึงกลับลำ

บล็อกของ Earendil ให้เหตุผลสองข้อ ข้อแรก “the world is not static” MCP ทุกวันนี้ไม่ใช่ MCP เมื่อปีที่แล้ว ข้อที่สองสำคัญกว่า คืองานที่ต้องทำเพื่อรองรับ MCP ให้ดี (sandbox แบบ interpreter และระบบ metadata ของ tool ที่ละเอียดขึ้น) เป็นของที่ Pi ต้องใช้อยู่แล้วกับงานอื่น เช่นการเรียกโมเดลตัดสินใจอย่าง Jev

แต่ทีมยังวิจารณ์ MCP อยู่ โดยบอกว่าปัญหาใหญ่ที่สุดของ MCP ยังเป็นเรื่อง “hard to compose” และโทษว่าเป็นที่ตัวเซิร์ฟเวอร์มากกว่าตัวโปรโตคอล เพราะเซิร์ฟเวอร์ส่วนใหญ่ยังถูกสร้างมาให้ harness ที่ “dump tools into the context” และพยายามประหยัดโทเคนด้วยการคืนผลเป็นข้อความ ทีมเห็นว่า MCP ควร “much closer to OpenAPI with intelligent tool discovery” คือคืน structured data และค้นหา tool ได้จากคำอธิบาย

Codemode ทำงานอย่างไร

ตาม release note ของ 0.99.0 tool codemode จะรัน JavaScript ที่โมเดลเขียนใน sandbox QuickJS ซึ่งเรียก tool ของ Pi ได้ทุกตัว (รวม bash, read และ tool จาก MCP) จุดที่ต่างจาก sandbox ของ bash คือ Codemode รันฝั่งเดียวกับ harness ไม่ได้รันในเครื่องที่คำสั่งถูกส่งไป state ของสคริปต์จึงเก็บอยู่ใน session transcript ไม่ได้อยู่ในระบบไฟล์ ตัวอย่างในบล็อกคือให้ Pi ดึง issue ที่เปิดอยู่ 167 รายการจาก Linear MCP แล้วส่งให้ Jev ประเมินโทนของผู้เขียนทีละสี่ issue พร้อมกัน ผลออกมาว่า 156 รายการเป็นกลาง 11 รายการหงุดหงิดเล็กน้อย และไม่มีรายการไหนหงุดหงิดมาก ทั้งหมดนี้รันอยู่ในสคริปต์เดียว (log แสดงการเรียก tool กว่า 330 ครั้ง) โดยไม่มีผลลัพธ์ดิบตัวไหนเข้า context ของโมเดลเลย

ส่วนที่เปลี่ยนในทางปฏิบัติ:

  • ตั้งค่า MCP ผ่าน mcp.json ทั้งแบบ global และรายโปรเจกต์ (โปรเจกต์ต้องได้รับ trust ก่อน) รองรับทั้ง stdio และ streamable HTTP พร้อม OAuth จัดการได้ด้วย /mcp หรือ pi mcp add|remove|list|login|logout
  • Codemode ถูกโหลดอัตโนมัติเมื่อมีการตั้งค่า MCP ถ้าจะใช้โดยไม่มี MCP ให้เพิ่ม "defaultTools": ["+codemode"] (ไวยากรณ์ +name/-name ก็ใหม่ในรุ่นนี้)
  • ระดับการมองเห็นของ tool extension กำหนดได้ว่า tool เป็นแบบ direct, model-only, codemode, deferred หรือ hidden พร้อม outputSchema/structuredContent และ ctx.executeTool() สำหรับเรียก tool ซ้อนกัน ต้นทุนของการเรียกซ้อนถูกนับรวมใน session cost แล้ว
  • tool_search ค้นหาและประกาศ tool ที่ยังไม่ได้ส่งให้โมเดล ใช้กับโมเดลรุ่นใหม่ที่รองรับ deferred tool loading
  • ปิดได้ ผ่านส่วน Built-in ใน pi config (เก็บเป็น -builtin:mcp ในการตั้งค่า) และ --no-extensions ก็ปิด built-in เหล่านี้ด้วย

0.99.2: เซิร์ฟเวอร์ MCP ไม่บล็อก prompt แรกแล้ว

วันถัดมา (30 ก.ย.) v0.99.2 แก้ปัญหาที่คนใช้ MCP ในหลายเครื่องมือเจอเหมือนกัน คือการต้องรอเซิร์ฟเวอร์ทุกตัวเชื่อมต่อให้เสร็จก่อนเริ่ม prompt ตอนนี้เซิร์ฟเวอร์ที่ไม่มี tool แบบ direct จะเชื่อมต่อในเบื้องหลัง และจะถูกรอก็ต่อเมื่อสคริปต์ใน Codemode เรียกชื่อหรือค้นหา tool เท่านั้น รายชื่อเซิร์ฟเวอร์ย้ายไปอยู่ในส่วน mcp_servers ของ system prompt (บรรทัดละเซิร์ฟเวอร์) ส่วนคำอธิบายของ codemode และ tool_search จะไม่เปลี่ยนเมื่อเซิร์ฟเวอร์ต่อหรือหลุดอีกแล้ว ซึ่งช่วยไม่ให้ prompt cache พังกลางทาง

0.99.2 ยังมี breaking change เล็ก ๆ คือชื่อ tool และ namespace ของ MCP จะแปลง - เป็น _ เหมือนที่ Codex ทำ (mcp__my-server__x จะกลายเป็น mcp__my_server__x) สคริปต์หรือ extension ที่ hard-code ชื่อแบบมีขีดต้องแก้ นอกจากนี้ยังเพิ่ม oauth.clientName สำหรับเซิร์ฟเวอร์ที่รับเฉพาะ client ที่รู้จัก และ "auth": { "provider": ... } สำหรับใช้ token จาก /login ของผู้ให้บริการแทน MCP OAuth (ใช้ได้เฉพาะใน mcp.json แบบ global และต้องเป็น https ยกเว้น loopback)

ฟีเจอร์อื่นใน 0.99.0 ที่น่าสนใจ: Sign in with ChatGPT บน provider OpenAI (ใช้กลไกเดียวกับที่ OpenAI เพิ่งเปิดให้เครื่องมือนอกใช้โควตา ChatGPT) และ virtual models ที่ให้ extension เลือกโมเดลจริงทีละคำขอ มีตัวอย่าง jev-router.ts ที่ใช้ Jev เป็นตัว route ส่วน 0.99.1 ตั้ง GPT-6.1 Sol เป็นโมเดลเริ่มต้นของ OpenAI Codex provider

มุมมอง AI Curator

ที่น่าสนใจไม่ใช่ว่า Pi ยอมรองรับ MCP แต่เป็นวิธีที่รองรับ Pi ใช้ MCP เป็นแค่ “แหล่ง tool” และให้โมเดลเขียนโค้ดประกอบ tool เข้าด้วยกันเอง แนวนี้ตรงกับที่ Codex ทำ และที่ Anthropic กับ Cloudflare เคยเสนอเรื่อง code execution กับ MCP พอ harness ขนาดเล็กที่ขึ้นชื่อเรื่องประหยัดโทเคน (และเคยต่อต้าน MCP มากที่สุด) หันมาทางเดียวกัน ก็พอจะบอกได้ว่าวงการเลือกแล้วว่ารูปแบบที่ยัด tool schema ทั้งหมดลง context กำลังจะหมดยุค

สำหรับทีมในไทยที่เขียน MCP server ใช้เองในองค์กร ข้อความในบล็อกนี้เป็นคำแนะนำที่ใช้ได้ทันที คือให้คืน structured data และเขียนคำอธิบาย tool ให้ค้นหาเจอง่าย แทนที่จะคืนเป็นข้อความยาวเพื่อให้โมเดลอ่าน เพราะ harness รุ่นใหม่จะให้โค้ดเป็นคนอ่านผลก่อนโมเดล ข้อควรระวังคือ Codemode รันฝั่ง harness ซึ่งเป็นฝั่งที่ได้รับความไว้วางใจมากกว่า bash sandbox ความปลอดภัยของมันจึงขึ้นกับ QuickJS กับขอบเขตของ tool ที่เปิดให้เรียก ก่อนเปิดใช้กับเซิร์ฟเวอร์ MCP ที่เขียนหรือแก้ไขข้อมูลได้ ควรตั้ง exposure ให้รัดกุม และอย่าลืมแก้ชื่อ tool ที่มี - ก่อนอัปเกรดเป็น 0.99.2

แหล่งข่าว

บทความนี้เรียบเรียงจากแหล่งข่าวต้นทาง — Earendil Engineering

เนื้อหาบน blog นี้สร้างโดย AI โดยมีการกำกับบรรณาธิการจากมนุษย์

อ่านเพิ่มในหมวด เครื่องมือนักพัฒนา

Betelgeuse รัน Qwen3.8 Flash Next ขนาด 68GB บน RTX 3060 กับแรม 16GB ส่วน Basalt วัดให้เห็นว่าเอนจินที่เร่งด้วยแฟล็กลัดทำให้โมเดลลืมของ
เครื่องมือนักพัฒนา

Betelgeuse รัน Qwen3.8 Flash Next ขนาด 68GB บน RTX 3060 กับแรม 16GB ส่วน Basalt วัดให้เห็นว่าเอนจินที่เร่งด้วยแฟล็กลัดทำให้โมเดลลืมของ

Betelgeuse ฟอร์ก llama.cpp ที่เปิดเมื่อ 31 ต.ค. ดึง expert จาก NVMe เข้า VRAM ตามต้องการ อ้าง 22 tok/s แบบไม่ทิ้ง expert แต่ README เตือนเองว่ายังทดลองและตัวเลขมาจากคนละรอบ วันเดียวกันผู้พัฒนา Basalt เผยผลวัดว่าแฟล็กเร่งความเร็วทำคุณภาพ Q8 ตกไปใกล้ Q2

· อ่าน 5 นาที
กฎห้ามโคลนเกมของ Claude Code เริ่มกระทบงานจริง บริษัทรับทำเกมกระดานร้องงานลูกค้าหยุด แต่รายงานหลายชิ้นปนกับตัวกรองไซเบอร์คนละเรื่อง
เครื่องมือนักพัฒนา

กฎห้ามโคลนเกมของ Claude Code เริ่มกระทบงานจริง บริษัทรับทำเกมกระดานร้องงานลูกค้าหยุด แต่รายงานหลายชิ้นปนกับตัวกรองไซเบอร์คนละเรื่อง

ต่อจากที่เราพบกฎนี้ในไบนารี Claude Code ผู้ใช้เริ่มรายงานว่างานเชิงพาณิชย์ถูกปฏิเสธ และ Tom's Hardware กับ Mashable หยิบไปรายงาน แต่เมื่อไล่ issue ที่อ้างถึง พบว่าหลายรายการเกิดก่อนกฎจะมา จึงน่าจะเป็นตัวกรองด้านไซเบอร์ ส่วน Anthropic ยังไม่ชี้แจง

· อ่าน 4 นาที
Claude Code ส่ง transcript ของ background agent ให้โมเดลทุก ~30 วินาทีเพื่อเขียนสถานะ 3–5 คำ ผู้วัดรายงานกินราว 16% และยังปิดแบบทางการไม่ได้
เครื่องมือนักพัฒนา

Claude Code ส่ง transcript ของ background agent ให้โมเดลทุก ~30 วินาทีเพื่อเขียนสถานะ 3–5 คำ ผู้วัดรายงานกินราว 16% และยังปิดแบบทางการไม่ได้

รายงานอิสระพบว่าฟีเจอร์ agent_summary ของ Claude Code ส่ง transcript เต็มของ background agent ไปถามสถานะทุก ~30 วินาที คิดเป็น 16.4% ของค่าใช้จ่ายในระบบของผู้วัด Issue เปิดมาตั้งแต่ ส.ค. ยังไม่มีสวิตช์ปิดที่รองรับ เราตรวจพบโค้ดนี้ใน 2.1.314 และพบกฎใหม่เรื่องเกมที่ไม่อยู่ใน changelog

· อ่าน 4 นาที