---
title: "Server MCP - Agen AI Kirim Notifikasi atau Telepon Anda"
sidebarTitle: Server MCP
description: "Hubungkan Claude Code, Codex, Cursor, ChatGPT, dan agen AI lain ke server MCP resmi Echobell untuk menerima notifikasi push atau panggilan telepon."
---

# Server MCP untuk Agen AI

Echobell menjalankan server [Model Context Protocol](https://modelcontextprotocol.io) (MCP) resmi. Hubungkan server ini ke agen AI Anda — Claude Code, Codex, Cursor, VS Code, Windsurf, Gemini CLI, Claude, ChatGPT, atau klien MCP lainnya — dan agen tersebut mendapat satu tool, `notify`, yang mengirim notifikasi lewat salah satu saluran Echobell Anda.

Mulai refaktor panjang, menjalankan tes, atau deploy, lalu tinggalkan komputer dan minta agen memberi tahu Anda saat pekerjaannya selesai. Ponsel Anda bergetar saat pekerjaan rampung, menampilkan peringatan peka waktu saat agen membutuhkan Anda, atau berdering seperti panggilan telepon saat terjadi masalah serius.

## Cara Kerjanya

- Ini adalah server MCP **jarak jauh** di `https://mcp.echobell.one/mcp` yang memakai transport Streamable HTTP. Tidak ada yang perlu dipasang: tanpa paket npm, tanpa `npx`, tanpa proses lokal.
- Setiap URL MCP milik **satu saluran**. Saat agen memanggil `notify`, semua orang yang berlangganan saluran itu menerima notifikasinya, masing-masing dengan [jenis notifikasi](/docs/notification) yang mereka pilih.
- Kredensialnya adalah **token pemicu** saluran — token yang sama dengan bagian akhir URL webhook saluran. Server MCP bekerja seperti [webhook](/docs/webhook) saluran, dalam bentuk tool yang sudah dipahami cara pemanggilannya oleh agen.

<Callout type="info">
  Buat saluran khusus untuk agen Anda, misalnya "Agen AI", dan berlanggananlah
  dengan jenis **Panggilan**. Agen Anda lalu bisa memilih tingkat apa pun hingga
  panggilan, dan Anda bisa membagikan saluran itu kepada rekan tim yang ingin
  menerima peringatan yang sama.
</Callout>

## Dapatkan URL MCP Anda

### Dari Aplikasi

1. Buka aplikasi Echobell dan ketuk saluran yang ingin dipakai agen Anda.
2. Di detail saluran, cari bagian **Hubungkan Agen AI**.
3. Salin **URL server MCP**, atau salin cuplikan penyiapan siap pakai untuk agen Anda.

### Dari URL Webhook

URL MCP memakai token yang sama dengan URL webhook saluran. Ambil token dari akhir URL webhook dan letakkan setelah `https://mcp.echobell.one/mcp/`:

```
Webhook URL: https://hook.echobell.one/t/<channel-token>
MCP URL:     https://mcp.echobell.one/mcp/<channel-token>
```

<Callout type="warn">
  URL MCP berisi token pemicu saluran Anda. Siapa pun yang memilikinya bisa
  mengirim notifikasi ke pelanggan saluran, jadi jaga kerahasiaannya seperti
  kata sandi. Lihat [Keamanan](#keamanan).
</Callout>

## Siapkan Agen Anda

Semua cuplikan di bawah memakai bentuk URL. Ganti `<channel-token>` dengan token pemicu saluran Anda, atau tempelkan cuplikan dari aplikasi yang tokennya sudah terisi.

### Claude Code

```bash
claude mcp add --transport http echobell https://mcp.echobell.one/mcp/<channel-token>
```

Tambahkan `--scope user` agar server tersedia di semua proyek, bukan hanya di proyek saat ini.

### Codex

Tambahkan ini ke `~/.codex/config.toml`:

```toml
[mcp_servers.echobell]
url = "https://mcp.echobell.one/mcp/<channel-token>"
```

### Cursor

Tambahkan ini ke `~/.cursor/mcp.json`, atau ke `.cursor/mcp.json` di dalam proyek:

```json
{
  "mcpServers": {
    "echobell": {
      "url": "https://mcp.echobell.one/mcp/<channel-token>"
    }
  }
}
```

### VS Code (GitHub Copilot)

Tambahkan ini ke `.vscode/mcp.json` di workspace Anda, lalu gunakan tool-nya dari Copilot Chat dalam mode agen:

```json
{
  "servers": {
    "echobell": {
      "type": "http",
      "url": "https://mcp.echobell.one/mcp/<channel-token>"
    }
  }
}
```

Jika `.vscode/mcp.json` di-commit ke repositori Anda, gunakan [bentuk header dengan prompt input](#bentuk-header) agar token tidak ada di dalam file.

### Windsurf

Tambahkan ini ke `~/.codeium/windsurf/mcp_config.json`:

```json
{
  "mcpServers": {
    "echobell": {
      "serverUrl": "https://mcp.echobell.one/mcp/<channel-token>"
    }
  }
}
```

### Gemini CLI

Tambahkan ini ke `~/.gemini/settings.json`:

```json
{
  "mcpServers": {
    "echobell": {
      "httpUrl": "https://mcp.echobell.one/mcp/<channel-token>"
    }
  }
}
```

### Claude Desktop dan claude.ai

1. Buka **Settings → Connectors**.
2. Pilih **Add custom connector**.
3. Masukkan nama `Echobell` dan URL `https://mcp.echobell.one/mcp/<channel-token>`, lalu tambahkan.

Konektor ini tersedia di Claude versi web maupun di aplikasi desktop.

### ChatGPT

1. Aktifkan mode developer di pengaturan ChatGPT.
2. Buka **Settings → Connectors** dan pilih **Create**.
3. Masukkan URL `https://mcp.echobell.one/mcp/<channel-token>` dan atur autentikasi ke **No authentication** — token di dalam URL itulah kredensialnya.

### Klien MCP Lain

Klien apa pun yang mendukung transport Streamable HTTP bisa dipakai. Berikan URL `https://mcp.echobell.one/mcp/<channel-token>`, atau gunakan bentuk header di bawah.

### Bentuk Header

Alih-alih menaruh token di URL, Anda bisa mengirimnya di header `Authorization`. Kedua bentuk ini setara.

```
URL:            https://mcp.echobell.one/mcp
Authorization:  Bearer <channel-token>
```

Dengan Claude Code:

```bash
claude mcp add --transport http echobell https://mcp.echobell.one/mcp \
  --header "Authorization: Bearer <channel-token>"
```

Di VS Code, prompt input menjaga token tetap di luar `.vscode/mcp.json`, sehingga file itu aman untuk di-commit. VS Code menanyakan token saat server pertama kali dijalankan dan menyimpannya dengan aman:

```json
{
  "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`

Server ini menyediakan satu tool saja, `notify`. Agen Anda menentukan cara mengisinya berdasarkan prompt Anda.

| Argumen | Tipe | Wajib | Deskripsi |
|---|---|---|---|
| `title` | string | Ya | Judul notifikasi. |
| `body` | string | Tidak | Isi notifikasi. |
| `link` | string (URL) | Tidak | Tautan yang dibuka saat Anda mengetuk notifikasi, misalnya pull request, log build, atau dasbor. |
| `urgency` | string | Tidak | `normal`, `time-sensitive`, atau `calling`. Kosongkan untuk memakai tingkat masing-masing pelanggan. Lihat [Urgensi](#urgensi). |

## Urgensi

Setiap orang yang berlangganan sebuah saluran memilih jenis notifikasi untuknya di aplikasi: Normal, Peka Waktu, atau Panggilan. Pilihan itu adalah tingkat **tertinggi** yang bisa dipakai saluran untuk menjangkau mereka.

- Jika agen tidak mengirim `urgency`, setiap pelanggan menerima tingkat yang mereka pilih.
- Jika agen mengirim `urgency`, ia hanya bisa **menurunkan** tingkat pelanggan, tidak pernah menaikkannya. Jika Anda berlangganan dengan jenis Panggilan, `"urgency": "normal"` tiba sebagai notifikasi normal. Jika Anda berlangganan dengan jenis Normal, `"urgency": "calling"` tetap tiba sebagai notifikasi normal.

Dengan begitu, satu saluran bisa mencakup semuanya. Berlanggananlah dengan jenis Panggilan, lalu minta agen mengirim kabar rutin sebagai `normal` dan memakai `calling` hanya saat ada yang rusak.

Berbeda dengan `notificationType` pada permintaan webhook, `urgency` juga berlaku di saluran dengan template kustom.

### Panggilan Memerlukan Echobell Premium

Notifikasi panggilan adalah fitur Echobell Premium. Saat agen meminta `calling`, pelanggan tanpa Premium menerima notifikasi **peka waktu** sebagai gantinya — sama seperti yang terjadi di aplikasi dan webhook.

### Satu Panggilan per Menit untuk Setiap Saluran

Sebuah saluran menelepon setiap pelanggan paling banyak sekali per menit. Jika agen meminta panggilan lain dalam menit itu — misalnya karena terjebak mencoba ulang terus-menerus — pelanggan menerima notifikasi **peka waktu** sebagai gantinya, yang tetap bisa menembus mode fokus. Webhook dan pemicu email mengikuti aturan yang sama.

Agen diberi tahu soal kedua hal ini. Hasil tool mencantumkan setiap penurunan tingkat, jadi agen tahu ponsel Anda tidak berdering dan bisa menyampaikannya alih-alih menganggap Anda sudah ditelepon.

## Apa yang Diterima Agen

Setiap panggilan `notify` mengembalikan ringkasan teks singkat untuk agen beserta data terstruktur:

```json
{
  "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
    }
  ]
}
```

| Field | Arti |
|---|---|
| `notificationTriggered` | `true` jika notifikasi terkirim. |
| `reason` | Alasan tidak ada yang terkirim: `conditions-not-met` ([kondisi](/docs/conditions) saluran tidak terpenuhi) atau `no-subscribers` (tidak ada yang berlangganan saluran). `null` jika notifikasi terkirim. |
| `requestedUrgency` | `urgency` yang diminta agen, atau `null` jika tidak diisi. |
| `recipients` | Jumlah pelanggan yang menerima notifikasi. |
| `deliveredUrgency` | Jumlah pelanggan yang menerima tiap tingkat. |
| `fallbacks` | Pelanggan yang menerima tingkat lebih rendah dari yang diminta, beserta alasannya: `premium-required` (panggilan memerlukan Premium), `subscriber-setting` (tingkat pilihan pelanggan untuk saluran itu lebih rendah), atau `call-cooldown` (saluran sudah menelepon pelanggan itu dalam satu menit terakhir). |

## Saluran Passthrough dan Saluran Templat

Server MCP bekerja dengan kedua jenis saluran:

- **Saluran passthrough** (bawaan) menampilkan `title` dan `body` persis seperti yang dikirim agen.
- **Saluran templat** (dengan **Templat kustom** dinyalakan di bawah **Advanced Settings**) menyusun notifikasi dari [templat](/docs/template) Anda. `title`, `body`, `link`, `externalLink`, dan `urgency` tersedia sebagai variabel templat, dan [kondisi](/docs/conditions) saluran tetap berlaku. Jika kondisinya tidak terpenuhi, tidak ada yang dikirim dan agen menerima `reason: "conditions-not-met"`.

## Contoh Prompt

Setelah server terhubung, minta notifikasi dengan bahasa sehari-hari:

- "Jalankan seluruh rangkaian tes dan kirimi saya notifikasi Echobell kalau sudah selesai."
- "Refaktor modul pembayaran. Kirimi saya peringatan Echobell peka waktu kalau kamu butuh keputusan dari saya."
- "Deploy ke staging. Telepon saya kalau deploy gagal, kalau tidak kirim notifikasi normal berisi URL-nya."
- "Saat migrasi selesai, kirimi saya notifikasi berisi ringkasan dan tautan ke pull request."

Agar jadi kebiasaan, tambahkan baris seperti ini ke file instruksi agen Anda (`CLAUDE.md`, `AGENTS.md`, `.cursorrules`, dan sebagainya):

```
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.
```

## Keamanan

- **Token adalah kredensial.** Siapa pun yang memiliki URL MCP (atau tokennya) bisa mengirim notifikasi ke pelanggan saluran. Token ini tidak bisa membaca apa pun atau mengubah akun Anda — satu-satunya yang bisa dilakukannya adalah mengirim notifikasi.
- **Jauhkan dari file bersama.** Jangan commit file konfigurasi yang berisi bentuk URL. Untuk konfigurasi tingkat proyek, gunakan [bentuk header](#bentuk-header) dengan prompt input atau variabel lingkungan.
- **Cabut akses dengan mengatur ulang token pemicu.** Buka saluran di aplikasi dan atur ulang token pemicunya. URL MCP lama langsung berhenti berfungsi (permintaan mendapat `401 Unauthorized`), begitu pula URL webhook lama. Perbarui agen dan pemanggil webhook Anda dengan token baru.

## Batasan dan Error

- **Batas laju**: Setiap token menerima hingga 120 permintaan MCP per menit. Permintaan MCP punya kuotanya sendiri, terpisah dari permintaan webhook saluran.
- **401 Unauthorized**: Token tidak ada, salah, atau sudah diatur ulang.

## Terkait

- [Webhook](/docs/webhook) — picu saluran yang sama dari skrip, CI, dan layanan lain
- [Jenis notifikasi](/docs/notification) — perbedaan Normal, Peka Waktu, dan Panggilan
- [Templat](/docs/template) dan [Kondisi](/docs/conditions) — bentuk dan saring notifikasi
