magaza-mcp 0.1.0 → 0.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/AGENTS.md ADDED
@@ -0,0 +1,271 @@
1
+ # Yapay zekâ ajanları için kurulum talimatı
2
+
3
+ Bu dosya `magaza-mcp`'yi bir kullanıcı adına kuran yapay zekâ ajanları içindir
4
+ (Claude Code, Antigravity, Cursor, Codex, Gemini CLI ve benzerleri).
5
+
6
+ Kullanıcı sana bu reponun linkini verdiyse **kurulumun tamamı sana ait.**
7
+ Kullanıcıya terminale komut yazdırma, dosya açtırma, JSON düzenletme. Sen
8
+ yaparsın, o yalnızca sorularına cevap verir.
9
+
10
+ **Tamamını oku, sonra sırayla uygula.**
11
+
12
+ ---
13
+
14
+ ## Tek kural: anahtarın İÇERİĞİ senin bağlamına girmesin
15
+
16
+ Kurulumu sen yaparsın ama `.p8` dosyasının veya servis hesabı JSON'unun
17
+ içeriğini okumana gerek yok — çünkü komutlar dosyanın **yolunu** alır, içeriği
18
+ kendileri okur ve doğrudan Anahtar Zinciri'ne yazar.
19
+
20
+ | Serbest | Yasak |
21
+ |---|---|
22
+ | Dosyanın **yolu** (`~/Downloads/AuthKey_ABC123.p8`) | Dosyanın **içeriği** (`-----BEGIN PRIVATE KEY-----…`) |
23
+ | Key ID, Issuer ID (gizli değil, UUID ve 10 haneli kod) | `private_key` alanının değeri |
24
+ | Servis hesabının e-postası, proje adı | JSON'un tamamını okuyup ekrana basmak |
25
+
26
+ Sebebi: bağlamına giren her şey oturum kaydına, günlüklere ve özetlere sızar.
27
+ Yol sızarsa bir şey olmaz, anahtar sızarsa kullanıcı anahtarını iptal etmek
28
+ zorunda kalır.
29
+
30
+ Kullanıcı anahtarı yine de sohbete yapıştırırsa: kullan ama kurulum biter
31
+ bitmez **"anahtarını sohbete yapıştırdın, bunu iptal edip yenisini üretmen
32
+ daha güvenli olur"** de.
33
+
34
+ ---
35
+
36
+ ## Akış
37
+
38
+ ### Adım 1 — Neyin kurulu olduğuna bak
39
+
40
+ ```bash
41
+ npx -y magaza-mcp durum --json
42
+ ```
43
+
44
+ Her mağaza için anahtar var mı, bağlantı çalışıyor mu, hangi istemcilere
45
+ kayıtlı — hepsi çıktıda. Anahtarın kendisi **yoktur**; Key ID'nin yalnızca son
46
+ dört hanesi görünür.
47
+
48
+ İkisi de `tamam` dönüyorsa kurulum zaten tamamdır; adım 4'e geç.
49
+
50
+ ### Adım 2 — Anahtarı bul
51
+
52
+ Kullanıcıya anahtarını sormadan önce **makinesinde ara.** Çoğu zaman zaten
53
+ indirmiştir, sadece nerede olduğunu bilmez:
54
+
55
+ ```bash
56
+ npx -y magaza-mcp tara --json
57
+ ```
58
+
59
+ Alışılmış klasörleri (İndirilenler, Masaüstü, Belgeler, `~/.config`,
60
+ `~/.appstoreconnect/private_keys`, bulunduğun proje klasörü) üç seviye derinlikte
61
+ tarar, saniyeler sürer. Her bulgu şöyle döner:
62
+
63
+ ```json
64
+ {
65
+ "bulgular": [
66
+ { "tur": "appstore", "yol": "/Users/x/Downloads/AuthKey_ABC123DEFG.p8",
67
+ "guven": "yuksek", "key_id": "ABC123DEFG", "degistirilme": "2026-09-20" },
68
+ { "tur": "play", "yol": "/Users/x/.config/play/hesap.json",
69
+ "guven": "yuksek", "servis_hesabi": "yayin@proje.iam.gserviceaccount.com",
70
+ "proje": "proje", "degistirilme": "2026-08-02" }
71
+ ]
72
+ }
73
+ ```
74
+
75
+ `guven: "dusuk"` olanları kullanıcıya sormadan kullanma — `uyari` alanında
76
+ sebebi yazar (StoreKit anahtarı olabilir, Firebase servis hesabı olabilir).
77
+
78
+ **Kullanıcıya böyle sor** (bulgu varsa):
79
+
80
+ > Makinende iki anahtar buldum:
81
+ > - App Store: `~/Downloads/AuthKey_ABC123DEFG.p8` (Key ID ABC123DEFG, 20 Eylül)
82
+ > - Play: `~/.config/play/hesap.json` (yayin@proje.iam.gserviceaccount.com)
83
+ >
84
+ > Bunları kullanayım mı? Başka bir dosya varsa yolunu söyle, ya da anahtarı
85
+ > kopyalayıp bana at — ikisi de olur.
86
+
87
+ **Hiç bulgu yoksa** kullanıcıya üç seçenek sun:
88
+
89
+ > Anahtarını bulamadım. Üç yoldan biriyle ilerleyebiliriz:
90
+ > 1. Dosyanın yerini biliyorsan yolunu söyle, gerisini ben hallederim.
91
+ > 2. Dosyayı panona kopyala, "kopyaladım" de — içeriğini görmeden kaydederim.
92
+ > 3. Henüz anahtarın yoksa nereden alacağını adım adım anlatayım.
93
+
94
+ ### Adım 3 — Anahtarı kaydet
95
+
96
+ Dosya yolunu biliyorsan tek komut. Anahtar önce Apple/Google'a gerçek bir istek
97
+ atılarak doğrulanır, geçmezse kasaya **yazılmaz**:
98
+
99
+ ```bash
100
+ npx -y magaza-mcp anahtar --apple-p8 "/Users/x/Downloads/AuthKey_ABC123DEFG.p8" \
101
+ --issuer-id 69a6de70-0000-0000-0000-000000000000
102
+
103
+ npx -y magaza-mcp anahtar --play-json "/Users/x/.config/play/hesap.json"
104
+ ```
105
+
106
+ - `--key-id` vermezsen dosya adından okunur (`AuthKey_XXXX.p8`). Okunamazsa
107
+ komut sana söyler, o zaman kullanıcıdan iste.
108
+ - `--issuer-id` her zaman gerekir. Gizli değildir; App Store Connect →
109
+ Kullanıcılar ve Erişim → Entegrasyonlar sayfasında anahtar listesinin üstünde
110
+ yazan UUID'dir. Kullanıcıdan istemekte sakınca yok.
111
+ - `--json` eklersen makine okunur çıktı alırsın.
112
+
113
+ **Kullanıcı "sana atayım" derse** anahtarı sohbete yapıştırtma; panosuna
114
+ kopyalatıp boru hattından geçir. İçerik senin bağlamına girmeden kasaya gider:
115
+
116
+ ```bash
117
+ pbpaste | npx -y magaza-mcp anahtar --play-json - # macOS
118
+ pbpaste | npx -y magaza-mcp anahtar --apple-p8 - --key-id ABC123DEFG --issuer-id <UUID>
119
+ ```
120
+
121
+ Linux'ta `xclip -o` veya `wl-paste` kullanılır. Kullanıcı dosyayı bir yere
122
+ sürükleyip bıraktıysa (çoğu istemci dosya yolunu mesaja yazar) o yolu doğrudan
123
+ `--apple-p8` / `--play-json` ile ver.
124
+
125
+ Yanlış anahtar verilirse kasadaki eskisi bozulmaz: Apple tarafında doğrulama
126
+ yazmadan önce yapılır, Play tarafında başarısızlıkta eski değer geri konur.
127
+
128
+ ### Adım 4 — Sunucuyu istemcilere kaydet
129
+
130
+ Bu komut kimlik bilgisi istemez, soru sormaz:
131
+
132
+ ```bash
133
+ npx -y magaza-mcp kaydet --magazalar appstore,play
134
+ ```
135
+
136
+ Kullanıcı tek mağaza kullanıyorsa onu ver — diğerinin araçları hiç yüklenmez:
137
+
138
+ ```bash
139
+ npx -y magaza-mcp kaydet --magazalar play
140
+ ```
141
+
142
+ Belirli istemcilere yazmak istersen:
143
+
144
+ ```bash
145
+ npx -y magaza-mcp kaydet --magazalar appstore,play --istemci claude-code,antigravity
146
+ ```
147
+
148
+ Geçerli istemci anahtarları: `claude-code`, `claude-desktop`, `antigravity`,
149
+ `cursor`, `windsurf`, `codex`. `--istemci` vermezsen makinede kurulu görünenlere
150
+ yazar.
151
+
152
+ Kullanıcı "hiçbir şeyi değiştirmesin, sadece okusun" diyorsa `--salt-okunur`
153
+ ekle (bayrak ayar dosyasına da yazılır):
154
+
155
+ ```bash
156
+ npx -y magaza-mcp kaydet --magazalar appstore,play --salt-okunur
157
+ ```
158
+
159
+ Bu modda yazma yapan araçlar (`appstore__yorum_yanitla`,
160
+ `appstore__metin_guncelle`, fiyat/abonelik/yaş derecelendirme araçları,
161
+ `play__yorum_yanitla`) listeye hiç girmez; 32 araç 24'e düşer. `magaza__cagir` listede kalır — katalogdaki okuma uçlarına da o
162
+ araçtan gidiliyor — ama veri değiştiren bir operasyon istendiğinde reddeder.
163
+
164
+ Komut mevcut ayarlara dokunmaz: yalnızca `magaza-mcp` girdisini ekler veya
165
+ günceller, her yazmadan önce `.magaza-mcp-yedek` kopyası alır ve yazmayı atomik
166
+ yapar.
167
+
168
+ ### Adım 5 — Doğrula ve bitir
169
+
170
+ ```bash
171
+ npx -y magaza-mcp durum
172
+ ```
173
+
174
+ `✓` görürsen bağlantı çalışıyor. Sonra kullanıcıya **istemcisini yeniden
175
+ başlatmasını** söyle — MCP sunucuları yalnızca açılışta yüklenir. Kendi
176
+ üzerinde çalıştığın istemciye kurduysan bunu özellikle belirt: sen yeniden
177
+ başlatamazsın.
178
+
179
+ Sık karşılaşılan çıktılar:
180
+
181
+ - **App Store: anahtar reddedildi** → Key ID, Issuer ID ve `.p8` birbirine ait
182
+ değil, ya da anahtar iptal edilmiş. Sistem saati de kaymış olabilir; imzalı
183
+ token'ın ömrü 20 dakika.
184
+ - **Play: "anahtar geçerli, ancak Play Developer Reporting API kapalı"** →
185
+ Anahtar sorunsuz. Yalnızca Cloud projesinde o API açılmamış;
186
+ `play__uygulamalar` ve `play__cokme_orani` bundan etkilenir, diğer Play
187
+ araçları çalışır. Kullanıcıya Cloud Console'dan açmasını önerebilirsin.
188
+
189
+ ---
190
+
191
+ ## Kullanıcının anahtarı hiç yoksa
192
+
193
+ Bunu ona sen anlatacaksın; linkleri ver, adımları say, sonra Adım 2'ye dön.
194
+
195
+ **App Store Connect:**
196
+ 1. [appstoreconnect.apple.com](https://appstoreconnect.apple.com) → Kullanıcılar
197
+ ve Erişim → Entegrasyonlar → App Store Connect API
198
+ 2. `+` ile anahtar üret. **App Manager rolü yeterlidir**, Admin gerekmez.
199
+ 3. İnen `.p8` dosyası **yalnızca bir kez** indirilebilir; sakladığı yeri sana
200
+ söylemesini iste.
201
+ 4. Aynı sayfadaki Issuer ID'yi ve anahtarın Key ID'sini de sana versin.
202
+
203
+ **Google Play:**
204
+ 1. [console.cloud.google.com](https://console.cloud.google.com) → servis hesabı
205
+ oluştur → JSON anahtarı indir.
206
+ 2. Aynı projede **Android Publisher API** ve **Play Developer Reporting API**'yi
207
+ aç.
208
+ 3. [Play Console](https://play.google.com/console) → Kullanıcılar ve izinler →
209
+ o servis hesabının e-postasını davet et, uygulamalara erişim ver.
210
+ 4. İzinlerin yayılması birkaç dakika sürebilir; `durum` ilk denemede 403
211
+ derse biraz bekleyip tekrar dene.
212
+
213
+ ---
214
+
215
+ ## Elle kurulum (sen yoksan)
216
+
217
+ Kullanıcı ajansız ilerlemek isterse bir sihirbaz var — ona bunu sen önerme,
218
+ yalnızca kullanıcı isterse söyle:
219
+
220
+ ```bash
221
+ npx magaza-mcp kur
222
+ ```
223
+
224
+ ---
225
+
226
+ ## Kurulumdan sonra: araçları nasıl kullanacaksın
227
+
228
+ ### Yüklü araçlar günlük işi görür
229
+
230
+ İki mağaza da açıkken 32 araç yüklenir: 16 tane `appstore__`, 10 tane `play__`,
231
+ 3 tane iki mağazayı birden sorgulayan `magaza__`, 3 tane de aşağıdaki erişim
232
+ aracı. Tek mağazalı kurulumda çapraz araçlar hiç oluşmaz: yalnızca App Store'da
233
+ 19, yalnızca Play'de 13 araç yüklenir. Araç tanımlarının tamamı bağlamda
234
+ yaklaşık **6.000 token** yer kaplar.
235
+
236
+ Abonelik ve IAP fiyatı, abonelik kurulumu, satış ülkeleri ve yaş
237
+ derecelendirmesi için hazır `appstore__` araçları var. Bunları
238
+ `magaza__cagir` ile ülke ülke yapma: hazır araç 175 ülkeyi tek istekte yazar.
239
+
240
+ Hangi araçların yüklü olduğunu `npx -y magaza-mcp araclar` ile görebilirsin.
241
+
242
+ ### Yüklü olmayan her şeye de erişebilirsin
243
+
244
+ Apple ve Google'ın API'lerinde toplam **1.440 operasyon** var. Bunların hepsini
245
+ ayrı araç olarak sunmak yaklaşık 210.000 token tutardı — bu yüzden sunulmuyor.
246
+ Bunun yerine:
247
+
248
+ ```
249
+ magaza__endpoint_ara(sorgu: "subscription price") → operasyonu bul
250
+ magaza__sema(magaza, operasyon) → gövdesi nasıl olmalı
251
+ magaza__cagir(magaza, operasyon, parametreler) → çalıştır
252
+ ```
253
+
254
+ Bu üç araç sayesinde kapalı hiçbir özellik yok; kullanılmayanın maliyeti de yok.
255
+
256
+ **Önemli:** Kullanıcı yüklü araçların kapsamadığı bir şey isterse "bu MCP
257
+ bunu yapamıyor" deme — önce `magaza__endpoint_ara` ile ara. Aradığın şey
258
+ büyük ihtimalle vardır. Arama Türkçe değil, API terimleriyle yapılır
259
+ (`subscription`, `review`, `build`, `crash rate`). Özeti `[ESKİMİŞ]` ile
260
+ başlayan operasyonlar Apple'ın artık önermediği uçlardır; güncel bir karşılığı
261
+ varsa onu tercih et.
262
+
263
+ ### Veri değiştirirken
264
+
265
+ Yazma işlemleri `onayla: true` olmadan çalışmaz. Onay istendiğinde araç sana ne
266
+ olacağını ve beklenen gövdeyi döndürür. **Kullanıcıya ne yapacağını anlat,
267
+ onayını al, sonra tekrar çağır.** Kullanıcı açıkça istemeden `onayla: true`
268
+ gönderme.
269
+
270
+ Fiyat değiştirmek, kullanıcı yetkisi vermek, bir şey silmek ve yayına almak
271
+ geri alınması zor işlerdir; bunlarda özellikle dikkatli ol.