magaza-mcp 0.1.0 → 0.2.1
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 +267 -0
- package/README.md +470 -110
- package/dist/src/anahtar.js +216 -0
- package/dist/src/cli.js +36 -11
- package/dist/src/dogrula.js +94 -0
- package/dist/src/kaydet.js +5 -4
- package/dist/src/kur.js +5 -55
- package/dist/src/tara.js +236 -0
- package/package.json +4 -2
package/AGENTS.md
ADDED
|
@@ -0,0 +1,267 @@
|
|
|
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`, `play__yorum_yanitla`) listeye hiç girmez; 27 araç
|
|
161
|
+
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 27 araç yüklenir: 11 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
|
+
14, yalnızca Play'de 13 araç yüklenir. Araç tanımlarının tamamı bağlamda
|
|
234
|
+
yaklaşık **4.000 token** yer kaplar.
|
|
235
|
+
|
|
236
|
+
Hangi araçların yüklü olduğunu `npx -y magaza-mcp araclar` ile görebilirsin.
|
|
237
|
+
|
|
238
|
+
### Yüklü olmayan her şeye de erişebilirsin
|
|
239
|
+
|
|
240
|
+
Apple ve Google'ın API'lerinde toplam **1.440 operasyon** var. Bunların hepsini
|
|
241
|
+
ayrı araç olarak sunmak yaklaşık 210.000 token tutardı — bu yüzden sunulmuyor.
|
|
242
|
+
Bunun yerine:
|
|
243
|
+
|
|
244
|
+
```
|
|
245
|
+
magaza__endpoint_ara(sorgu: "subscription price") → operasyonu bul
|
|
246
|
+
magaza__sema(magaza, operasyon) → gövdesi nasıl olmalı
|
|
247
|
+
magaza__cagir(magaza, operasyon, parametreler) → çalıştır
|
|
248
|
+
```
|
|
249
|
+
|
|
250
|
+
Bu üç araç sayesinde kapalı hiçbir özellik yok; kullanılmayanın maliyeti de yok.
|
|
251
|
+
|
|
252
|
+
**Önemli:** Kullanıcı yüklü araçların kapsamadığı bir şey isterse "bu MCP
|
|
253
|
+
bunu yapamıyor" deme — önce `magaza__endpoint_ara` ile ara. Aradığın şey
|
|
254
|
+
büyük ihtimalle vardır. Arama Türkçe değil, API terimleriyle yapılır
|
|
255
|
+
(`subscription`, `review`, `build`, `crash rate`). Özeti `[ESKİMİŞ]` ile
|
|
256
|
+
başlayan operasyonlar Apple'ın artık önermediği uçlardır; güncel bir karşılığı
|
|
257
|
+
varsa onu tercih et.
|
|
258
|
+
|
|
259
|
+
### Veri değiştirirken
|
|
260
|
+
|
|
261
|
+
Yazma işlemleri `onayla: true` olmadan çalışmaz. Onay istendiğinde araç sana ne
|
|
262
|
+
olacağını ve beklenen gövdeyi döndürür. **Kullanıcıya ne yapacağını anlat,
|
|
263
|
+
onayını al, sonra tekrar çağır.** Kullanıcı açıkça istemeden `onayla: true`
|
|
264
|
+
gönderme.
|
|
265
|
+
|
|
266
|
+
Fiyat değiştirmek, kullanıcı yetkisi vermek, bir şey silmek ve yayına almak
|
|
267
|
+
geri alınması zor işlerdir; bunlarda özellikle dikkatli ol.
|