TL;DR: Beş MCP sunucusunu tek Cursor sohbetine kurun: WhatsApp gönderimi, okuması ve sağlık kontrolü için Whapi.Cloud; CRM satırları için PostgreSQL; webhook handler için GitHub; istek yolu için Sentry; staging arayüzü için Playwright. Her iş akışını önce tek başına kanıtlayın. Bileşik prompt'u ancak her kart çalıştıktan sonra yazın. CRM'i, repoyu, hataları veya tarayıcıyı hiç okumayan, yalnızca gönderim yapan Cloud API sarmalayıcılarını eleyin.
Beş MCP sunucusu Python geliştiricisine WhatsApp'ı, CRM verisini, kaynak kodunu, üretim hatalarını ve CRM arayüzünü tek bir AI agent'ta verir. WhatsApp entegrasyonu böylece beş REST istemcisi yerine tek sohbetten yürür. Bu iş akışında WhatsApp API MCP'si Whapi.Cloud'dur. PostgreSQL, GitHub, Sentry ve Playwright ise eşlik eden katmanlardır.
Ekiplerin yalnızca Graph'e bağlı bir WhatsApp MCP'si kurup psql, GitHub ve Sentry'yi başka pencerelerde bırakmasına sık rastlıyoruz. CRM'de lead oluşturmayan gelen sohbet, bu boşluğu gösteren senaryodur.
Model Context Protocol, araç erişimini tek bir agent oturumunda standartlaştırır. Kanalı bağlayın, mcp.json yapıştırmayı atlayın, ardından beş iş akışını çalıştırın.
'En iyi WhatsApp API MCP sunucuları' araması aslında neyi kastediyor
SERP sorgusu tek agent sohbetindeki beş yığın katmanını adlandırır; beş WhatsApp API'sini değil. Yalnızca gönderim yapan bir Cloud API MCP'si CRM'i, GitHub'ı, Sentry'yi ve tarayıcıyı yine başka pencerelerde bırakır.
"top mcp servers whatsapp api integration" aramasındaki SERP sonuçları Graph gönderim sarmalayıcılarıdır. Meta Cloud API'yi çağırıp dururlar: lead satırı yok, handler yok, Sentry issue yok, CRM ekran görüntüsü yok. İlk hata, aramadan tek bir WhatsApp MCP'si kurup Cursor'ın Python entegrasyon görevini neden bitiremediğini sormaktır.
Buna tek sohbet, beş MCP yığını deyin. Whapi.Cloud, WhatsApp'a bakan katmandır. Diğer dört sunucu aynı Cursor oturumunda durur. Beş iş akışını tek sohbetten kopyalarsınız.
Her satır farklı bir iştir. Eşlik eden sunucular WhatsApp kanalının yerini almaz.
| MCP sunucusu | Yığındaki rolü | Örnek agent görevi |
|---|---|---|
| Whapi MCP (Whapi.Cloud) | WhatsApp API katmanı | Yanıt gönder, gelen mesajları listele, numara varlığını kontrol et, GET kanal sağlığı |
| PostgreSQL MCP | CRM verisi | Telefonla müşteri bul, ticket ve fırsatları listele, onay sonrası lead ekle |
GitHub MCP (github/github-mcp-server) |
Kaynak | Webhook handler'ı aç, issue ve pull request'leri incele |
Sentry MCP (@sentry/mcp-server) |
Üretim hataları | Webhook'tan handler'a, oradan CRM'e tek istek boyunca izle |
Playwright MCP (@playwright/mcp) |
CRM arayüzü | Staging'de kişi oluştur ve konuşma zincirini doğrula |
Kişisel WhatsApp Web MCP'si üretim CRM'si olarak bu satırların hiçbirine girmez. Onu masaüstü oturumu olarak görün. Aşağıdaki beş kart, üretime uygun işlerdir.
Whapi MCP tüm yığın değil, WhatsApp API katmanıdır
Yalnızca gönderim yapan bir Cloud API MCP'si bu yığının WhatsApp katmanı değildir. Whapi MCP canlı gönderimi, okumayı ve sağlık kontrolünü aynı agent sohbetinde yürütür; ardından CRM, GitHub, Sentry ve tarayıcı devreye girer.
Cloud API MCP sarmalayıcısı Graph gönderimini ve alımını çağırıp durur. Yalnızca zaten Meta Cloud API üzerinde çalışıyorsanız onu seçin. Agent'ın bağlı bir WhatsApp numarasını işletmesi, sonra işi diğer dört sunucuya devretmesi gerekiyorsa Whapi MCP'yi seçin.
| Boyut | Cloud API MCP sarmalayıcısı | Whapi QR/oturum ağ geçidi MCP |
|---|---|---|
| Kimlik bilgileri | Meta uygulama token'ı + WABA | QR tarama sonrası Whapi.Cloud kanal token'ı |
| Meta incelemesi | İşletme doğrulaması ve şablon onayı | Numara bağlamak için gerekmez |
| Gelen model | Yalnızca webhook; doğrudan kanal sorgusu yok | Webhook artı canlı mesaj, kişi ve sohbet sorguları |
| Şablonlar / 24 saatlik pencere | Pencere dışındaki çoğu giden için zorunlu | Normal sohbetlerde şablon kapısı yok |
| Gruplar / kanallar | Sınırlı veya yok | Gruplara, topluluklara, kanallara, durumlara tam API erişimi |
| Webhook'u kim barındırır | Sizin HTTPS uç noktanız, herkese açık erişilebilir | Sizin HTTPS uç noktanız; bir webhook kaçsa bile kanal durumu sorgulanabilir |
| Agent iş akışına uygunluk | Düşük: yalnızca Graph gönder/al | Yüksek: DB, kod, hata ve arayüz sunucularıyla zincirlenen WhatsApp katmanı |
Resmi WhatsApp Business API'de Meta işletme doğrulaması ve şablon onayı çoğu giden mesajın önünde durur. Whapi.Cloud'da numara bağlamak için bu kapılar gerekmez; normal sohbetlerde şablon kapısı da yoktur, çünkü kanal web-oturum soketleri üzerinde çalışır.
Ayrıca Graph sarmalayıcısını kendiniz barındırmak yerine yönetilen bir ağ geçidi satın alırsınız. Gruplar, kanallar, durumlar ve numara kontrolleri bu WhatsApp yüzeyinde kalır. Yalnızca şablona dayalı bir Cloud API MCP'si bunları hiç açmaz.
mcp.json yapıştırmayı burada atlayın. Whapi MCP'yi Cursor, VS Code ve GitHub Copilot kurulum rehberi ile bağlayın, ardından aşağıdaki HTTP okumalarını çalıştırın.
Canlı kanalda gönderim, okuma ve sağlık kontrolü
Whapi.Cloud bu kontrolleri HTTP üzerinden https://gate.whapi.cloud/ adresinde sunar. Python'da REST'i bu host'a yazın. GET /messages/list son mesajları döner. GET /messages/list/{ChatID} tek konuşmayı daraltır. GET /messages/{MessageID} tam nesneyi döner. HEAD /contacts/{ContactID} yalnızca varlık kontrolüdür: evet/hayır yeterliyse GET değil HEAD kullanın. GET kişi üst verisini döner. HEAD, numaranın WhatsApp'ta olup olmadığını cevaplar.
GET /health kanal durumunu bildirir. POST /messages/text bir sohbet kimliğine gövde gönderir; zorunlu alanlar to ve body'dir. Hedef pencerede boş messages, numaranın bu kanala hiç ulaşmadığı anlamına gelir. CRM'i o noktadan sonra sorgulayın.
import os
import requests
TOKEN = os.environ["WHAPI_TOKEN"]
headers = {"Authorization": f"Bearer {TOKEN}"}
# GET /health first. A dead channel makes every later MCP look like a CRM bug.
health = requests.get("https://gate.whapi.cloud/health", headers=headers)
health.raise_for_status()
# from_me=False keeps the list on inbound. An empty list here is a channel miss; look at CRM only after this returns rows.
inbound = requests.get(
"https://gate.whapi.cloud/messages/list",
headers=headers,
params={"count": 50, "from_me": False},
).json()
contact_id = "15551234567"
# HEAD 404 means this ContactID is not on WhatsApp. Do not INSERT a CRM lead from a guessed number.
# GET /contacts/{ContactID} returns metadata; existence-only is HEAD /contacts/{ContactID}.
exists = requests.head(
f"https://gate.whapi.cloud/contacts/{contact_id}",
headers=headers,
)
print(health.status_code, len(inbound.get("messages", [])), exists.status_code)
Whapi MCP bu yüzeyi OpenAPI'den üretir; agent da HTTP belgelerindeki aynı adları kullanır. Webhook URL'si yine sizindir. MCP, bir webhook kaçırıldığında kanal durumunu inceler. O uç noktayı sizin yerinize barındırmaz.
PostgreSQL MCP müşteri, ticket ve fırsat bulur, lead yazar
WhatsApp kanalı sorgulanabilir olduktan sonra PostgreSQL MCP müşterileri telefonla bulur, ticket açar, fırsatları kontrol eder, lead yazar ve yinelenen satırları yakalar.
Bu karta WhatsApp kartıyla aynı ağırlığı verin. E.164 telefonla müşteri sorun, ardından ticket'ları, açık fırsatları, bir lead upsert'ini ve herhangi bir yazmadan önce yinelenenleri sorun. WhatsApp göndermek kolaydır. Güvenilir alım ve yeniden deneme tekilleştirmesi zordur: yalnızca telefona anahtarlayıp mesaj kimliğini yok sayarsanız, yeniden denenen webhook aynı kişiyi iki kez ekler.
Pratikte bu kontrolü atlayan ekipler aynı lead'i iki kez ekler. Üretim lead ve kişilerinde PostgreSQL MCP'yi varsayılan olarak salt okunur tutun. INSERT'i önerin. İnsan onayını bekleyin. İlk gün yazmaları, operatörün sahip olduğu lookup tablolarına aittir.
İşlevli döngü WhatsApp'tan AI'ya, oradan PostgreSQL'e ve tekrar WhatsApp'a gider: gelen sohbet, CRM eylemi, aynı numaradan giden yanıt. Telefon araması ve fırsat durumu sessiz günlerde bile karşılığını verir. WhatsApp CRM entegrasyon karar çerçevesi, düşen alanları veri senkronizasyonu sorunu olarak ele alır; bu da bu kartın işidir.
24 saatlik gelen-ama-lead-yok sorgusu burada kasıtlı olarak iç içedir. messages tablonuzu received_at'e göre süzgeçler. Resmi WhatsApp Business API'de 24 saatlik mesajlaşma penceresi, şablon dışındaki çoğu gideni kilitler. Whapi.Cloud'da bu SQL yalnızca received_at üzerindeki CRM hijyenidir; çünkü normal sohbetlerde şablon penceresi yoktur.
-- Nested hygiene query: inbound phones in the last 24 hours with no lead row.
-- Skipping the join on message_id during webhook retries duplicates the same person.
SELECT m.phone_e164, m.received_at, m.message_id
FROM inbound_messages m
LEFT JOIN leads l ON l.phone_e164 = m.phone_e164
WHERE m.received_at >= NOW() - INTERVAL '24 hours'
AND l.id IS NULL
ORDER BY m.received_at DESC;
Gerçekten çalıştırdığınız Postgres MCP'ye ad verin. Kopyalanacak tek bir kanonik npm kimliği yoktur. Yapabiliyorsanız bir replica'ya bağlayın. Agent id, phone_e164, created_at ve bir yinelenme bayrağı döndürüp durmalıdır.
GitHub MCP webhook JSON'unu CRM bağlayıcısındaki handler'a eşler
CRM'deki lead'ler yanlış göründüğünde GitHub MCP, Whapi webhook JSON'unu bu satırları kaydetmesi gereken bağlayıcı handler'ına eşler.
Whapi.Cloud webhook JSON'unu sizin HTTPS uç noktanıza iletir. Hangi alanların CRM sütunu olacağına sizin sunucunuz karar verir: buna geliştiriciye ait webhook JSON denir. GitHub MCP (github/github-mcp-server) o sunucuyu Cursor'dan çıkmadan açar. Repoyu, issue'ları ve pull request'leri arayın. Sentry handler'ı yazmaz.
Tipik dikkat noktaları:
-
Repo araması: CRM bağlayıcı modülünü ve webhook gövdesini okuyan fonksiyonu bulun.
-
Issue ve PR'ler: son eşleme değişikliklerine bakın. Yeniden adlandırılmış bir payload alanı, CRM testi olmayan bir Cuma PR'ına sık düşer. Diff'i okuyun, sonra durun.
-
İç içe örnek: bağlayıcı
messages.post'u işleyipcontact_idyazmıyorsa, kanal sağlıklı görünürken lead satırı boş kalır. Eşlemeyi düzeltin, ardından PostgreSQL kartını yeniden çalıştırın.
Gelen webhook biçimi, messages[], statuses[], chats[] ve contacts[] gibi dizileri belgeler. Bir insan PR açana kadar GitHub MCP'yi salt okunur tutun. Dosya yolunu, fonksiyon adını ve bağlayıcının okuduğu tam JSON anahtarını isteyin. Aynı olay adına iki handler uyuyorsa her iki dosyayı açıp sütun yazımını karşılaştırın.
Whapi webhook'larını zaten işleyen Python handler'lar Python WhatsApp bot eğitiminden başlayabilir. GitHub kartı hangi dosya ve hangi alan sorusunu yanıtlar.
Sentry MCP webhook'u handler ve CRM üzerinden izler
GitHub handler'ı gösterdikten sonra Sentry MCP, o webhook'u handler ve CRM üzerinden, yığın izi başarısız satırı adlandırana kadar takip eder.
Bu kartı üretim incelemesi için kullanın. Handler kodu yazmaz. @sentry/mcp-server issue'yu, yığını, tag'leri ve breadcrumb'ları çeker; böylece müşterinin hiç mesaj göndermediği tartışması biter. İşe yarayan hamle istek yolu izidir: webhook geldi, handler çalıştı, CRM çağrısı 4xx döndü veya zaman aşımına uğradı, giden yanıt hiç çıkmadı. Bu, webhook'unuzun izlemesi gereken olay-tepki yolunun aynısıdır.
Sentry olaylarına telefon etiketi veya mesaj kimliği koymayan projeler olayı ekran görüntüleri karşılaştırarak geçirir. Zaman damgası artı PostgreSQL'de kullandığınız aynı E.164 üzerinde ilişkilendirin. CRM doğrulama hatası, yinelenmelerde unique constraint veya GitHub'da zaten gördüğünüz bir payload yeniden adlandırmasından sonra boş contact_id arayın.
Issue aramasını salt okunur tutun. Agent'ın Sentry issue'larını çözmesine veya silmesine izin vermeyin. Düzeltmeden sonra işi bitiren insandır. Agent'ı tam issue'dan başlatın: yapıştırılmış parçalar breadcrumb'ları gizler. İz temizse ve kanal gelen mesajı aldıysa kalan hata eşleme veya arayüzdür. Onu GitHub'a veya Playwright'a verin. Beklenmeyen kanal davranışıyla karşılaşırsanız, whapi.cloud üzerindeki sohbet widget'ı üzerinden Whapi.Cloud destek ekibine ulaşın.
Playwright MCP staging'de CRM kişisi oluşturur ve konuşmayı doğrular
Sentry başarısız satırı adlandırdıktan sonra Playwright MCP, staging'de hâlâ bir CRM kişisi oluşturur ve destek ekibinin gerçekten gördüğü konuşmayı doğrular.
Postman yalnızca HTTP yolunu kanıtlar. POST /messages/text'ten gelen 200, CRM konuşma panelinin zinciri çizdiği anlamına gelmez. @playwright/mcp staging'i açar, kişi oluşturur, gönderimi tetikler (veya webhook'u bekler) ve operatörün destek için ekran görüntüsü alacağı metni doğrular. Whapi.Cloud Postman koleksiyonu HTTP kontrolüdür. Playwright panel kontrolüdür.
SPA panoları, REST istemcilerinin göremediği şekilde yanıltır. Lead API 201 döner, konuşma görünümü ise hâlâ eski contact_id'ye bağlanır ve boş bir zincir gösterir. Erişilebilirlik ağacını yakalayın: görünen ad, E.164, son gövde. O düğüm yoksa CSS seçicilerini kurcalamadan önce webhook eşlemesini yeniden kontrol edin.
- Staging CRM kişi formunu açın ve test E.164 ile bir kişi oluşturun.
- Zaten doğruladığınız Whapi kanalı üzerinden bir WhatsApp mesajı gönderin veya alın.
- HTTP 200 olsa bile zincir yoksa koşuyu başarısız sayın. Postgres satırını yalnızca PostgreSQL kartı zaten çalıştıktan sonra doğrulayın.
Test numarasını staging'e ekin. Tarayıcıyı orada tutun: bir fırsatı silebilen üretim oturumu yanlış çalışma zamanıdır. Playwright yeşil, PostgreSQL boşsa senkronizasyon hatanız vardır. İkisi de yeşil ve Sentry sessizse iletim sorununu aramayı bırakın.
Beş MCP aracını tek prompt'ta birleştirin — her iş akışı tek başına çalıştıktan sonra
Beş MCP aracını tek prompt'ta ancak Playwright konuşma doğrulaması ve diğer bağımsız iş akışları çalıştıktan sonra birleştirin.
Zinciri, dört eşlik eden sunucunun yanında duran WhatsApp API MCP'nin bir gösterimi olarak görün. Beş kartın yerini almaz.
After each standalone workflow works:
1. Whapi: GET /health, GET /messages/list, HEAD /contacts/{ContactID}.
2. PostgreSQL: find client by phone; propose a lead insert and wait for approval.
3. Sentry: errors for this webhook timestamp.
4. GitHub: CRM connector that handles messages.post.
5. Playwright: staging contact plus conversation assert.
No production writes. Stop at the first broken layer.
Bir katman başarısız olursa o kartta kalın. «İyi görünüyor mu» diye bakmak için Playwright'a atlamayın.
Agent yazmaları, Sentry org kapsamı ve staging tarayıcıları için kapılar hâlâ şart
O birleşik prompt hâlâ kapılara ihtiyaç duyar: salt okunur üretim Postgres'i, Sentry org kapsamı, staging tarayıcıları ve CRM olarak kişisel WhatsApp Web MCP yasağı.
Üretim lead ve kişilerini salt okunur tutun. Yazmaları, insan onayından sonra operatörün sahip olduğu lookup tablolarıyla sınırlayın. Playwright'ı staging'e yöneltin. Sentry MCP'yi açmak istediğiniz org ve proje ile sınırlayın. Kişisel WhatsApp Web MCP'sini üretim CRM'si olarak reddedin: o bir masaüstü oturumudur. CRM'e hiç senkronize olmayan WhatsApp sohbetleri satış hunisine girmez; emlak ekiplerinin gelen talepleri pipeline'a düşürememesi tam da böyle olur.
Beş MCP sunucusu Python geliştiricisine hâlâ WhatsApp'ı, CRM verisini, kaynağı, hataları ve arayüzü tek sohbetten verir; bu iş akışında WhatsApp API MCP'si Whapi.Cloud'dur. Beş bağımsız kartı kurun, sonra birleştirin.









