เซิร์ฟเวอร์ MCP - ให้ AI agent แจ้งเตือนหรือโทรหาคุณ
เชื่อมต่อ Claude Code, Codex, Cursor, VS Code, ChatGPT และ AI agent อื่น ๆ เข้ากับเซิร์ฟเวอร์ MCP อย่างเป็นทางการของ Echobell เพื่อให้มันส่งการแจ้งเตือนแบบพุชหรือโทรหาคุณได้
Echobell มีเซิร์ฟเวอร์ Model Context Protocol (MCP) อย่างเป็นทางการ เมื่อเชื่อมต่อเข้ากับ AI agent ของคุณ ไม่ว่าจะเป็น Claude Code, Codex, Cursor, VS Code, Windsurf, Gemini CLI, Claude, ChatGPT หรือ MCP client ตัวอื่น agent จะได้เครื่องมือหนึ่งตัวชื่อ notify ซึ่งใช้ส่งการแจ้งเตือนผ่านช่อง Echobell ช่องหนึ่งของคุณ
สั่งให้ agent รีแฟกเตอร์งานใหญ่ รันชุดทดสอบ หรือ deploy แล้วลุกไปทำอย่างอื่นได้เลย เพียงบอกให้มันแจ้งคุณเมื่อเสร็จ มือถือจะสั่นเมื่องานเสร็จ แสดงการแจ้งเตือนแบบสำคัญตามเวลาเมื่อ agent ต้องการคุณ หรือดังเหมือนสายโทรเข้าเมื่อเกิดปัญหาร้ายแรง
หลักการทำงาน
- นี่คือเซิร์ฟเวอร์ MCP แบบระยะไกลที่
https://mcp.echobell.one/mcpใช้การส่งข้อมูลแบบ Streamable HTTP ไม่ต้องติดตั้งอะไรเลย ไม่มีแพ็กเกจ npm ไม่มีnpxและไม่มีโปรเซสที่รันบนเครื่อง - MCP URL แต่ละอันผูกกับช่องเดียว เมื่อ agent เรียก
notifyทุกคนที่ติดตามช่องนั้นจะได้รับการแจ้งเตือน ตามประเภทการแจ้งเตือนที่แต่ละคนเลือกไว้ - ข้อมูลยืนยันตัวตนคือโทเค็นทริกเกอร์ของช่อง ซึ่งเป็นโทเค็นเดียวกับที่อยู่ท้าย webhook URL ของช่อง เซิร์ฟเวอร์ MCP ทำงานเหมือน webhook ของช่อง เพียงแต่มาในรูปเครื่องมือที่ agent รู้วิธีเรียกใช้
สร้างช่องแยกไว้สำหรับ agent โดยเฉพาะ เช่น "AI Agents" แล้วติดตามช่องนั้นในระดับ โทรเข้า จากนั้น agent จะเลือกระดับใดก็ได้สูงสุดถึงการโทร และคุณยังแชร์ช่องนี้ให้เพื่อนร่วมทีมที่อยากได้รับการแจ้งเตือนเดียวกันได้ด้วย
รับ MCP URL
จากแอป
- เปิดแอป Echobell แล้วแตะช่องที่ต้องการให้ agent ใช้
- ในหน้ารายละเอียดช่อง ให้หาส่วน เชื่อมต่อเอเจนต์ AI
- คัดลอก URL ของเซิร์ฟเวอร์ MCP หรือคัดลอกโค้ดตั้งค่าสำเร็จรูปสำหรับ agent ของคุณ
จาก webhook URL
MCP URL ใช้โทเค็นเดียวกับ webhook URL ของช่อง นำโทเค็นที่อยู่ท้าย webhook URL มาต่อท้าย https://mcp.echobell.one/mcp/:
Webhook URL: https://hook.echobell.one/t/<channel-token>
MCP URL: https://mcp.echobell.one/mcp/<channel-token>
MCP URL มีโทเค็นทริกเกอร์ของช่องอยู่ด้วย ใครก็ตามที่มีมันสามารถส่งการแจ้งเตือนถึงผู้ติดตามของช่องได้ จึงควรเก็บเป็นความลับเหมือนรหัสผ่าน ดูความปลอดภัย
ตั้งค่า agent ของคุณ
โค้ดตั้งค่าทั้งหมดด้านล่างใช้รูปแบบ URL ให้แทนที่ <channel-token> ด้วยโทเค็นทริกเกอร์ของช่อง หรือวางโค้ดที่แอปให้มา ซึ่งใส่โทเค็นไว้ให้แล้ว
Claude Code
claude mcp add --transport http echobell https://mcp.echobell.one/mcp/<channel-token>
เพิ่ม --scope user หากต้องการให้ใช้เซิร์ฟเวอร์นี้ได้ในทุกโปรเจกต์ ไม่ใช่เฉพาะโปรเจกต์ปัจจุบัน
Codex
เพิ่มโค้ดนี้ใน ~/.codex/config.toml:
[mcp_servers.echobell]
url = "https://mcp.echobell.one/mcp/<channel-token>"
Cursor
เพิ่มโค้ดนี้ใน ~/.cursor/mcp.json หรือใน .cursor/mcp.json ของโปรเจกต์:
{
"mcpServers": {
"echobell": {
"url": "https://mcp.echobell.one/mcp/<channel-token>"
}
}
}
VS Code (GitHub Copilot)
เพิ่มโค้ดนี้ใน .vscode/mcp.json ของ workspace แล้วใช้เครื่องมือนี้จาก Copilot Chat ในโหมด agent:
{
"servers": {
"echobell": {
"type": "http",
"url": "https://mcp.echobell.one/mcp/<channel-token>"
}
}
}
หากไฟล์ .vscode/mcp.json ถูก commit เข้า repository ให้ใช้รูปแบบ header พร้อมช่องกรอกโทเค็นแทน เพื่อไม่ให้โทเค็นอยู่ในไฟล์
Windsurf
เพิ่มโค้ดนี้ใน ~/.codeium/windsurf/mcp_config.json:
{
"mcpServers": {
"echobell": {
"serverUrl": "https://mcp.echobell.one/mcp/<channel-token>"
}
}
}
Gemini CLI
เพิ่มโค้ดนี้ใน ~/.gemini/settings.json:
{
"mcpServers": {
"echobell": {
"httpUrl": "https://mcp.echobell.one/mcp/<channel-token>"
}
}
}
Claude Desktop และ claude.ai
- เปิด Settings → Connectors
- เลือก Add custom connector
- ใส่ชื่อ
Echobellและ URLhttps://mcp.echobell.one/mcp/<channel-token>แล้วกดเพิ่ม
connector นี้ใช้ได้ทั้งใน Claude บนเว็บและในแอปเดสก์ท็อป
ChatGPT
- เปิดโหมดนักพัฒนา (developer mode) ในการตั้งค่าของ ChatGPT
- เปิด Settings → Connectors แล้วเลือก Create
- ใส่ URL
https://mcp.echobell.one/mcp/<channel-token>และตั้งค่าการยืนยันตัวตนเป็น No authentication เพราะโทเค็นใน URL คือข้อมูลยืนยันตัวตนอยู่แล้ว
MCP client อื่น ๆ
client ใดก็ตามที่รองรับการส่งข้อมูลแบบ Streamable HTTP ใช้งานได้ทั้งหมด ให้ใส่ URL https://mcp.echobell.one/mcp/<channel-token> หรือใช้รูปแบบ header ด้านล่าง
รูปแบบ header
แทนที่จะใส่โทเค็นไว้ใน URL คุณสามารถส่งโทเค็นผ่าน header Authorization ได้ ทั้งสองรูปแบบให้ผลเหมือนกัน
URL: https://mcp.echobell.one/mcp
Authorization: Bearer <channel-token>
สำหรับ Claude Code:
claude mcp add --transport http echobell https://mcp.echobell.one/mcp \
--header "Authorization: Bearer <channel-token>"
ใน VS Code การใช้ช่องกรอกข้อมูล (input prompt) จะช่วยให้โทเค็นไม่อยู่ใน .vscode/mcp.json จึง commit ไฟล์นี้ได้อย่างปลอดภัย VS Code จะถามโทเค็นเมื่อเริ่มเซิร์ฟเวอร์ครั้งแรกและเก็บไว้อย่างปลอดภัย:
{
"inputs": [
{
"type": "promptString",
"id": "echobell-token",
"description": "Echobell channel trigger token",
"password": true
}
],
"servers": {
"echobell": {
"type": "http",
"url": "https://mcp.echobell.one/mcp",
"headers": {
"Authorization": "Bearer ${input:echobell-token}"
}
}
}
}
เครื่องมือ notify
เซิร์ฟเวอร์มีเครื่องมือเพียงตัวเดียวคือ notify agent จะตัดสินใจเองว่าจะกรอกค่าอย่างไรจาก prompt ของคุณ
| อาร์กิวเมนต์ | ชนิด | จำเป็น | คำอธิบาย |
|---|---|---|---|
title | string | ใช่ | หัวข้อการแจ้งเตือน |
body | string | ไม่ | เนื้อหาการแจ้งเตือน |
link | string (URL) | ไม่ | ลิงก์ที่จะเปิดเมื่อคุณแตะการแจ้งเตือน เช่น pull request, log ของ build หรือแดชบอร์ด |
urgency | string | ไม่ | normal, time-sensitive หรือ calling ไม่ต้องใส่หากต้องการใช้ระดับของผู้ติดตามแต่ละคน ดูระดับความเร่งด่วน |
ระดับความเร่งด่วน
ทุกคนที่ติดตามช่องจะเลือกประเภทการแจ้งเตือนของช่องนั้นในแอป ได้แก่ ปกติ สำคัญตามเวลา หรือโทรเข้า ตัวเลือกนี้คือระดับสูงสุดที่ช่องจะติดต่อคนคนนั้นได้
- เมื่อ agent ไม่ได้ส่ง
urgencyผู้ติดตามแต่ละคนจะได้รับตามระดับที่ตนเลือกไว้ - เมื่อ agent ส่ง
urgencyมา จะทำได้เพียงลดระดับของผู้ติดตามเท่านั้น ไม่สามารถเพิ่มได้ หากคุณติดตามในระดับโทรเข้า"urgency": "normal"จะมาถึงเป็นการแจ้งเตือนปกติ หากคุณติดตามในระดับปกติ"urgency": "calling"ก็ยังมาถึงเป็นการแจ้งเตือนปกติ
ด้วยวิธีนี้ ช่องเดียวก็ครอบคลุมได้ทุกกรณี ติดตามในระดับโทรเข้า แล้วบอก agent ให้ส่งอัปเดตทั่วไปเป็น normal และใช้ calling เฉพาะเมื่อมีบางอย่างพังเท่านั้น
ต่างจาก notificationType ในคำขอ webhook ตรงที่ urgency ใช้ได้กับช่องที่เปิดใช้เทมเพลตแบบกำหนดเองด้วย
การโทรเข้าต้องใช้ Echobell Premium
การแจ้งเตือนแบบโทรเข้าเป็นฟีเจอร์ของ Echobell Premium เมื่อ agent ขอ calling ผู้ติดตามที่ไม่มี Premium จะได้รับการแจ้งเตือนแบบสำคัญตามเวลาแทน ซึ่งเป็นพฤติกรรมเดียวกับในแอปและ webhook
โทรเข้าได้ 1 ครั้งต่อนาทีต่อช่อง
ช่องหนึ่งจะโทรหาผู้ติดตามแต่ละคนได้ไม่เกิน 1 ครั้งต่อนาที หาก agent ขอโทรอีกครั้งภายในนาทีนั้น เช่น เพราะติดอยู่กับการลองใหม่ซ้ำ ๆ ผู้ติดตามจะได้รับการแจ้งเตือนแบบสำคัญตามเวลาแทน ซึ่งยังทะลุโหมดโฟกัสได้ webhook และทริกเกอร์อีเมลก็ใช้กฎเดียวกัน
agent จะได้รับแจ้งทั้งสองกรณี ผลลัพธ์ของเครื่องมือจะระบุทุกกรณีที่ถูกลดระดับ agent จึงรู้ว่ามือถือไม่ได้ดัง และบอกคุณตามจริงได้ แทนที่จะเข้าใจไปเองว่าโทรหาคุณแล้ว
สิ่งที่ agent ได้รับกลับมา
การเรียก notify แต่ละครั้งจะส่งข้อความสรุปสั้น ๆ ให้ agent พร้อมข้อมูลแบบมีโครงสร้าง:
{
"notificationTriggered": true,
"reason": null,
"requestedUrgency": "calling",
"recipients": 1,
"deliveredUrgency": { "normal": 0, "time-sensitive": 1, "calling": 0 },
"fallbacks": [
{
"from": "calling",
"to": "time-sensitive",
"reason": "premium-required",
"recipients": 1
}
]
}
| ฟิลด์ | ความหมาย |
|---|---|
notificationTriggered | เป็น true เมื่อส่งการแจ้งเตือนแล้ว |
reason | เหตุผลที่ไม่มีการส่ง: conditions-not-met (เงื่อนไขของช่องไม่ตรง) หรือ no-subscribers (ไม่มีใครติดตามช่องนี้) เป็น null เมื่อส่งการแจ้งเตือนแล้ว |
requestedUrgency | ค่า urgency ที่ agent ขอ หรือ null เมื่อไม่ได้ส่งมา |
recipients | จำนวนผู้ติดตามที่ได้รับการแจ้งเตือน |
deliveredUrgency | จำนวนผู้ติดตามที่ได้รับในแต่ละระดับ |
fallbacks | ผู้ติดตามที่ได้รับระดับต่ำกว่าที่ขอ พร้อมเหตุผล: premium-required (การโทรเข้าต้องใช้ Premium) subscriber-setting (ระดับที่ผู้ติดตามตั้งไว้สำหรับช่องนี้ต่ำกว่า) หรือ call-cooldown (ช่องนี้โทรหาผู้ติดตามคนนั้นไปแล้วภายใน 1 นาทีที่ผ่านมา) |
ช่องแบบส่งผ่านและช่องแบบเทมเพลต
เซิร์ฟเวอร์ MCP ใช้ได้กับช่องทั้งสองแบบ:
- ช่องแบบส่งผ่าน (ค่าเริ่มต้น) จะแสดง
titleและbodyตามที่ agent ส่งมาทุกประการ - ช่องแบบเทมเพลต (ที่เปิด เทมเพลตกำหนดเอง ใน การตั้งค่าขั้นสูง) จะสร้างการแจ้งเตือนจากเทมเพลตของคุณ โดยมี
title,body,link,externalLinkและurgencyให้ใช้เป็นตัวแปรในเทมเพลต และเงื่อนไขของช่องก็ยังมีผลเหมือนเดิม เมื่อเงื่อนไขไม่ตรง จะไม่มีการส่งอะไร และ agent จะได้รับreason: "conditions-not-met"
ตัวอย่าง prompt
เมื่อเชื่อมต่อเซิร์ฟเวอร์แล้ว ก็ขอการแจ้งเตือนด้วยภาษาธรรมดาได้เลย:
- "รันชุดทดสอบทั้งหมด แล้วแจ้งฉันผ่าน Echobell เมื่อเสร็จ"
- "รีแฟกเตอร์โมดูลการชำระเงิน ถ้าต้องให้ฉันตัดสินใจอะไร ให้ส่งการแจ้งเตือน Echobell แบบสำคัญตามเวลามา"
- "Deploy ขึ้น staging ถ้า deploy ล้มเหลวให้โทรหาฉัน ถ้าไม่มีปัญหาให้ส่งการแจ้งเตือนปกติพร้อม URL"
- "เมื่อ migration เสร็จ แจ้งฉันพร้อมสรุปและลิงก์ไปยัง pull request"
ถ้าอยากให้เป็นนิสัยของ agent ให้เพิ่มข้อความประมาณนี้ลงในไฟล์คำสั่งของ agent (CLAUDE.md, AGENTS.md, .cursorrules เป็นต้น):
When a task takes longer than a few minutes, call the Echobell notify tool when it finishes.
Use urgency "calling" only when something is broken and needs me right away.
ความปลอดภัย
- โทเค็นคือข้อมูลยืนยันตัวตน ใครก็ตามที่มี MCP URL (หรือโทเค็น) สามารถส่งการแจ้งเตือนถึงผู้ติดตามของช่องได้ แต่อ่านข้อมูลใด ๆ หรือแก้ไขบัญชีของคุณไม่ได้ สิ่งเดียวที่ทำได้คือส่งการแจ้งเตือน
- อย่าใส่ไว้ในไฟล์ที่แชร์กัน อย่า commit ไฟล์ตั้งค่าที่มี URL แบบมีโทเค็น สำหรับการตั้งค่าระดับโปรเจกต์ ให้ใช้รูปแบบ headerร่วมกับช่องกรอกข้อมูลหรือตัวแปรสภาพแวดล้อม
- เพิกถอนสิทธิ์ด้วยการรีเซ็ตโทเค็นทริกเกอร์ เปิดช่องในแอปแล้วรีเซ็ตโทเค็นทริกเกอร์ MCP URL เดิมจะใช้งานไม่ได้ทันที (คำขอจะได้รับ
401 Unauthorized) และ webhook URL เดิมก็เช่นกัน จากนั้นอัปเดตโทเค็นใหม่ให้ agent และระบบที่เรียก webhook
ขีดจำกัดและข้อผิดพลาด
- ขีดจำกัดอัตรา: แต่ละโทเค็นรับคำขอ MCP ได้สูงสุด 120 ครั้งต่อนาที คำขอ MCP มีโควตาของตัวเอง แยกจากคำขอ webhook ของช่อง
- 401 Unauthorized: ไม่มีโทเค็น โทเค็นไม่ถูกต้อง หรือโทเค็นถูกรีเซ็ตไปแล้ว
เนื้อหาที่เกี่ยวข้อง
- Webhook — ทริกเกอร์ช่องเดียวกันจากสคริปต์ CI และบริการอื่น ๆ
- ประเภทการแจ้งเตือน — ความแตกต่างระหว่างปกติ สำคัญตามเวลา และโทรเข้า
- เทมเพลต และเงื่อนไข — กำหนดรูปแบบและกรองการแจ้งเตือน