MCP sunucusu: yapay zekâ asistanlarıyla Pushizo
Pushizo, Model Context Protocol (MCP) sunucusuyla Claude Desktop, Claude.ai ve diğer MCP istemcilerinin segment, kampanya, mesaj, şablon ve analitik verinizi okumasını ve onayınızla taslak kampanya/segment hazırlamasını…
Pushizo, Model Context Protocol (MCP) sunucusuyla Claude Desktop, Claude.ai ve
diğer MCP istemcilerinin segment, kampanya, mesaj, şablon ve analitik verinizi okumasını ve onayınızla taslak
kampanya/segment hazırlamasını sağlar (docs/adr/0031-entegrasyonlar-ve-mcp-sunucusu.md §6). Sunucuda gönderim,
zamanlama ve silme aracı yoktur; asistanın hazırladığı taslak dashboard'dan gözden geçirilip gönderilir.
İki kullanım biçimi vardır:
| Biçim | Ne zaman | Kimlik |
|---|---|---|
Yerel stdio (npx -y @pushizo/mcp-server) | Claude Desktop'ta yerel sunucu | PUSHIZO_API_KEY ortam değişkeni |
Uzak Streamable HTTP (POST {API_URL}/mcp) | Claude.ai / Claude Desktop özel bağlayıcı, kurulum gerektirmeyen istemciler | Kapsamlı API anahtarı (Bearer) veya OAuth 2.1 |
Araçlar her iki biçimde de yalnızca public REST API'yi çağırır: kapsam denetimi, API anahtarının IP izin listesi, kiracı izolasyonu ve RLS her çağrıda public API ile birebir aynıdır.
Araçlar ve kapsamlar
| Araç | Açıklama | Gerekli kapsam |
|---|---|---|
list_segments | Segmentler (ad araması, sayfalama) | segments:read |
get_segment | Segment tanımı ve tahmini kitle boyutu | segments:read |
list_campaigns | Kampanyalar (durum/ad filtresi) | analytics:read |
get_campaign | Kampanya ayrıntısı (kitle, içerik, onay, istatistik) | analytics:read |
list_campaign_messages | Kampanyanın çalıştırmaları ve sayaçları | analytics:read |
get_analytics_summary | Genel bakış KPI'ları (7/30 gün veya özel aralık) | analytics:read |
list_templates | Mesaj şablonları | analytics:read |
list_messages | Gönderilen mesajlar ve teslim sayaçları | analytics:read veya notifications:write |
get_message | Mesaj durumu ve sayaçları | analytics:read veya notifications:write |
create_campaign_draft | Kampanya taslağı (onaylı mod) | mcp:write |
create_segment_draft | Dinamik segment taslağı (onaylı mod) | mcp:write |
list_messages ve get_message önceden yalnızca notifications:write ile çalışıyordu; artık salt okuma kapsamı
analytics:read de yeterlidir (eski anahtarlar çalışmaya devam eder). admin kapsamı tüm araçları açar.
Araçlar app_id parametresi alır. App'e bağlı anahtarda (veya stdio'da PUSHIZO_APP_ID tanımlıysa) verilmesine
gerek yoktur; organizasyon geneli anahtarda her çağrıda verilmelidir.
Onaylı mod: yazma araçları
create_campaign_draftvecreate_segment_draftyalnızca taslak oluşturur: kampanya her zamandraftdurumundadır, zamanlama (send_at) yok sayılır vemcpetiketi eklenir; segment dinamik oluşturulur ve bir kampanyada kullanılana kadar etkisi yoktur.- Araç açıklamaları asistandan çağırmadan önce kullanıcının açık onayını almasını ister (
destructiveHint=false). - Sunucu tarafında
mcp:writekapsamı zorunludur. Bu kapsamın dashboard karşılığıcampaigns.create+segments.writeizinleridir; rolü bunlara sahip olmayan üye bu kapsamı içeren anahtar üretemez veya OAuth ile veremez. - Uçlar:
POST /v1/apps/{app_id}/mcp/campaign-draftsvePOST /v1/apps/{app_id}/mcp/segment-drafts(public API).
Yerel kurulum: Claude Desktop (stdio)
- Dashboard'da Geliştirici → API anahtarları bölümünden bir anahtar oluşturun. Yalnızca okuma için
segments:read+analytics:read; taslak hazırlatmak istiyorsanız ayrıcamcp:write. Mümkünse anahtarı tek bir app'e bağlayın. claude_desktop_config.jsondosyasını düzenleyin (macOS:~/Library/Application Support/Claude/, Windows:%APPDATA%\Claude\; Claude Desktop → Settings → Developer → Edit Config):
{
"mcpServers": {
"pushizo": {
"command": "npx",
"args": ["-y", "@pushizo/mcp-server"],
"env": {
"PUSHIZO_API_KEY": "hs_live_…",
"PUSHIZO_API_URL": "https://api.pushizo.com",
"PUSHIZO_APP_ID": "app_…"
}
}
}
}- Claude Desktop'u yeniden başlatın; araç listesinde
pushizogörünür.
| Ortam değişkeni | Zorunlu | Açıklama |
|---|---|---|
PUSHIZO_API_KEY | evet | hs_live_… API anahtarı |
PUSHIZO_API_URL | hayır | API kök adresi (varsayılan https://api.pushizo.com). https olmalı; yerel geliştirmede http://localhost:<port> veya http://127.0.0.1:<port> kabul edilir |
PUSHIZO_APP_ID | hayır | Araçta app_id verilmezse kullanılacak app |
Sunucu stdout'u yalnızca MCP iletileri için kullanır; tanılama stderr'e yazılır (Claude Desktop MCP günlüğünde
görünür). Depodan çalıştırmak için: npm run build --workspace @pushizo/mcp-server ve
node packages/mcp-server/dist/stdio.js.
Uzak sunucu: Streamable HTTP
- Adres:
POST {API_URL}/mcp(ör.https://api.pushizo.com/mcp). - Durumsuz sunucu, JSON yanıt (oturum kimliği ve sunucu kaynaklı SSE akışı yok);
GETveDELETE405döner. - Hız sınırı: IP başına dakikada 600 istek.
- Kimlik:
Authorization: Bearer hs_live_…(kapsamlı API anahtarı veya OAuth ile alınan erişim belirteci). Anahtarın IP izin listesi uygulanır (izin verilmeyen IP →403). Kimlik yoksa veya geçersizse401ile birlikteWWW-Authenticate: Bearer resource_metadata="{API_URL}/.well-known/oauth-protected-resource/mcp"döner; MCP istemcileri bu başlıktan OAuth akışını keşfeder.
curl -s -X POST "$API/mcp" \
-H "Authorization: Bearer $HS_KEY" \
-H 'content-type: application/json' \
-H 'accept: application/json, text/event-stream' \
-d '{"jsonrpc":"2.0","id":1,"method":"tools/list"}'Claude.ai / Claude Desktop özel bağlayıcı
Settings → Connectors → Add custom connector bölümünde URL olarak {API_URL}/mcp girin. Claude tarayıcıda
Pushizo yetkilendirme ekranını açar (aşağıdaki OAuth akışı); onay verdiğinizde bağlayıcı seçtiğiniz organizasyon,
app ve kapsamlarla çalışır.
OAuth 2.1 yetkilendirme
Uzak MCP istemcileri API anahtarı kopyalamadan, tarayıcı tabanlı OAuth 2.1 (yetkilendirme kodu + PKCE) ile bağlanabilir.
Keşif
| Uç | Standart | İçerik |
|---|---|---|
GET /.well-known/oauth-protected-resource ve …/oauth-protected-resource/mcp | RFC 9728 | resource ({API_URL}/mcp), authorization_servers: [API_URL], scopes_supported, bearer_methods_supported: ["header"], resource_documentation |
GET /.well-known/oauth-authorization-server | RFC 8414 | issuer (= API_URL), authorization_endpoint, token_endpoint, registration_endpoint, revocation_endpoint, desteklenen yöntemler |
Dinamik istemci kaydı: POST /oauth/register (RFC 7591)
- Varsayılan istemci türü public'tir (
token_endpoint_auth_method: none); gizli istemciler içinclient_secret_postveyaclient_secret_basicde desteklenir. Gizli anahtar yalnızca kayıt yanıtında bir kez döner. redirect_uriskuralları:httpsadresi;httpyalnızca loopback (localhost,127.0.0.1,[::1]); veya nokta içeren özel şema (ör.com.example.app:/cb).
curl -s -X POST "$API/oauth/register" -H 'content-type: application/json' -d '{
"client_name": "Benim MCP istemcim",
"redirect_uris": ["http://127.0.0.1:33418/callback"]
}'Yetkilendirme: GET /oauth/authorize
Parametreler: response_type=code, client_id, redirect_uri, code_challenge + code_challenge_method=S256
(PKCE zorunlu, yalnızca S256), state, isteğe bağlı scope (boşlukla ayrılmış) ve isteğe bağlı resource
(verilirse {API_URL}/mcp veya {API_URL} olmalıdır). admin kapsamı OAuth ile verilemez; tam yetki gereken
otomasyonlarda kapsamlı API anahtarı kullanın. Geçersiz istemci veya kayıtsız redirect_uri için yönlendirme yapılmaz
(400); diğer parametre hataları redirect_uri'ye error ile döner. Loopback adreslerinde port istemci tarafından
seçilebilir (RFC 8252).
Tarayıcı dashboard'daki onay ekranına (/oauth/consent) yönlendirilir; oturum yoksa önce giriş istenir. Kullanıcı
ekranda:
- organizasyonu,
- isteğe bağlı olarak tek bir app'i (seçilmezse organizasyon geneli),
- kapsamları (yalnızca rolünün verebildiği kapsamlar seçilebilir; varsayılan
segments:read analytics:read)
seçer ve onaylar. Ardından istemcinin redirect_uri adresine code, state ve iss (RFC 9207) ile dönülür. Onay ucu
organizasyonun SSO/MFA/IP politikalarına tabidir ve apikeys.manage izni gerektirir.
Belirteç: POST /oauth/token
Gövde application/x-www-form-urlencoded veya JSON olabilir.
grant_type=authorization_code+code,redirect_uri,client_id,code_verifier.grant_type=refresh_token+refresh_token,client_id.
curl -s -X POST "$API/oauth/token" \
-d grant_type=authorization_code -d code="$CODE" -d client_id="$CLIENT_ID" \
-d redirect_uri=http://127.0.0.1:33418/callback -d code_verifier="$VERIFIER"| Belirteç | Ömür | Not |
|---|---|---|
| Erişim belirteci | 1 saat | Kapsamlı API anahtarıdır (hs_live_…); Authorization: Bearer ile kullanılır |
| Yenileme belirteci | 30 gün | Her kullanımda yenisiyle değiştirilir (rotation). Eski bir yenileme belirtecinin tekrar kullanılması tüm yetkiyi (grant) iptal eder |
İptal: POST /oauth/revoke (RFC 7009)
Erişim veya yenileme belirtecini iptal eder.
Yönetim ve güvenlik
- OAuth ile verilen erişim, dashboard'da Geliştirici → API anahtarları listesinde
OAuth · <istemci adı>olarak görünür; buradan iptal etmek yetkiyi (grant) sonlandırır. - Kullanıcı organizasyondan ayrılır veya ilgili izinlerini kaybederse yenileme başarısız olur; istemcinin yeniden yetkilendirme alması gerekir.
- Belirteçler, yetkilendirme kodları ve istemci gizli anahtarları yalnızca SHA-256 özetleri olarak saklanır.
Kapsamlar
| Kapsam | MCP'de açtığı araçlar |
|---|---|
segments:read | list_segments, get_segment |
analytics:read | list_campaigns, get_campaign, list_campaign_messages, get_analytics_summary, list_templates, list_messages, get_message |
notifications:write | list_messages, get_message (geriye dönük uyumluluk) |
mcp:write | create_campaign_draft, create_segment_draft |
admin | Tümü |
users:read, users:write ve events:write kapsamları korunan kaynak meta verisinde listelenir ancak MCP araçları
tarafından kullanılmaz. En az yetki ilkesine uyun: asistanın yalnızca okuması gerekiyorsa mcp:write vermeyin.
Hata durumları
- Kapsam eksikse araç
isErrorsonucu döner (… (HTTP 403) — API anahtarının kapsamlarını kontrol edin.). app_id gereklihatası: organizasyon geneli anahtarda aracaapp_idverin veyaPUSHIZO_APP_IDtanımlayın.401(HTTP): anahtar/belirteç geçersiz, süresi dolmuş veya iptal edilmiş; OAuth istemcisi yenileme belirteciyle yeni erişim belirteci almalıdır.
Entegrasyonlar: Segment, Amplitude, Mixpanel, Zapier, Slack, WordPress, GTM
Pushizo'yu veri ve otomasyon yığınınıza kod yazmadan bağlamak için hazır entegrasyonlar (ADR-0031). Dashboard'da Geliştirici → Entegrasyonlar bölümünden yönetilir (webhooks.manage izni: geliştirici ve yönetici rolleri).…
Veri yerleşimi (AB / Türkiye bölgeleri)
Pushizo her veri bölgesini ayrı bir hücre olarak çalıştırır: AB (Frankfurt) ve Türkiye (İstanbul) hücrelerinin kendi veritabanı, kuyruk, analitik deposu ve dosya depolaması vardır. Bir organizasyonun abonelik,…