Pushizo Docs
Rehberler

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çimNe zamanKimlik
Yerel stdio (npx -y @pushizo/mcp-server)Claude Desktop'ta yerel sunucuPUSHIZO_API_KEY ortam değişkeni
Uzak Streamable HTTP (POST {API_URL}/mcp)Claude.ai / Claude Desktop özel bağlayıcı, kurulum gerektirmeyen istemcilerKapsamlı 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çıklamaGerekli kapsam
list_segmentsSegmentler (ad araması, sayfalama)segments:read
get_segmentSegment tanımı ve tahmini kitle boyutusegments:read
list_campaignsKampanyalar (durum/ad filtresi)analytics:read
get_campaignKampanya ayrıntısı (kitle, içerik, onay, istatistik)analytics:read
list_campaign_messagesKampanyanın çalıştırmaları ve sayaçlarıanalytics:read
get_analytics_summaryGenel bakış KPI'ları (7/30 gün veya özel aralık)analytics:read
list_templatesMesaj şablonlarıanalytics:read
list_messagesGönderilen mesajlar ve teslim sayaçlarıanalytics:read veya notifications:write
get_messageMesaj durumu ve sayaçlarıanalytics:read veya notifications:write
create_campaign_draftKampanya taslağı (onaylı mod)mcp:write
create_segment_draftDinamik 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_draft ve create_segment_draft yalnızca taslak oluşturur: kampanya her zaman draft durumundadır, zamanlama (send_at) yok sayılır ve mcp etiketi 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:write kapsamı zorunludur. Bu kapsamın dashboard karşılığı campaigns.create + segments.write izinleridir; rolü bunlara sahip olmayan üye bu kapsamı içeren anahtar üretemez veya OAuth ile veremez.
  • Uçlar: POST /v1/apps/{app_id}/mcp/campaign-drafts ve POST /v1/apps/{app_id}/mcp/segment-drafts (public API).

Yerel kurulum: Claude Desktop (stdio)

  1. 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ıca mcp:write. Mümkünse anahtarı tek bir app'e bağlayın.
  2. claude_desktop_config.json dosyası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_…"
      }
    }
  }
}
  1. Claude Desktop'u yeniden başlatın; araç listesinde pushizo görünür.
Ortam değişkeniZorunluAçıklama
PUSHIZO_API_KEYeveths_live_… API anahtarı
PUSHIZO_API_URLhayırAPI 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_IDhayırAraç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); GET ve DELETE 405 dö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çersizse 401 ile birlikte WWW-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/mcpRFC 9728resource ({API_URL}/mcp), authorization_servers: [API_URL], scopes_supported, bearer_methods_supported: ["header"], resource_documentation
GET /.well-known/oauth-authorization-serverRFC 8414issuer (= 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çin client_secret_post veya client_secret_basic de desteklenir. Gizli anahtar yalnızca kayıt yanıtında bir kez döner.
  • redirect_uris kuralları: https adresi; http yalnı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ürNot
Erişim belirteci1 saatKapsamlı API anahtarıdır (hs_live_…); Authorization: Bearer ile kullanılır
Yenileme belirteci30 günHer 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

KapsamMCP'de açtığı araçlar
segments:readlist_segments, get_segment
analytics:readlist_campaigns, get_campaign, list_campaign_messages, get_analytics_summary, list_templates, list_messages, get_message
notifications:writelist_messages, get_message (geriye dönük uyumluluk)
mcp:writecreate_campaign_draft, create_segment_draft
adminTü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ç isError sonucu döner (… (HTTP 403) — API anahtarının kapsamlarını kontrol edin.).
  • app_id gerekli hatası: organizasyon geneli anahtarda araca app_id verin veya PUSHIZO_APP_ID tanı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.

Bu sayfada