Pidgeon
resmiAI 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,
.docxveya.xlsxekinin 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ç | İşlevi | Uç nokta |
|---|---|---|
list_addresses | Bu kimlik bilgisinin erişebildiği adresler. | GET /identities |
create_address | Bir ajanın kullanması için adres oluşturur. | POST /identities |
get_address | Kimliğine göre tek bir adres. | GET /identities/{id} |
list_threads | Tek bir adresteki konuşmalar; en yeniden başlayarak. | GET /threads |
get_thread | Kimliğine göre tek bir konuşma. | GET /threads/{id} |
list_messages | Tek bir konuşmanın iletileri; en eskiden başlayarak — yanıtlamadan önce okunması gereken metin. | GET /messages |
search_messages | Bu 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_message | Bu kimlik bilgisinin gönderim yapma yetkisi olduğu bir adresten gönderir. | POST /messages |
get_message | Kimliğ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_message | Bir 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_message | Alı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_message | Bir iletiyi, gönderildiği kişi dışında birine, ekleriyle birlikte, iletiyi alan adresten iletir. | POST /messages/{id}/forward |
create_draft | Bir 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_approval | Bekletilen 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_drafts | Tek 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_draft | Kimliğine göre tek bir taslağı; göndereni, alıcıları, konusu, metni ve ekleriyle birlikte getirir. | GET /drafts/{id} |
update_draft | Gönderdiğiniz alanları değiştirir, geri kalanını olduğu gibi bırakır; null\ konu veya metni temizler. | PATCH /drafts/{id} |
delete_draft | Tek bir taslağı siler ve zamanlanmışsa gönderimini iptal eder. | DELETE /drafts/{id} |
read_attachment | Tek bir ekin metnini getirir — CSV, günlük, JSON, takvim dosyası, PDF, Word .docx\ veya Excel .xlsx\. | GET /attachments/{id}/text |
update_thread | Bir konuşmanın kime ait olduğunu ve hangi aşamada bulunduğunu bildirir. | PATCH /threads/{id} |
update_message | Bir iletiyi yıldızlar veya archive\, spam\ ya da trash\ konumuna taşır. | PATCH /messages/{id} |
list_send_rules | Tek bir adresin izin ve engelleme listesini ve bağlı olduğu gönderim politikasını getirir. | GET /identities/{id}/send-rules |
list_receive_rules | Tek 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_folders | Tek bir adresin tüm klasörlerini ve ileti sayılarını getirir. | GET /mailboxes |
list_folder | Tek 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_changes | Yeni 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_events | Bu 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_labels | Etiketler çalışma alanına değil, adrese aittir; bu nedenle üç adresteki aynı ad, üç farklı kimliğe sahip üç etikettir. | GET /labels |
create_label | Tek bir adresteki bir etiket. | POST /labels |
apply_label | Etiket, 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_label | Tek bir etiketi tek bir konuşmadan kaldırır. | DELETE /threads/{id}/labels |
list_pods | Pod, 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_pod | Kendi gönderici itibarına sahip, müşterilerinizden biri için bir kapsayıcı. | POST /pods |
get_metrics | days\ 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_calendar | Tek 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_calendar | Saat dilimi belirtilmeden oluşturulan bir etkinliğe atanacak saat dilimi; Europe/Lisbon\ gibi bir IANA adı. | PATCH /identities/{id}/calendar |
get_agenda | Bir 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_event | Adres 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_event | Adres id\ takvimine bir etkinlik ekler. | POST /identities/{id}/calendar/events |
update_calendar_event | Tek 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_event | Adres id\ takviminden bir etkinliği kaldırır. | DELETE /identities/{id}/calendar/events/{eventId} |
respond_to_invitation | E-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.