AI agent & MCP

Kotak masuk email untuk Claude Code, Cursor, Windsurf (MCP)

Setiap agen coding berhenti di kalimat yang sama: “cek email Anda untuk kodenya”. Solusinya adalah satu server MCP, satu URL, tanpa kunci dan tanpa akun — dan konfigurasinya berbeda di setiap client. Berikut konfigurasinya untuk Claude Code, Claude Desktop, Cursor, Windsurf, VS Code, Codex CLI, dan Gemini CLI, lengkap dengan empat panggilan tool yang membawa sebuah pendaftaran sampai selesai dan paragraf yang perlu ditaruh di dalam instruksi agen Anda sendiri.

  • Pemula
  • 14 menit baca
Laptop abu-abu terbuka dengan amplop biru tertancap di sisinya seperti flash disk, dan colokan biru tersandar di soket abu-abu di depan

Satu server, tujuh client

Server-nya adalah satu endpoint HTTPS tunggal yang berbicara Model Context Protocol lewat Streamable HTTP: satu POST yang membawa JSON-RPC, satu balasan JSON, tidak ada stream yang dibiarkan terbuka. Tidak ada yang perlu diinstal, tidak ada yang perlu dijalankan secara lokal, dan tidak ada yang perlu didaftarkan untuk domain publiknya — URL-nya adalah keseluruhan konfigurasinya:

Endpoint MCPhttps://grabmail.io/mcp

Setiap client MCP bisa menerima sebuah server HTTP remote, tapi masing-masing menyimpan konfigurasinya di file yang berbeda dengan nama key yang sedikit berbeda pula. Bagian-bagian di bawah ini memberikan baris persisnya untuk masing-masing. Formatnya adalah yang berlaku per September 2026; dokumentasi masing-masing client adalah acuan yang lebih otoritatif kalau ada yang sudah berubah sejak itu.

Periksa apakah ia merespons, dari shell

Sebelum menyentuh client apa pun, buktikan dulu server-nya benar-benar ada dan lihat apa yang ditawarkannya. Karena transportnya HTTP biasa, satu curl saja sudah cukup:

menampilkan daftar tool-nya
$ curl -s -X POST https://grabmail.io/mcp -H "Content-Type: application/json" -d '{"jsonrpc":"2.0","id":1,"method":"tools/list"}' | jq '.result.tools[].name'
apa yang kembali
"create_inbox"
"list_domains"
"list_messages"
"read_message"
"wait_for_message"
"delete_message"

Kalau itu berhasil, semua client di bawah ini juga akan berhasil, dan client yang tetap gagal setelahnya berarti ada masalah konfigurasi di sisi client itu, bukan masalah di sisi server. Kalau tidak berhasil, periksa apakah jaringan Anda mengizinkan HTTPS keluar ke grabmail.io — itulah keseluruhan jejaknya.

Claude Code

Satu perintah, dari direktori mana pun. Ini mendaftarkan server-nya untuk user Anda, sehingga tersedia di setiap proyek:

shell
$ claude mcp add --transport http grabmail https://grabmail.io/mcp

Untuk membagikannya ke sebuah tim lewat repository sebagai gantinya, batasi cakupannya (scope) ke proyek. Itu akan menulis sebuah .mcp.json di root-nya, yang di-commit ke repository dan yang akan diminta persetujuannya dari rekan tim saat mereka membukanya:

shell — cakupan proyek
$ claude mcp add --transport http --scope project grabmail https://grabmail.io/mcp
.mcp.json — apa yang ditulis cakupan proyek
{
  "mcpServers": {
    "grabmail": {
      "type": "http",
      "url": "https://grabmail.io/mcp"
    }
  }
}

Restart Claude Code, jalankan /mcp, dan grabmail akan terdaftar dengan keenam tool-nya. Server-nya juga menjawab panggilan initialize dari protokolnya dengan sebuah paragraf instruksi singkat, yang diberikan Claude Code ke model-nya — jadi agennya sudah langsung tahu untuk membagikan aliasnya dan menunggu pada alamatnya.

Claude Desktop

Server remote ditambahkan lewat aplikasinya, bukan lewat file konfigurasi:

  1. Buka Settings → Connectors → Add custom connector.
  2. Tempelkan https://grabmail.io/mcp sebagai URL-nya dan beri nama.
  3. Mulai sebuah percakapan baru dan tool-toolnya akan muncul di bawah connector-nya.

Pada versi yang hanya menerima server lokal di claude_desktop_config.json, jembatani endpoint remote-nya dengan mcp-remote, yang berjalan sebagai proses lokal dan meneruskannya ke URL-nya:

claude_desktop_config.json — lewat jembatan mcp-remote
{
  "mcpServers": {
    "grabmail": {
      "command": "npx",
      "args": ["-y", "mcp-remote", "https://grabmail.io/mcp"]
    }
  }
}

Cursor

Cursor membaca .cursor/mcp.json di dalam proyeknya (atau ~/.cursor/mcp.json untuk semua proyek). Sebuah server remote adalah sebuah url:

.cursor/mcp.json
{
  "mcpServers": {
    "grabmail": {
      "url": "https://grabmail.io/mcp"
    }
  }
}

Buka Cursor Settings → MCP untuk melihatnya terdaftar dan mengaktifkan tool-toolnya. Dalam Agent mode, model-nya memanggilnya sendiri; di dalam chat, Anda bisa memintanya lewat namanya.

Windsurf

Windsurf menyimpan server-servernya di ~/.codeium/windsurf/mcp_config.json, dan key untuk sebuah server remote adalah serverUrl, bukan url — satu-satunya tempat bentuknya berbeda:

~/.codeium/windsurf/mcp_config.json
{
  "mcpServers": {
    "grabmail": {
      "serverUrl": "https://grabmail.io/mcp"
    }
  }
}

Cascade akan menampilkan server-nya di daftar setelah di-refresh dari panel MCP-nya. File yang sama juga bisa dijangkau lewat Windsurf Settings → Cascade → MCP servers → View raw config.

VS Code

Agent mode milik VS Code membaca .vscode/mcp.json di dalam workspace-nya, atau file level-user yang ditulis oleh MCP: Add Server di command palette-nya. Server-servernya berada di bawah servers, bukan mcpServers, dan sebuah server remote perlu mendeklarasikan transportnya:

.vscode/mcp.json
{
  "servers": {
    "grabmail": {
      "type": "http",
      "url": "https://grabmail.io/mcp"
    }
  }
}

Sebuah tautan kecil “Start” muncul di atas entrinya di dalam editor; setelah itu, tool-toolnya akan muncul di tool picker milik chat-nya, dan agent mode akan memanggilnya tanpa perlu diminta.

Codex CLI dan Gemini CLI

Codex CLI menyimpan konfigurasinya dalam TOML di ~/.codex/config.toml. Sebuah server remote adalah sebuah table dengan sebuah url:

~/.codex/config.toml
[mcp_servers.grabmail]
url = "https://grabmail.io/mcp"

Gemini CLI membaca ~/.gemini/settings.json (atau .gemini/settings.json di dalam proyek), dan key untuk sebuah server Streamable HTTP adalah httpUrl:

~/.gemini/settings.json
{
  "mcpServers": {
    "grabmail": {
      "httpUrl": "https://grabmail.io/mcp"
    }
  }
}

Versi mana pun dari keduanya yang hanya menerima server lokal bisa menjangkau endpoint-nya lewat jembatan mcp-remote yang sama seperti yang ditunjukkan untuk Claude Desktop: command = "npx", args = ["-y", "mcp-remote", "https://grabmail.io/mcp"].

Keenam tool-nya

Client apa pun itu, model-nya akan melihat keenam tool yang sama dengan nama yang sama. Tidak ada state yang perlu dikelola antar-panggilan, dan tidak satu pun dari tool-tool itu butuh argumen yang tidak dikembalikan oleh panggilan sebelumnya.

create_inbox
Membuat sebuah alamat baru dan mengembalikannya beserta alias-nya dan sebuah next_step yang menjelaskan mana yang dipakai di mana. Tidak ada apa pun yang dipesan di sisi server, jadi ini tidak mungkin gagal. Menerima sebuah prefix yang bisa dibaca, sifatnya opsional.
wait_for_message
Blocking sampai sebuah pesan tiba di alamatnya, sampai 25 detik, lalu mengembalikannya secara lengkap — subjek, pengirim, teks polos, HTML. Lakukan filter dengan subject_contains atau from_contains; sertakan since_id untuk mengabaikan apa yang sudah ada sebelumnya. Setelah penantian yang sepi, ia menjawab timed_out dan meminta untuk dipanggil lagi.
read_message
Satu pesan secara lengkap berdasarkan id-nya. Jarang dibutuhkan, karena penantiannya sudah mengembalikan pesan secara utuh.
list_messages
Semua yang menunggu di sebuah alamat, terbaru lebih dulu, segera — termasuk saat tidak ada apa-apa.
list_domains
Domain-domain publik yang boleh dipakai siapa saja, untuk saat sebuah formulir baru saja menolak salah satunya.
delete_message
Menghapus sebuah pesan sekarang, bukan menunggu 5 hari. Idempoten, jadi seorang agen yang melakukan retry tidak menimbulkan biaya apa pun.

Loop pendaftaran dalam empat panggilan

Inilah urutan yang dibutuhkan hampir setiap tugas, dan client-nya tidak mengubah urutan ini:

  1. create_inbox. Yang kembali adalah sebuah alamat, sebuah alias, dan catatan yang menjelaskan mana yang mana.
  2. Aliasnya masuk ke dalam formulir. Situsnya mendapat alamat yang berfungsi, yang sampai ke kotak suratnya tapi tidak bisa dipakai untuk membukanya.
  3. wait_for_message pada alamatnya, segera setelah mengirimkan formulirnya, dengan subject_contains diatur ke sebuah kata yang akan dibawa email konfirmasinya. Ini blocking; agennya tidak perlu melakukan loop.
  4. Kodenya diambil dari pesan yang dikembalikan penantian itu. Biasanya tidak ada panggilan lain lagi setelah itu.
sebuah prompt yang menjalankan keseluruhan loop-nya
Sign up for a trial at https://app.example.com/signup with a fresh GrabMail inbox.
Use the ALIAS in the form, wait for the confirmation code with wait_for_message
on the ADDRESS, enter it, and tell me the resulting login.

Apa yang perlu ditaruh di dalam instruksi agen Anda sendiri

Server-nya memberi tahu model-nya cara memakainya saat koneksi terjadi, tapi model yang sudah membaca keempat aturan yang sama di dalam instruksi proyeknya sendiri akan mengikutinya setiap saat, bukan cuma kebanyakan saat. Tambahkan ini ke CLAUDE.md, .cursor/rules, .windsurfrules, AGENTS.md, atau GEMINI.md — yang mana pun yang dibaca client Anda:

CLAUDE.md, .cursor/rules, AGENTS.md — paragraf yang sama
## Email

- To receive email, use the `grabmail` MCP server. Call `create_inbox` once per task.
- Put the **alias** it returns into forms; poll the **address** it returns with `wait_for_message`.
- Call `wait_for_message` right after submitting a form, with `subject_contains` set to a word
  you expect ("code", "verify", "confirm"). If it returns `timed_out`, call it again — up to
  three times — before concluding the mail was not sent.
- Never reuse an inbox across tasks. Never send anything confidential to one: it is public.

Dua aturan yang paling penting adalah yang paling sering salah dilakukan seorang agen kalau tidak diberi tahu: taruh aliasnya di dalam formulir dan lakukan polling pada alamatnya, dan perlakukan timed_out sebagai “panggil lagi”, bukan sebagai “emailnya tidak pernah terkirim”. Kotak masuk yang bisa dibaca agen AI membahas keduanya secara mendalam, termasuk mengapa penantiannya kembali sebelum emailnya sendiri kembali.

Saat ini tidak berfungsi

GejalaPenyebabPerbaikan
Server-nya tidak terdaftarFile konfigurasinya ada di tempat yang salah, memakai key yang salah (url / serverUrl / httpUrl / servers), atau client-nya belum di-restart.Salin blok untuk client Anda persis seperti itu, restart, lalu jalankan curl di atas untuk menyingkirkan kemungkinan masalah di sisi server.
Tool-toolnya terdaftar tapi model-nya tidak pernah memanggilnyaTool-toolnya dinonaktifkan di panel MCP milik client-nya, atau model-nya tidak diberi tahu bahwa ada langkah email.Aktifkan tool-toolnya, dan tambahkan paragraf instruksi di atas.
wait_for_message terus mengembalikan timed_outFormulirnya tidak pernah dikirim, aliasnya salah ketik, situsnya menolak domainnya, atau 8 penantian sudah berjalan bersamaan.Panggil lagi sampai tiga kali; periksa error dari formulirnya sendiri; baca mengapa formulir pendaftaran memblokir email sekali pakai.
Situsnya bilang alamatnya tidak validDomain publiknya ada di sebuah daftar blokir email sekali pakai.Pakai domain milik Anda sendiri (satu record MX) atau domain dari kumpulan yang dijaga agar tidak masuk daftar-daftar itu.
Jembatannya (mcp-remote) gagal startTidak ada Node di mesinnya, atau npx tidak bisa menjangkau registry-nya.Instal Node 18 ke atas, atau pakai versi client yang menerima URL-nya secara langsung.

Sebelum Anda menganggapnya selesai

  • curl di atas menampilkan enam tool dari mesin Anda.
  • Server-nya muncul di panel MCP milik client setelah di-restart, dengan tool-toolnya aktif.
  • Paragraf instruksinya ada di dalam file yang dibaca client Anda.
  • Sebuah prompt uji coba berhasil menyelesaikan sebuah pendaftaran: alias di dalam formulir, menunggu pada alamatnya, kodenya berhasil dibaca.
  • Tidak ada apa pun yang bersifat rahasia yang akan pernah dikirim ke salah satu kotak masuk ini — sifatnya publik.

Itulah keseluruhan pengaturannya. Server yang sama berfungsi dari framework apa pun yang berbicara MCP, dan untuk agen yang dibangun tanpa MCP — sebuah fungsi tool biasa di LangChain, OpenAI Agents SDK, atau loop buatan Anda sendiri — email untuk agen AI menunjukkan versi REST dari keempat langkah yang sama.

Pertanyaan

Apakah saya butuh kunci API atau akun untuk server MCP-nya?

Tidak. Domain publiknya tidak butuh kunci, tidak butuh akun, dan tidak butuh header apa pun, dan server MCP-nya mengekspos persis apa yang diekspos REST API-nya. Hanya kumpulan domain berbayar yang dijaga agar tidak masuk daftar blokir email sekali pakai yang memakai sebuah bearer token, dikirim sebagai header Authorization pada endpoint-nya.

Apakah ini Streamable HTTP atau SSE?

Streamable HTTP: satu POST, satu balasan JSON. Tidak ada event stream yang perlu dibiarkan terbuka, itulah sebabnya wait_for_message dibatasi sampai 25 detik — sebuah client yang membuka sebuah GET dengan harapan SSE akan diberi tahu, dalam JSON biasa, bahwa itu tidak ada.

Bisakah beberapa agen berbagi server yang sama sekaligus?

Bisa. Tidak ada session state; setiap panggilan membawa semua yang dibutuhkannya. Satu-satunya batas bersama adalah 8 panggilan wait_for_message yang berjalan sekaligus dari semua orang — melewati itu, tool-nya langsung menjawab timed_out dan meminta untuk dipanggil lagi, dan itu sudah ditangani oleh paragraf instruksi di atas.

Mengapa wait_for_message kembali sebelum emailnya tiba?

Karena sebuah worker server yang sleep selama berapa menit adalah worker yang tidak bisa dipakai orang lain. Penantiannya dibatasi sampai 25 detik dan menjawab timed_out secara jujur alih-alih gagal; agennya memanggil lagi. Tiga panggilan sudah lebih dari satu menit menunggu, dan itu menutupi email transaksional apa pun yang benar-benar terkirim.

Bisakah agennya juga mengirim email?

Tidak. Layanan ini hanya menerima, dan itu memang disengaja — sebuah server gratis tanpa akun yang bisa mengirim akan berubah menjadi relai spam dalam hitungan jam. Agen yang harus mengirim email butuh sebuah provider pengirim; yang ini untuk membaca apa yang kembali.

Apakah kotak masuknya bersifat privat untuk agen saya?

Tidak. Siapa pun yang tahu alamatnya bisa membacanya, baik di domain publik maupun di domain Anda sendiri. Itulah sebabnya alias itu ada: situsnya mendapat alamat yang sampai ke kotak suratnya tapi tidak bisa dipakai untuk membukanya. Jangan pernah biarkan seorang agen mengirim apa pun yang bersifat rahasia ke salah satu kotak masuk ini.

Konfigurasi client mana yang jadi acuan kalau ini berubah?

Dokumentasi masing-masing client itu sendiri. Bentuk-bentuk di atas adalah yang berlaku per September 2026; sisi server-nya tidak berubah mengikuti itu — server-nya tetap satu URL, dan client mana pun yang bisa memanggil server MCP remote lewat HTTP bisa memanggilnya.

Coba selagi masih segar

Alamat hanya perlu satu klik, tanpa akun dan tanpa kartu. Semua yang ada di panduan ini langsung berfungsi dengannya.

Selamat datang kembali

Kotak surat dan domain Anda, di satu tempat.