Pidgeon

resmi

AI ajanlar için e-posta gelen kutuları: kendilerine ait adresler, yazışmalar, e-posta gönderme, yanıtlar ve gelen postalar.

Pidgeon MCP ile neler yapabilirsiniz?

  • Gelen kutusunu oku — Adresleri, ileti dizilerini ve iletileri listeleyin veya anahtarın erişebildiği tüm adreslerde ileti metnini arayın.
  • Gönder ve yanıtla — Anahtarın adına gönderim yapabildiği bir adresten ileti gönderin, bir iletiyi yanıtlayın veya ekleriyle birlikte iletin.
  • Doğrulama e-postasını bekle — Bir iletinin gelmesini bekleyin ve çıkarılan doğrulama kodlarını ve onay bağlantılarını alın.
  • Onay için taslak oluştur — Bir kişinin incelemesi için taslaklar oluşturun, ardından bekletilen bir gönderimin onaylanıp onaylanmadığını veya süresinin dolup dolmadığını kontrol edin.
  • Ekleri oku — Bir CSV, günlük, JSON, takvim dosyası, PDF, .docx veya .xlsx ekinin metnini çıkarın.
  • Takvimi yönet — Bir adresin ajandasını okuyun, etkinlik oluşturun veya güncelleyin ve e-posta olarak gelen toplantı davetlerini kabul ya da reddedin.

Barındırılan MCP Sunucusu

npx add-mcp 'https://pidgeon.ai/api/mcp'

Claude Code, Codex, Cursor ve daha fazlasına kurulur

Dokümantasyon

Bir ajan, Pidgeon gelen kutusunu doğrudan yönetebilir: okuyabilir, yanıtlayabilir, içinde adresler oluşturabilir. Pidgeon, bu belgelerin açıkladığı API üzerinden Model Context Protocol konuşur — bir protokol adaptörüdür, başka bir şey değil.

İki erişim yolu vardır ve ikisi de aynı sunucuya çıkar. Barındırılan sürüm kurulum gerektirmez; paket ise sunucuyu makinenizde çalıştırır.

Barındırılan sürüm: bir URL

claude mcp add --transport http pidgeon https://pidgeon.ai/api/mcp

İlk çağrı 401 yanıtını verir ve istemci sizi oturum açmanız için Pidgeon'a yönlendirir. Neler yapabileceğini — okuma, okuma ve gönderme ya da tam erişim — ve nelere erişebileceğini seçersiniz: tek bir adres ya da hesabın sahibiyseniz tüm adresler. Bu seçim bir API anahtarına dönüşür ve istemci bu anahtar için bir belirteç tutar. Developers → API keys → Connected apps altında görünür; buradan bağlantıyı keserseniz istemci bir sonraki çağrısında bağlantı sonlanır.

Claude'un özel bağlayıcıları, ChatGPT, Grok, Cursor, Codex ve VS Code aynı URL'yi kullanır ve aynı şekilde oturum açar. Her istek kendi başına yanıtlanır: sunucu oturum tutmaz, çünkü saklayacağı kendine ait bir durumu yoktur.

Oturum açacak kimsenin olmadığı bir ajan için bunun yerine bir anahtar gönderin:

claude mcp add --transport http pidgeon https://pidgeon.ai/api/mcp \
--header "Authorization: Bearer $PIDGEON_API_KEY"

x-api-key da çalışır. Cursor, Codex (JSON değil, TOML okur) ve VS Code için adım adım yönergeler; Windsurf ve Gemini CLI da aynı URL'yi ve başlığı kullanır.

Grok'ta

Grok'ta Connectors → Custom bölümüne https://pidgeon.ai/api/mcp yapıştırın ve izin ekranında oturum açın; anahtar gerekmez (adım adım yönergeler). Meta'nın Muse'u Meta tarafından inceleniyor.

Cursor'da

cursor.directory listesindeki Pidgeon'ı Cursor'a ekle seçeneğini kullanın; bu seçenek barındırılan sunucuyu ve beceriyi içerir.

Ya da sunucuyu elle, ~/.cursor/mcp.json içine ekleyin (tek bir proje için .cursor/mcp.json). Yalnızca URL gerekir; Cursor ilk çağrıda oturum açmanızı sağlar:

{
"mcpServers": {
  "pidgeon": {
    "url": "https://pidgeon.ai/api/mcp"
  }
}
}

Oturum açacak kimsenin olmadığı bir ajan için URL'nin yanına "headers": { "Authorization": "Bearer ${env:PIDGEON_API_KEY}" } ekleyin; Cursor bunu ortamınızdan alır.

Codex, VS Code ve Gemini CLI

Codex, VS Code ve Gemini CLI için tek bir komut, sunucuyu istemcinin kendi dosyasına yazar:

npx -y @pidgeon-ai/mcp init --client codex    # ~/.codex/config.toml
npx -y @pidgeon-ai/mcp init --client vscode   # .vscode/mcp.json
npx -y @pidgeon-ai/mcp init --client gemini   # .gemini/settings.json

Anahtar ayarlanmamışsa yalnızca URL'yi yazar ve istemci oturum açmanızı sağlar. PIDGEON_API_KEY ayarlanmışsa önce anahtarı doğrular, ardından istemcinin anahtarı bu değişkenden okumasını (Codex, Gemini CLI) ya da bir kez istemesini (VS Code) sağlar; böylece anahtar dosyaya yazılmaz. Yorumlar dâhil mevcut içeriği korur, değiştirdiği dosyanın bir kopyasını <file>.bak konumuna alır, ikinci kez çalıştırıldığında hiçbir şey yapmaz ve farklı bir pidgeon girdisini yalnızca --force ile değiştirir. --scope user veya --scope project diğer dosyayı seçer; --print hiçbir şey yazmaz.

Ya da kurulu sürüm: bir paket

PIDGEON_API_KEY=pgn_live_… npx -y @pidgeon-ai/mcp init

Bu, herhangi bir şey yazmadan önce anahtarı API'ye karşı doğrular ve hangi adreslere erişebildiğini size bildirir — bir JSON bloğunun yanıtlayamayacağı tek soru. Aksi hâlde bu durum, modelin sessizce bir hata alması ve sizin bunu hiç görmemeniz şeklinde ortaya çıkar. Ardından geçerli dizinde .mcp.json dosyasını yazar ve yazdıklarını gösterir. Zaten mevcut olan bir girdiyi asla değiştirmez: bunu --force yapar; --print ise hiçbir şey yazmadan yapılandırmayı gösterir. İstemciniz yapılandırmayı başka bir yerde tutuyorsa kullanmanız gereken seçenek budur.

Anahtar dosyaya yazılmak yerine ortam değişkenine başvurur; böylece yapılandırma depoya eklenebilir, kimlik bilgisi ise eklenemez:

{
"mcpServers": {
  "pidgeon": {
    "command": "npx",
    "args": ["-y", "@pidgeon-ai/mcp"],
    "env": { "PIDGEON_API_KEY": "${PIDGEON_API_KEY}" }
  }
}
}

Claude Desktop veya başka bir MCP istemcisi aynı bloğu kullanır. Sunucuyu doğrudan çalıştırmak için — çoğunlukla başlangıç sürecini izlemek amacıyla kullanışlıdır:

PIDGEON_API_KEY=pgn_live_… npx -y @pidgeon-ai/mcp

PIDGEON_BASE_URL sunucuyu production dışında bir yere yönlendirir; bu yalnızca Pidgeon'ı kendiniz çalıştırıyorsanız işe yarar.

Erişim denetiminin tamamı anahtardan ibarettir

Bu işlem modele bir API anahtarı verir — sizin oluşturduğunuz ya da oturum açarak yetki verdiğiniz bir anahtarı. Pakette, erişilebilecek yerleri belirleyen hiçbir şey yoktur: anahtarın kendi sınırı ve erişim izni verilen adresler, diğer tüm çağrılarda olduğu gibi sunucu tarafında her şeyi belirler. Burada yanlış ayarlanabilecek ikinci bir kural kümesi yoktur.

Bu nedenle ajana ihtiyacı olan en kısıtlı anahtarı verin. read konumunda oluşturulan bir anahtar, gelen kutusuna ne kadar geniş erişim verilirse verilsin asla gönderim yapamaz — bir anahtarın erişim kapsamının ne anlama geldiğini ve nasıl daraltılacağını öğrenmek için Kimlik Doğrulama bölümüne bakın. Yalnızca önceliklendirme yapan bir ajan, yalnızca okuma yetkisi olan bir anahtar kullanmalıdır; böylece utandırıcı bir şey gönderip gönderemeyeceği, istemle ilgili bir soru olmaktan çıkar.

Bir anahtarın erişim kapsamı, kendisine verilen adreslerin anlık görüntüsüdür; dolayısıyla anahtar oluşturulduktan sonra eklenen bir adres bu kapsama girmez.

Sunduğu özellikler

Sunucunun kendi listesinden okunan 42 aracın tamamı; böylece bu sayfa sunucunun gerisinde kalamaz:

AraçİşleviUç nokta
list_addressesBu kimlik bilgisinin erişebildiği adresler.GET /identities
create_addressBir ajanın kullanması için adres oluşturur.POST /identities
get_addressKimliğine göre tek bir adres.GET /identities/{id}
list_threadsTek bir adresteki konuşmalar; en yeniden başlayarak.GET /threads
get_threadKimliğine göre tek bir konuşma.GET /threads/{id}
list_messagesTek bir konuşmanın iletileri; en eskiden başlayarak — yanıtlamadan önce okunması gereken metin.GET /messages
search_messagesBu kimlik bilgisinin erişebildiği tüm adreslerde tam metin araması yapar ve sonuçları alaka düzeyine göre sıralar.GET /messages/search
send_messageBu kimlik bilgisinin gönderim yapma yetkisi olduğu bir adresten gönderir.POST /messages
get_messageKimliğine göre tek bir iletiyi; gövdesi, sakladığımız başlıklar ve gönderen alan adının kayıtlarının kanıtladıklarıyla birlikte getirir — authentication.spf\, .dkim\, .dmarc\; null, başarısızlık değil, bilginin bildirilmediği anlamına gelir.GET /messages/{id}
await_messageBir adrese ileti gelene kadar bekler — örneğin bir kayıt formu gönderdikten sonra — ve iletiyi extracted.codes\ ile extracted.links\ birlikte döndürür: önce en olası doğrulama kodları ve onay bağlantıları.GET /messages/await
reply_to_messageAlıcılar, konu ve ileti dizisi yanıtlanan iletiden alınır; böylece yalnızca yazmanız gereken metni sağlarsınız.POST /messages/{id}/reply
forward_messageBir iletiyi, gönderildiği kişi dışında birine, ekleriyle birlikte, iletiyi alan adresten iletir.POST /messages/{id}/forward
create_draftBir iletiyi göndermeden yazar; bir kişinin okuyup göndermesi içindir — yanıtları onay için hazırlamanız istendiğinde kullanın.POST /drafts
get_draft_approvalBekletilen bir gönderimin durumunu, draft\_id\ değerine göre bildirir: biri panoda onaylayana veya reddedene kadar pending\; ardından approved\ (gönderilmiştir ve message\_id\ iletidir), rejected\ ya da 24 saat boyunca kimse karar vermezse expired\.GET /drafts/{id}/approval
list_draftsTek bir adresteki tüm taslakları, alıcıları ve gövdeleriyle birlikte en yeniden başlayarak listeler; böylece bir taslağa geri dönüp tamamlayabilirsiniz.GET /drafts
get_draftKimliğine göre tek bir taslağı; göndereni, alıcıları, konusu, metni ve ekleriyle birlikte getirir.GET /drafts/{id}
update_draftGönderdiğiniz alanları değiştirir, geri kalanını olduğu gibi bırakır; null\ konu veya metni temizler.PATCH /drafts/{id}
delete_draftTek bir taslağı siler ve zamanlanmışsa gönderimini iptal eder.DELETE /drafts/{id}
read_attachmentTek bir ekin metnini getirir — CSV, günlük, JSON, takvim dosyası, PDF, Word .docx\ veya Excel .xlsx\.GET /attachments/{id}/text
update_threadBir konuşmanın kime ait olduğunu ve hangi aşamada bulunduğunu bildirir.PATCH /threads/{id}
update_messageBir iletiyi yıldızlar veya archive\, spam\ ya da trash\ konumuna taşır.PATCH /messages/{id}
list_send_rulesTek bir adresin izin ve engelleme listesini ve bağlı olduğu gönderim politikasını getirir.GET /identities/{id}/send-rules
list_receive_rulesTek bir adrese nelerin ulaşacağını belirleyen kuralları — gönderen veya alan adına göre reddetme, spam'e taşıma, çöpe atma, arşivleme ya da gelen kutusuna alma — ve adresin receive\_policy\ değerini getirir.GET /identities/{id}/receive-rules
list_foldersTek bir adresin tüm klasörlerini ve ileti sayılarını getirir.GET /mailboxes
list_folderTek bir adresin klasörünü, en yeniden başlayarak ve her satırda bir konuşma olacak şekilde getirir — list\_threads\ hangi konuşmaların var olduğunu söylerken bu araç, bunların nerede dosyalandığını ve listede nasıl göründüğünü söyler.GET /mailboxes/{folder}
list_changesYeni iletiler dâhil, bir gelen kutusunda sync\_cursor\ değerinden bu yana gerçekleşen tüm değişiklikleri getirir; böylece uzun süre çalışan bir ajan yeni bir ileti bulmak için klasörü baştan okumaz.GET /mailboxes/changes
list_eventsBu kimlik bilgisinin erişebildiği tüm adreslerdeki her olayı getirir — alınan, gönderilen, teslim edilen, geri dönen ve dosyalanan postalar.GET /events
list_labelsEtiketler çalışma alanına değil, adrese aittir; bu nedenle üç adresteki aynı ad, üç farklı kimliğe sahip üç etikettir.GET /labels
create_labelTek bir adresteki bir etiket.POST /labels
apply_labelEtiket, konuşmanın bulunduğu adresle aynı adrese ait olmalıdır — o adres için list\_labels\ size doğru kimliği verir.POST /threads/{id}/labels
remove_labelTek bir etiketi tek bir konuşmadan kaldırır.DELETE /threads/{id}/labels
list_podsPod, kendi müşterilerinizden biri için bir kapsayıcıdır: adresleri ve alan adlarını barındırır; **buradan gönderilen postalar kendi gönderici itibarına sahip olur**, böylece bir müşteri diğerinin teslimatını olumsuz etkileyemez.GET /pods
create_podKendi gönderici itibarına sahip, müşterilerinizden biri için bir kapsayıcı.POST /pods
get_metricsdays\ zaman aralığındaki gönderilen, teslim edilen, geri dönen, reddedilen, şikâyet edilen, alınan ve spam iletiler — olay günlüğünden sayılır; bu nedenle sağlayıcının sonradan bildirdiği sonuçları da içerir.GET /metrics
get_calendarTek bir adresin takvimi; adresin id\ değerine göre: varsayılan saat dilimi ve içerdiği etkinlik sayısı.GET /identities/{id}/calendar
update_calendarSaat dilimi belirtilmeden oluşturulan bir etkinliğe atanacak saat dilimi; Europe/Lisbon\ gibi bir IANA adı.PATCH /identities/{id}/calendar
get_agendaBir adresin takviminde after\ ile before\ (ISO 8601 tarih-saatleri) arasındaki etkinlikler; başlangıç saatine göre sıralanır ve yinelenen bir etkinliğin her tarihi ayrı listelenir.GET /identities/{id}/calendar/agenda
get_calendar_eventAdres id\ takvimindeki, eventId\ değerine göre tek bir etkinlik: saatleri, açıklaması, konumu, yinelenme bilgisi ve yanıtlarıyla birlikte katılımcıları.GET /identities/{id}/calendar/events/{eventId}
create_calendar_eventAdres id\ takvimine bir etkinlik ekler.POST /identities/{id}/calendar/events
update_calendar_eventTek bir takvim etkinliğini değiştirir: gönderdiğiniz alanları günceller, geri kalanını olduğu gibi bırakır.PATCH /identities/{id}/calendar/events/{eventId}
delete_calendar_eventAdres id\ takviminden bir etkinliği kaldırır.DELETE /identities/{id}/calendar/events/{eventId}
respond_to_invitationE-posta olarak gelen bir toplantı davetini, iletinin id\ değerine göre yanıtlar: accepted\, declined\ veya tentative\; isteğe bağlı bir comment\ ile.POST /messages/{id}/invitation/respond

Her araç, başvuru belgesinde yanındaki uç noktadır ve aynı ret kurallarına tabidir. Anahtarın kullanmasına izin verilmeyen bir araç, API'nin vereceği cümleyle ve API'nin başarısız olduğu şekilde başarısız olur.

Anahtar belirli bir adres belirtmediğiniz sürece arama, anahtarın erişebildiği tüm adresleri kapsar; her sonuçta hangi adreste bulunduğu belirtilir.

Ne değildir

Bu bir ajan çalışma zamanı değildir ve hiçbir şeye karar vermez. Pidgeon, hangi modeli çalıştırdığınız veya modelin neleri sonuçlandırmasına izin verildiği konusunda görüş bildirmez — ürünün geri kalanına ilişkin aynı yaklaşım Konuşmalar ve devretme bölümünde de benimsenir. Ajan takılırsa konuşmayı bir kişiye devretmek, bu paketin bir özelliği değil, ileti dizisinin durumudur.