Máy chủ MCP - Để AI agent báo tin hoặc gọi điện cho bạn
Kết nối Claude Code, Codex, Cursor, ChatGPT và các AI agent khác với máy chủ MCP chính thức của Echobell để nhận thông báo đẩy hoặc cuộc gọi.
Echobell vận hành một máy chủ Model Context Protocol (MCP) chính thức. Hãy kết nối nó với AI agent của bạn — Claude Code, Codex, Cursor, VS Code, Windsurf, Gemini CLI, Claude, ChatGPT hay bất kỳ MCP client nào khác — và agent sẽ có một tool duy nhất, notify, dùng để gửi thông báo qua một kênh Echobell của bạn.
Hãy khởi động một đợt refactor dài, một lượt chạy test hay một lần deploy, rồi cứ đi làm việc khác và dặn agent báo cho bạn khi xong. Điện thoại sẽ rung khi công việc hoàn tất, hiện cảnh báo khẩn cấp khi agent cần bạn, hoặc đổ chuông như một cuộc gọi khi có chuyện nghiêm trọng.
Cách hoạt động
- Đây là máy chủ MCP từ xa tại
https://mcp.echobell.one/mcp, dùng giao thức truyền Streamable HTTP. Không cần cài gì cả: không có gói npm, không cónpx, không có tiến trình chạy cục bộ. - Mỗi MCP URL thuộc về một kênh. Khi agent gọi
notify, mọi người đăng ký kênh đó đều nhận được thông báo, mỗi người theo kiểu thông báo mà họ đã chọn. - Thông tin xác thực là token kích hoạt của kênh — chính là token nằm ở cuối webhook URL của kênh. Máy chủ MCP hoạt động giống webhook của kênh, chỉ khác là có thêm một tool mà agent biết cách gọi.
Hãy tạo một kênh riêng cho các agent, chẳng hạn "AI Agents", và đăng ký nó ở mức Cuộc gọi. Khi đó agent có thể chọn bất kỳ mức nào, cao nhất là một cuộc gọi, và bạn có thể chia sẻ kênh với những đồng đội muốn nhận cùng các cảnh báo này.
Lấy MCP URL
Từ ứng dụng
- Mở ứng dụng Echobell và chạm vào kênh mà bạn muốn agent sử dụng.
- Trong phần chi tiết kênh, tìm mục Kết nối tác tử AI.
- Sao chép URL máy chủ MCP, hoặc sao chép đoạn cấu hình dựng sẵn cho agent của bạn.
Từ webhook URL
MCP URL dùng cùng token với webhook URL của kênh. Lấy token ở cuối webhook URL và đặt nó sau 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 chứa token kích hoạt của kênh. Ai có nó cũng có thể gửi thông báo tới những người đăng ký kênh, vì vậy hãy giữ kín nó như một mật khẩu. Xem phần Bảo mật.
Thiết lập agent
Mọi đoạn cấu hình bên dưới đều dùng dạng URL. Thay <channel-token> bằng token kích hoạt của kênh, hoặc dán đoạn cấu hình mà ứng dụng cung cấp — token đã được điền sẵn trong đó.
Claude Code
claude mcp add --transport http echobell https://mcp.echobell.one/mcp/<channel-token>
Thêm --scope user để máy chủ dùng được trong mọi dự án, không chỉ dự án hiện tại.
Codex
Thêm đoạn này vào ~/.codex/config.toml:
[mcp_servers.echobell]
url = "https://mcp.echobell.one/mcp/<channel-token>"
Cursor
Thêm đoạn này vào ~/.cursor/mcp.json, hoặc vào .cursor/mcp.json trong một dự án:
{
"mcpServers": {
"echobell": {
"url": "https://mcp.echobell.one/mcp/<channel-token>"
}
}
}
VS Code (GitHub Copilot)
Thêm đoạn này vào .vscode/mcp.json trong workspace, rồi dùng tool từ Copilot Chat ở chế độ agent:
{
"servers": {
"echobell": {
"type": "http",
"url": "https://mcp.echobell.one/mcp/<channel-token>"
}
}
}
Nếu .vscode/mcp.json được commit vào repository, hãy dùng dạng header kèm hộp nhập thay thế để token không nằm trong file.
Windsurf
Thêm đoạn này vào ~/.codeium/windsurf/mcp_config.json:
{
"mcpServers": {
"echobell": {
"serverUrl": "https://mcp.echobell.one/mcp/<channel-token>"
}
}
}
Gemini CLI
Thêm đoạn này vào ~/.gemini/settings.json:
{
"mcpServers": {
"echobell": {
"httpUrl": "https://mcp.echobell.one/mcp/<channel-token>"
}
}
}
Claude Desktop và claude.ai
- Mở Settings → Connectors.
- Chọn Add custom connector.
- Nhập tên
Echobellvà URLhttps://mcp.echobell.one/mcp/<channel-token>, rồi thêm connector.
Connector này dùng được cả trên Claude bản web lẫn ứng dụng desktop.
ChatGPT
- Bật chế độ nhà phát triển (developer mode) trong phần cài đặt của ChatGPT.
- Mở Settings → Connectors và chọn Create.
- Nhập URL
https://mcp.echobell.one/mcp/<channel-token>và đặt xác thực là No authentication — token trong URL chính là thông tin xác thực.
Các MCP client khác
Mọi client hỗ trợ giao thức truyền Streamable HTTP đều dùng được. Hãy đưa cho nó URL https://mcp.echobell.one/mcp/<channel-token>, hoặc dùng dạng header bên dưới.
Dạng header
Thay vì đặt token trong URL, bạn có thể gửi nó trong header Authorization. Hai dạng này tương đương nhau.
URL: https://mcp.echobell.one/mcp
Authorization: Bearer <channel-token>
Với Claude Code:
claude mcp add --transport http echobell https://mcp.echobell.one/mcp \
--header "Authorization: Bearer <channel-token>"
Trong VS Code, một hộp nhập (input prompt) giúp token không nằm trong .vscode/mcp.json, nên có thể commit file này một cách an toàn. VS Code sẽ hỏi token ở lần đầu khởi động máy chủ và lưu nó một cách bảo mật:
{
"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}"
}
}
}
}
Tool notify
Máy chủ cung cấp một tool duy nhất là notify. Agent sẽ tự quyết định cách điền các tham số dựa trên prompt của bạn.
| Tham số | Kiểu | Bắt buộc | Mô tả |
|---|---|---|---|
title | string | Có | Tiêu đề thông báo. |
body | string | Không | Nội dung thông báo. |
link | string (URL) | Không | Liên kết được mở khi bạn chạm vào thông báo, chẳng hạn một pull request, log build hay dashboard. |
urgency | string | Không | normal, time-sensitive hoặc calling. Bỏ trống để dùng mức riêng của từng người đăng ký. Xem Mức khẩn cấp. |
Mức khẩn cấp
Mỗi người đăng ký một kênh đều chọn kiểu thông báo cho kênh đó trong ứng dụng: Thông thường, Khẩn cấp hoặc Cuộc gọi. Lựa chọn đó là mức cao nhất mà kênh có thể dùng để báo cho họ.
- Khi agent không gửi
urgency, mỗi người đăng ký nhận đúng mức họ đã chọn. - Khi agent gửi
urgency, nó chỉ có thể hạ mức của người đăng ký, không bao giờ nâng lên. Nếu bạn đăng ký ở mức Cuộc gọi,"urgency": "normal"sẽ đến dưới dạng thông báo thông thường. Nếu bạn đăng ký ở mức Thông thường,"urgency": "calling"vẫn chỉ đến dưới dạng thông báo thông thường.
Nhờ vậy một kênh có thể đảm nhận mọi việc. Hãy đăng ký ở mức Cuộc gọi, rồi dặn agent gửi các cập nhật thường lệ với normal và chỉ dùng calling khi có thứ gì đó bị hỏng.
Khác với notificationType trong request webhook, urgency vẫn có hiệu lực trên các kênh dùng mẫu tùy chỉnh.
Cuộc gọi cần Echobell Premium
Thông báo dạng cuộc gọi là tính năng của Echobell Premium. Khi agent yêu cầu calling, người đăng ký không có Premium sẽ nhận một thông báo khẩn cấp (time-sensitive) thay thế — giống hệt cách ứng dụng và webhook xử lý.
Mỗi kênh chỉ gọi một lần mỗi phút
Một kênh chỉ gọi mỗi người đăng ký tối đa một lần mỗi phút. Nếu agent yêu cầu thêm một cuộc gọi trong phút đó — chẳng hạn vì nó bị kẹt trong vòng thử lại — người đăng ký sẽ nhận một thông báo khẩn cấp thay thế, vẫn vượt qua được chế độ tập trung. Webhook và kích hoạt qua email cũng tuân theo quy tắc này.
Agent sẽ được báo về cả hai trường hợp. Kết quả của tool liệt kê mọi trường hợp bị hạ mức, nên agent biết điện thoại đã không đổ chuông và có thể nói rõ với bạn thay vì tưởng rằng bạn đã được gọi.
Agent nhận lại gì
Mỗi lần gọi notify trả về một bản tóm tắt ngắn dạng văn bản cho agent kèm dữ liệu có cấu trúc:
{
"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
}
]
}
| Trường | Ý nghĩa |
|---|---|
notificationTriggered | true khi đã gửi thông báo. |
reason | Lý do không có gì được gửi: conditions-not-met (điều kiện của kênh không khớp) hoặc no-subscribers (không ai đăng ký kênh). null khi đã gửi thông báo. |
requestedUrgency | Giá trị urgency mà agent yêu cầu, hoặc null khi agent không gửi. |
recipients | Số người đăng ký đã được thông báo. |
deliveredUrgency | Số người đăng ký nhận ở từng mức. |
fallbacks | Những người đăng ký nhận mức thấp hơn yêu cầu, và lý do: premium-required (cuộc gọi cần Premium), subscriber-setting (mức riêng của người đăng ký cho kênh này thấp hơn) hoặc call-cooldown (kênh đã gọi người đăng ký đó trong vòng một phút vừa qua). |
Kênh passthrough và kênh dùng mẫu
Máy chủ MCP hoạt động với cả hai loại kênh:
- Kênh passthrough (mặc định) hiển thị
titlevàbodyđúng như agent gửi. - Kênh dùng mẫu (đã bật Mẫu tùy chỉnh trong Cài đặt nâng cao) dựng thông báo từ các mẫu của bạn.
title,body,link,externalLinkvàurgencycó sẵn dưới dạng biến mẫu, và điều kiện của kênh vẫn được áp dụng. Khi điều kiện không khớp, sẽ không có gì được gửi và agent nhậnreason: "conditions-not-met".
Ví dụ prompt
Sau khi máy chủ đã được kết nối, hãy yêu cầu thông báo bằng ngôn ngữ tự nhiên:
- "Chạy toàn bộ bộ test và báo cho tôi qua Echobell khi xong."
- "Refactor module thanh toán. Gửi cho tôi một cảnh báo Echobell khẩn cấp nếu bạn cần tôi quyết định điều gì."
- "Deploy lên staging. Gọi cho tôi nếu deploy thất bại, còn không thì gửi một thông báo thông thường kèm URL."
- "Khi migration xong, báo cho tôi kèm bản tóm tắt và liên kết tới pull request."
Để biến nó thành thói quen, hãy thêm một đoạn như sau vào file hướng dẫn của agent (CLAUDE.md, AGENTS.md, .cursorrules, v.v.):
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.
Bảo mật
- Token chính là thông tin xác thực. Ai có MCP URL (hoặc token) đều có thể gửi thông báo tới những người đăng ký kênh. Nó không thể đọc bất cứ thứ gì hay thay đổi tài khoản của bạn — việc duy nhất nó làm được là gửi thông báo.
- Đừng để nó trong các file dùng chung. Đừng commit file cấu hình có chứa dạng URL. Với cấu hình cấp dự án, hãy dùng dạng header kèm hộp nhập hoặc biến môi trường.
- Thu hồi quyền truy cập bằng cách đặt lại token kích hoạt. Mở kênh trong ứng dụng và đặt lại token kích hoạt của nó. MCP URL cũ ngừng hoạt động ngay lập tức (các request nhận
401 Unauthorized), và webhook URL cũ cũng vậy. Hãy cập nhật token mới cho các agent và các nơi gọi webhook.
Giới hạn và lỗi
- Giới hạn tần suất: Mỗi token nhận tối đa 120 request MCP mỗi phút. Request MCP có hạn mức riêng, tách biệt với các request webhook của kênh.
- 401 Unauthorized: Token bị thiếu, sai, hoặc đã được đặt lại.
Liên quan
- Webhook — kích hoạt cùng kênh đó từ script, CI và các dịch vụ khác
- Kiểu thông báo — sự khác nhau giữa Thông thường, Khẩn cấp và Cuộc gọi
- Mẫu và Điều kiện — định hình và lọc thông báo