Yapay zeka ajanları ve MCP

Claude Code, Cursor ve Windsurf için MCP ile e-posta kutusu

Her kodlama ajanı aynı cümlede takılır: "kodu e-postanızdan kontrol edin". Çözüm tek bir MCP sunucusu, tek bir URL, anahtar ve hesap yok — ve yapılandırma her istemcide farklıdır. İşte Claude Code, Claude Desktop, Cursor, Windsurf, VS Code, Codex CLI ve Gemini CLI için bu yapılandırma; bir kaydı sonuna kadar taşıyan dört araç çağrısı ve ajanın kendi talimatlarına konacak paragrafla birlikte.

  • Başlangıç
  • 14 dk okuma
Yanına USB bellek gibi mavi bir zarf takılı açık gri bir dizüstü bilgisayar ve önünde gri bir prize takılı mavi bir fiş

Tek bir sunucu, yedi istemci

Sunucu, Streamable HTTP üzerinden Model Context Protocol konuşan tek bir HTTPS endpoint'idir: JSON-RPC taşıyan bir POST, bir JSON yanıt, açık tutulan bir akış yok. Genel alan adlarında kurulacak hiçbir şey, yerel olarak çalıştırılacak hiçbir şey ve kaydolacak hiçbir şey yoktur — yapılandırmanın tamamı URL'dir:

MCP endpointhttps://grabmail.io/mcp

Her MCP istemcisi uzak bir HTTP sunucusunu kabul eder, ama her biri yapılandırmasını farklı bir dosyada, biraz farklı bir anahtar adıyla tutar. Aşağıdaki bölümler her biri için tam satırı verir. Biçimler, Eylül 2026 itibarıyla güncel olanlardır; biri o tarihten sonra değiştiyse, otorite her istemcinin kendi belgeleridir.

Bir kabuktan, yanıt verdiğini kontrol edin

Herhangi bir istemciye dokunmadan önce, sunucunun orada olduğunu kanıtlayın ve ne sunduğunu görün. Taşıma yöntemi düz HTTP olduğu için, tek bir curl yeterlidir:

araçları listele
$ 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'
geri gelen şey
"create_inbox"
"list_domains"
"list_messages"
"read_message"
"wait_for_message"
"delete_message"

Bu çalışırsa, aşağıdaki her istemci de çalışacaktır ve o zaman başarısız olan bir istemci, bir sunucu sorunu değil, istemcideki bir yapılandırma sorunudur. Çalışmazsa, ağınızın grabmail.io'e giden HTTPS'e izin verdiğini kontrol edin — ayak izinin tamamı budur.

Claude Code

Herhangi bir dizinden, tek bir komut. Sunucuyu kullanıcınız için kaydeder, böylece her projede kullanılabilir olur:

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

Bunun yerine bir ekiple depo üzerinden paylaşmak için, kapsamını projeye daraltın. Bu, kökte kaydedilen ve takım arkadaşlarının onaylaması istenen bir .mcp.json yazar:

kabuk — proje kapsamı
$ claude mcp add --transport http --scope project grabmail https://grabmail.io/mcp
.mcp.json — proje kapsamının yazdığı şey
{
  "mcpServers": {
    "grabmail": {
      "type": "http",
      "url": "https://grabmail.io/mcp"
    }
  }
}

Claude Code'u yeniden başlatın, /mcp'yi çalıştırın ve grabmail altı aracıyla birlikte listelenir. Sunucu ayrıca protokolün initialize çağrısını, Claude Code'un modele beslediği kısa bir talimat paragrafıyla yanıtlar — böylece ajan, takma adı vermeyi ve adresi beklemeyi zaten bilerek gelir.

Claude Desktop

Uzak sunucular, yapılandırma dosyası yerine uygulama üzerinden eklenir:

  1. Settings → Connectors → Add custom connector.
  2. https://grabmail.io/mcp'i URL olarak yapıştırın ve ona bir isim verin.
  3. Yeni bir konuşma başlatın ve araçlar bağlayıcının altında görünür.

claude_desktop_config.json'da yalnızca yerel sunucuları kabul eden bir sürümde, yerel bir süreç olarak çalışıp URL'ye yönlendiren mcp-remote ile uzak endpoint'i köprüleyin:

claude_desktop_config.json — mcp-remote köprüsü üzerinden
{
  "mcpServers": {
    "grabmail": {
      "command": "npx",
      "args": ["-y", "mcp-remote", "https://grabmail.io/mcp"]
    }
  }
}

Cursor

Cursor, projedeki .cursor/mcp.json'ı okur (ya da her proje için ~/.cursor/mcp.json'ı). Uzak bir sunucu, bir url'dir:

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

Listelendiğini görmek ve araçlarını etkinleştirmek için Cursor Settings → MCP'yi açın. Agent modunda model bunları kendiliğinden çağırır; sohbette isimleriyle isteyebilirsiniz.

Windsurf

Windsurf, sunucularını ~/.codeium/windsurf/mcp_config.json'da tutar ve uzak bir sunucu için anahtar, url değil serverUrl'dir — şeklin farklılaştığı tek yer:

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

Cascade, MCP panelinden bir yenilemenin ardından sunucuyu listeler. Aynı dosyaya Windsurf Settings → Cascade → MCP servers → View raw config üzerinden de ulaşılabilir.

VS Code

VS Code'un agent modu, çalışma alanındaki .vscode/mcp.json'ı ya da komut paletindeki MCP: Add Server'ın yazdığı kullanıcı düzeyindeki dosyayı okur. Sunucular mcpServers altında değil servers altında yaşar ve uzak bir sunucu kendi taşıma yöntemini bildirir:

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

Düzenleyicide girdinin üzerinde küçük bir "Start" bağlantısı görünür; bundan sonra araçlar sohbetin araç seçicisinde görünür ve agent modu bunları sorulmadan çağırır.

Codex CLI ve Gemini CLI

Codex CLI, yapılandırmasını ~/.codex/config.toml'da TOML olarak tutar. Uzak bir sunucu, bir url'si olan bir tablodur:

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

Gemini CLI, ~/.gemini/settings.json'ı (ya da projede .gemini/settings.json'ı) okur ve bir Streamable HTTP sunucusu için anahtar httpUrl'dir:

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

İkisinden de yalnızca yerel sunucuları kabul eden bir sürüm, endpoint'e Claude Desktop için gösterilen aynı mcp-remote köprüsüyle ulaşabilir: command = "npx", args = ["-y", "mcp-remote", "https://grabmail.io/mcp"].

Altı araç

İstemci ne olursa olsun, model aynı isimlere sahip aynı altı aracı görür. Çağrılar arasında yönetilecek bir durum yoktur ve hiçbiri, öncekinin döndürmediği bir argümana ihtiyaç duymaz.

create_inbox
Taze bir adres uydurur ve onu takma adıyla ve hangisinin nerede kullanılacağını söyleyen bir next_step ile döndürür. Sunucu tarafında hiçbir şey ayrılmaz, bu yüzden başarısız olamaz. İsteğe bağlı, okunabilir bir prefix alır.
wait_for_message
Adrese bir mesaj gelene kadar, en fazla 25 saniye, bloklar, ardından onu tam olarak döndürür — konu, gönderen, düz metin, HTML. subject_contains ya da from_contains ile filtreleyin; zaten orada olanı yok saymak için since_id geçirin. Sessiz bir beklemenin ardından timed_out yanıtı verir ve yeniden çağrılmasını ister.
read_message
Kimliğe göre bir mesajın tamamı. Nadiren gereklidir, çünkü bekleme zaten mesajın tamamını döndürür.
list_messages
Bir adreste bekleyen her şey, en yeniden başlayarak, anında — hiçbir şey olmadığında dahil.
list_domains
Herkesin kullanabileceği genel alan adları, bir formun bunlardan birini az önce reddettiği durumlar için.
delete_message
Bir mesajı 5 gün içinde değil, şimdi kaldırır. İdempotenttir, bu yüzden yeniden deneyen bir ajanın hiçbir bedeli yoktur.

Dört çağrıda kayıt döngüsü

Bu, neredeyse her görevin ihtiyaç duyduğu sıradır ve istemci bunu değiştirmez:

  1. create_inbox. Karşılığında bir adres, bir takma ad ve hangisinin hangisi olduğunu söyleyen bir not gelir.
  2. Takma ad, forma girer. Site, posta kutusuna ulaşan ama onu açmak için kullanılamayan, çalışan bir adres alır.
  3. Adres üzerinde wait_for_message, gönderimin hemen ardından, subject_contains onay postasının taşıyacağı bir kelimeye ayarlanmış olarak. Bloklar; ajan döngüye girmez.
  4. Kod, beklemenin döndürdüğü mesajdan çıkar. Genellikle başka hiçbir çağrı gerekmez.
döngünün tamamını çalıştıran bir prompt
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.

Ajanın kendi talimatlarına ne konmalı

Sunucu, bağlantı anında modele kendisini nasıl kullanacağını söyler, ama aynı dört kuralı kendi proje talimatlarında okumuş bir model, bunları çoğu zaman yerine her seferinde izler. Bunu CLAUDE.md, .cursor/rules, .windsurfrules, AGENTS.md ya da GEMINI.md'ye ekleyin — istemcinin okuduğu hangisiyse:

CLAUDE.md, .cursor/rules, AGENTS.md — aynı paragraf
## 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.

En çok önem taşıyan iki kural, bir ajanın söylenmeden yanlış yaptığı kurallardır: takma adı forma koyun ve adresi yoklayın, ve timed_out'u "postanın hiç gönderilmediği" değil, "yeniden çağır" olarak ele alın. Bir yapay zekâ ajanının okuyabileceği bir gelen kutusu, beklemenin posta gelmeden önce neden döndüğü dahil, ikisini de derinlemesine ele alır.

Çalışmadığında

BelirtiNedenÇözüm
Sunucu listelenmiyorYapılandırma dosyası yanlış yerde, yanlış anahtarı kullanıyor (url / serverUrl / httpUrl / servers) ya da istemci yeniden başlatılmadı.İstemciniz için bloğu tam olarak kopyalayın, yeniden başlatın ve sunucuyu eleyecek şekilde yukarıdaki curl'ü çalıştırın.
Araçlar listeleniyor ama model bunları hiç çağırmıyorAraçlar istemcinin MCP panelinde devre dışı ya da modele bir e-posta adımının var olduğu söylenmedi.Bunları etkinleştirin ve yukarıdaki talimat paragrafını ekleyin.
wait_for_message sürekli timed_out döndürüyorForm hiç gönderilmedi, takma ad yanlış yazıldı, site alan adını reddetti ya da zaten 8 bekleme çalışıyor.En fazla üç kez yeniden çağırın; formun kendi hatasını kontrol edin; kayıt formları neden tek kullanımlık e-postayı engeller rehberini okuyun.
Site adresin geçersiz olduğunu söylüyorGenel alan adı bir tek kullanımlık posta kara listesinde.Kendi alan adınızı kullanın (tek bir MX kaydı) ya da listelerin dışında tutulan havuzdan bir alan adı.
Köprü (mcp-remote) başlamıyorMakinede Node yok ya da npx kayıt defterine ulaşamıyor.Node 18+'ı kurun ya da URL'yi doğrudan kabul eden bir istemci sürümü kullanın.

Bitti demeden önce

  • Yukarıdaki curl, makinenizden altı aracı listeliyor.
  • Sunucu, bir yeniden başlatmanın ardından istemcinin MCP panelinde görünüyor, araçlar etkin.
  • Talimat paragrafı, istemcinizin okuduğu dosyada.
  • Bir test prompt'u bir kaydı tamamladı: formda takma ad, adres üzerinde bekleme, okunan kod.
  • Bu gelen kutularından birine hiçbir zaman gizli bir şey gönderilmeyecek — bunlar geneldir.

Kurulumun tamamı bu kadar. Aynı sunucu, MCP konuşan herhangi bir framework'ten çalışır ve MCP olmadan inşa edilmiş ajanlar için — LangChain'de düz bir araç fonksiyonu, OpenAI Agents SDK ya da kendi döngünüz — yapay zekâ ajanları için e-posta, aynı dört adımın REST sürümünü gösterir.

Sorular

MCP sunucusu için bir API anahtarına ya da hesaba ihtiyacım var mı?

Hayır. Genel alan adları anahtar, hesap ya da başlık gerektirmez ve MCP sunucusu tam olarak REST API'nin sunduğunu sunar. Yalnızca tek kullanımlık posta kara listelerinin dışında tutulan ücretli alan adı havuzu, endpoint üzerinde bir Authorization başlığı olarak geçirilen bir bearer token kullanır.

Streamable HTTP mi yoksa SSE mi?

Streamable HTTP: bir POST, bir JSON yanıt. Açık tutulacak bir olay akışı yoktur, bu yüzden wait_for_message 25 saniyeyle sınırlıdır — SSE bekleyerek bir GET açan bir istemciye, düz JSON içinde, böyle bir şeyin olmadığı söylenir.

Birden fazla ajan sunucuyu aynı anda paylaşabilir mi?

Evet. Oturum durumu yoktur; her çağrı ihtiyaç duyduğu her şeyi taşır. Tek paylaşılan sınır, herkes genelinde aynı anda 8 wait_for_message çağrısının çalışmasıdır — bunun ötesinde araç anında timed_out yanıtı verir ve yeniden çağrılmasını ister, ki bunu yukarıdaki talimat paragrafı ele alır.

wait_for_message neden posta gelmeden önce döner?

Çünkü dakikalarca uyuyan bir sunucu worker'ı, başka kimsenin kullanamayacağı bir worker'dır. Bekleme 25 saniyeyle sınırlıdır ve başarısız olmak yerine dürüstçe timed_out der; ajan yeniden çağırır. Üç çağrı bir dakikadan fazla beklemedir, bu da gerçekten gönderilmiş herhangi bir işlemsel postayı kapsar.

Ajan e-posta da gönderebilir mi?

Hayır. Hizmet, tasarım gereği yalnızca alır — hesabı olmayan ve gönderebilen ücretsiz bir sunucu, bir saat içinde bir spam aktarıcısına dönüşürdü. Posta göndermesi gereken bir ajanın bir gönderim sağlayıcısına ihtiyacı vardır; bu sunucu geri geleni okumak içindir.

Gelen kutusu ajanıma özel mi?

Hayır. Genel bir alan adında da kendi alan adınızda da, adresi bilen herkes onu okuyabilir. Takma adın var olma nedeni de budur: site, posta kutusuna ulaşan ama onu açmak için kullanılamayan bir adres alır. Bir ajanın bu gelen kutularından birine asla gizli bir şey göndermesine izin vermeyin.

Bunlar değişirse hangi istemci yapılandırması referanstır?

Her istemcinin kendi belgeleri. Yukarıdaki şekiller, Eylül 2026 itibarıyla güncel olanlardır; sunucu tarafı bunlarla değişmez — tek bir URL'dir ve HTTP üzerinden uzak bir MCP sunucusunu çağırabilen herhangi bir istemci onu çağırabilir.

Henüz tazeyken deneyin

Bir adres tek tıkla alınır, hesap ve kart gerekmez. Bu rehberdeki her şey onunla hemen çalışır.

Tekrar hoş geldiniz

Kutularınız ve alan adlarınız tek bir yerde.