Files
kolaytercih/docs/ekip/RYBBIT-BAGLANTI.md
bilalgursen a8c75ce4a7 chore(ekip): Rybbit MCP bağlantısı (salt okuma) ve ajan tanımları güncellemesi
- .mcp.json: rybbit sunucusu, anahtar ${RYBBIT_API_KEY} ortam değişkeninden
- .claude/settings.json: rybbit yazma araçları deny listesinde
- .gitignore: .claude/settings.local.json (anahtar burada) commit'lenmez
- docs/ekip/RYBBIT-BAGLANTI.md + settings.local.example.json: kurulum

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-09-23 11:43:11 +03:00

6.9 KiB
Raw Blame History

Rybbit MCP bağlantısı

Rybbit artık projenin kendi ayarında tanımlı; her oturumda/bilgisayarda yeniden bağlanmaya gerek yok. Tek makineye özel parça API anahtarının kendisi — o da commit'lenmeyen tek bir dosyada durur.

Ne nerede

Dosya Ne yapar Commit'lenir mi
.mcp.json rybbit sunucusunu tanımlar (HTTP, https://rybbit.kolaytercih.com/api/mcp), anahtarı ${RYBBIT_API_KEY} olarak okur Evet
.claude/settings.json Sunucuyu otomatik etkinleştirir (enabledMcpjsonServers) + 16 yazma aracını deny eder Evet
.claude/settings.local.json RYBBIT_API_KEY değerini tutar Hayır (.gitignore'da)

Sunucu, Rybbit kurulumunun kendi içinde gelen resmî MCP ucudur — ayrı bir npm paketi kurulmaz, sürümü panelin sürümüyle her zaman aynıdır. Kimlik doğrulama Authorization: Bearer <anahtar> başlığıyla; OAuth akışı gerekmez (OAuth'lu bağlantı tam da makineye/oturuma bağlı kalan, istemediğimiz biçimdi).

Durum: kurulu ve doğrulandı (22 Eylül 2026)

claude-code-readonly adlı kişisel anahtar oluşturuldu, 9 kaynakta yalnız read yetkisiyle: Analytics, Sessions, Events, Users, Goals, Funnels, Sites, Search Console, Custom SQL. Hiçbirinde write yok; Organization, Session replay (kayıtlı ekran kayıtları) ve Event ingestion hiç verilmedi.

Sonuç uçtan uca doğrulandı:

  • initialize → 200, sunucu rybbit v0.3.0.
  • tools/list → 21 araç, hepsi okuma. Yazma araçları anahtarın kapsamı yüzünden sunucu tarafında listeye hiç girmiyor — yani .claude/settings.json içindeki deny listesi artık ikinci katman, tek savunma değil.
  • list_sites → Kolay Tercih / kolaytercih.com, site_id = 1.
  • get_overview (15–22 Eylül) → 151 oturum, 109 kullanıcı, 427 sayfa görüntüleme.

Anahtar .claude/settings.local.json içinde; değeri panodan doğrudan dosyaya yazıldı, hiçbir rapora/loga düşmedi.

Yeni bir bilgisayarda

.claude/settings.local.json git'e girmediği için yeni makineye taşınmaz — orada o dosya hiç yoktur (ya da o makinenin kendi izin onaylarıyla dolu, içinde env bloğu olmayan bir hâli vardır). Bu yüzden repoda boş bir şablon duruyor; yeni makinede:

cp .claude/settings.local.example.json .claude/settings.local.json

Sonra RYBBIT_API_KEY alanına değeri yapıştır. (Dosya zaten varsa üzerine yazma — içine sadece env bloğunu ekle.) Değer olarak ya aynı anahtarı kullan ya da yenisini üret: Rybbit → Settings → Account → Personal API Keys → adı yaz → Restrict permissions'ı aç → yukarıdaki 9 kaynakta yalnız read işaretle (write, read'i kapsadığı için bir tanesi bile salt-okuma güvencesini bozar) → Create → anahtar bir kez gösterilir → dosyaya yapıştır → Claude Code'u yeniden başlat.

Anahtar okunmazsa belirti: her çağrı Unauthorized: send a Rybbit API key… (401). Çözüm sırası: (a) değer dosyada mı, (b) yeniden başlatıldı mı, (c) hâlâ olmuyorsa aynı değişkeni kabuk ortamına da ver (export RYBBIT_API_KEY=…) — .mcp.json genişletmesi kabuk ortamını da okur.

Sonradan gerekirse

list_segments / apply_segment / get_annotations bu anahtarda yok (Dashboards kaynağı verilmedi). İç trafiği kayıtlı bir segmentle filtrelemek istersek yeni bir anahtar üretip Dashboards read eklemek gerekir.

Site kimliği tuzağı

İki ayrı kimlik var, birbirinin yerine geçmez:

  • Sayısal site kimliği 1 — MCP araçlarının ve istatistik API'sinin istediği (siteId).
  • RYBBIT_SITE_ID env'indeki f2cb… — tarayıcıdaki script'in kullandığı genel kimlik.

Kim erişebilir

analitik (asıl sahip), guvenlik-uyum (kişisel veri denetimi), seo-geo (organik iniş sayfası kırılımı). qa-muhendisi, veri-muhendisi, yapay-zeka-muhendisi, yazilimci ajanlarında araç disallowedTools ile kapatıldı; ceo, cto, urun-yoneticisi, marka, tasarimci, rehber-* zaten dar bir tools listesiyle çalıştığı için erişemez. Gerekçe: rakamı tek yerin üretmesi (bkz. PROTOKOL.md md.4).

Eski anahtar — silindi

21 Eylül 2026'da açılmış tam yetkili claude adlı kişisel anahtar 22 Eylül 2026'da silindi (Bilal'in kararı; canlı sitenin ona bağlı olmadığı teyit edildikten sonra). Silme sonrası claude-code-readonly ile yapılan çağrı 200 döndü — bağlantı etkilenmedi. Panelde artık yalnızca salt-okuma anahtarı var.

İç trafik dışlaması (22 Eylül 2026, panelden kuruldu)

analitik ajanı 16–22 Eylül penceresinde oturumun 69'dan 147'ye çıktığını ölçtü ama artışın ne kadarının gerçek ziyaretçi olduğu söylenemedi: gece vardiyası, QA ve Bilal'in kendi gezinmesi aynı havuza düşüyordu. Panelde Site Settings → Exclusions altına iki dışlama yazıldı:

Alan Değer Ne yapar
IP Exclusions 94.54.157.194 Bilal'in ev/ofis çıkış IP'si — bu adresten gelen her şey sayılmaz
Query Param Exclusions rybbit=off Adresine ?rybbit=off eklenen her sayfa sayılmaz

İkisi de kaydedildi ve sayfa yenilendikten sonra yerinde durduğu görüldü.

IP kalıcı değil. Bu bir ev aboneliğinin dinamik adresi; modem yenilenince ya da başka ağdan (mobil veri, kafe, VPN) girilince dışlama sessizce devre dışı kalır — hata vermez, sadece o oturumlar tekrar sayılmaya başlar. Bu yüzden rybbit=off ikinci savunma olarak duruyor: ağ ne olursa olsun, adresin sonuna eklendiğinde o sayfa gösterimi yutulur. Kendi sitende gezerken alışkanlık hâline getirilmeli; QA ajanına verilen test adreslerine de eklenmeli.

Rybbit'in tarayıcı tarafında cihaz bazlı bir kapatma anahtarı yok (resmî script belgesinde localStorage opt-out'u geçmiyor; yalnız data-skip-patterns, data-mask-patterns, data-debounce var). Dolayısıyla elimizdeki iki mekanizma bunlar. Kalıcı çözüm istenirse data-skip-patterns ile bir yol deseni ayrılabilir.

Bilinen arıza: get_goals MCP çağrısı hata veriyor

MCP error -32602: Output validation error: Invalid structured content for tool get_goals:
[{"code":"invalid_type","expected":"number","received":"string","path":["meta","total"], …}]

Sunucu meta.total'ı string döndürüyor, MCP şeması number bekliyor — Rybbit'in kendi hatası, bizim anahtarla/ayarla ilgisi yok. Bugün pratik etkisi yok: panele bakıldı, /1/goals "No goals found" diyor — tanımlı hedef sıfır (get_funnels de boş dönüyordu, kayıtlı huni de yok). Yani MCP'nin okuyamadığı bir bilgi şu an mevcut değil. Hedef tanımlandığı gün bu çağrı yine patlayacak.

Panel v2.8.0, üstte "v2.9.1 available" bandı çıkıyor. GitHub sürüm notlarında (v2.9.0, 12 Eylül) bu hatanın düzeltildiğine dair bir satır yok — yükseltme muhtemel çözüm ama garanti değil. Yükseltme VPS'te docker imajı çekmek demek; ajan kendiliğinden yapmaz, Bilal karar verir.