เขียนโดย: ทีมวิศวกร HolySheep AI · อัปเดตล่าสุด มีนาคม 2026
สวัสดีครับ ผมเป็นวิศวกรที่ใช้ Claude Code ทำงานอัตโนมัติทุกวัน เมื่อสองอาทิตย์ก่อนผมเจอปัญหาหนักใจ — เครื่องแขวนค้างไป 3 ครั้งติด เพราะ MCP tool calling โยน error 504 ออกมาทุก 5 นาที ผมนั่งแก้อยู่สองวัน เปลี่ยนโมเดล เปลี่ยน key เปลี่ยน server จนพบว่าปัญหาจริงๆ ไม่ได้อยู่ที่โค้ดของผมเลย แต่อยู่ที่ "ตัวกลาง" ที่ผมเลือกใช้นั่นเอง
หลังสลับมาใช้บริการของ สมัครที่นี่ ปัญหาหายเกลี้ยงภายใน 30 นาที บทความนี้เลยอยากเล่าวิธีแก้ทั้งหมดให้ฟังครับ แม้คุณไม่เคยแตะ API มาก่อนก็อ่านจบแล้วทำตามได้เลย
MCP คืออะไรในภาษาคนทั่วไป
MCP ย่อมาจาก Model Context Protocol ถ้าเปรียบให้เข้าใจง่าย มันคือ "สายชาร์จ" ที่เชื่อมระหว่าง Claude Code กับเครื่องมือภายนอก เช่น ไฟล์ในเครื่อง ฐานข้อมูล หรือ API ของเว็บอื่น ปลายสายฝั่งหนึ่งเสียบกับ Claude อีกฝั่งเสียบกับเครื่องมือของคุณ ทุกครั้งที่คุณบอก Claude "ช่วยเปิดไฟล์นี้ให้หน่อย" มันจะวิ่งผ่าน MCP ไปดึงข้อมูลมาให้
พอสายนี้ "หลวม" หรือ "ปลายสายเสียบไม่แน่น" ก็จะเกิดอาการ 2 แบบที่ผมเจอบ่อยที่สุดคือ 504 Timeout (รอนานเกินไปจนตัดสายทิ้ง) และ Schema Validation (ข้อมูลที่ส่งกลับมา "รูปร่าง" ไม่ตรงกับที่ตกลงกันไว้)
Error 504 Gateway Timeout คืออะไร
สมมติคุณสั่ง Claude "ช่วยหาข้อมูลจากเว็บ B" Claude ก็จะส่งคำขอผ่าน MCP ไปที่เว็บ B ถ้าเว็บ B ไม่ตอบกลับภายในเวลาที่กำหนด (ค่า default ประมาณ 60 วินาที) ระบบจะโยน error 504 ออกมา หน้าตาประมาณนี้ครับ
{
"type": "error",
"error": {
"type": "timeout_error",
"message": "MCP server 'web-search' did not respond within 60000ms (HTTP 504)"
}
}
สาเหตุที่เจอบ่อยที่สุดมี 3 ข้อ:
- เซิร์ฟเวอร์ตัวกลางที่คุณใช้อยู่ช้ามาก (โดยเฉพาะตัวที่ตั้งอยู่ไกลจากคุณหลายพันกิโลเมตร)
- MCP server ที่คุณติดตั้งไว้ทำงานหนักเกินไป (เช่น query ฐานข้อมูลใหญ่)
- ค่า timeout ใน Claude Code ตั้งไว้ต่ำเกินไป
วิธีแก้ที่ 1: เพิ่มค่า timeout ในไฟล์ตั้งค่า MCP ของ Claude Code ให้สูงขึ้น เปิดไฟล์ ~/.claude.json แล้วเพิ่มบรรทัดนี้ครับ
{
"mcpServers": {
"web-search": {
"command": "npx",
"args": ["-y", "@modelcontextprotocol/server-web-search"],
"env": {
"MCP_TIMEOUT_MS": "120000",
"MCP_REQUEST_TIMEOUT": "120000"
}
}
}
}
วิธีแก้ที่ 2: สลับตัวกลาง API ไปใช้ที่เร็วกว่า ผมทดสอบกับ HolySheep AI พบว่า TTFT (Time To First Token) อยู่ที่ ประมาณ 42 มิลลิวินาที เทียบกับตัวกลางเดิมที่ 380 มิลลิวินาที — เร็วกว่าเกือบ 9 เท่า ทำให้โอกาสโดน 504 ลดลงฮวบ
Schema Validation Failed คืออะไร
Schema คือ "แบบฟอร์ม" ที่ตกลงกันไว้ว่า ข้อมูลที่ส่งเข้ามาต้องมีหน้าตาแบบนี้ เช่น ฟิลด์ query ต้องเป็นข้อความ ฟิลด์ limit ต้องเป็นตัวเลข ถ้า Claude ส่งข้อมูลมา "ผิดแบบฟอร์ม" ระบบจะปฏิเสธทันทีครับ
{
"type": "error",
"error": {
"type": "validation_error",
"message": "Tool input does not match schema",
"details": [
{
"field": "limit",
"expected": "integer",
"received": "string"
}
]
}
}
สาเหตุที่เจอบ่อย: คำอธิบายเครื่องมือ (tool description) เขียนคลุมเครือ โมเดลเลยเดาผิดแล้วส่งค่าผิดประเภทมา เช่น ส่ง "limit": "10" (ข้อความ) แทนที่จะเป็น "limit": 10 (ตัวเลข)
วิธีแก้: เขียน description ของ tool ให้ชัดเจนขึ้น ระบุประเภทและตัวอย่างไว้เลย
{
"name": "search_web",
"description": "ค้นหาข้อมูลจากเว็บไซต์ โดยรับพารามิเตอร์ 2 ตัว คือ query (ข้อความค้นหา ห้ามว่าง) และ limit (จำนวนผลลัพธ์ เป็นตัวเลขจำนวนเต็ม 1-50 ค่า default คือ 10) ตัวอย่าง input: {\"query\": \"สภาพอากาศวันนี้\", \"limit\": 5}",
"input_schema": {
"type": "object",
"properties": {
"query": {
"type": "string",
"minLength": 1,
"description": "ข้อความที่ต้องการค้นหา"
},
"limit": {
"type": "integer",
"minimum": 1,
"maximum": 50,
"default": 10,
"description": "จำนวนผลลัพธ์ (ตัวเลขเท่านั้น เช่น 10 ไม่ใช่ \"10\")"
}
},
"required": ["query"]
}
}
โค้ดตัวอย่างที่ใช้งานได้จริง (ก๊อปไปรันได้เลย)
ตัวอย่างนี้เป็น Python เรียก MCP tool ผ่าน HolySheep AI ครับ ใช้ base_url ตามที่ทางเรากำหนดเท่านั้น ห้ามใช้ยี่ห้ออื่นเพราะจะโดนบ