@appaflytech/zeyrek-ai-mcp 0.0.4 → 0.0.5

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/.env.example CHANGED
@@ -1,6 +1,10 @@
1
1
  # LOKAL PROFIL — platform/gateway kodu gelistirirken. Uzak ortam icin:
2
2
  # cp zeyrek-mcp/.env.production.example .env
3
3
  # Ortam rolleri: docs/ortam.md
4
+ #
5
+ # npm paketiyle (npx @appaflytech/zeyrek-ai-mcp) kurulumda .env sart degil: ayni anahtarlar
6
+ # .mcp.json'in env blogundan verilebilir ve o blok .env'i ezer. Arama sirasi:
7
+ # <calisma dizini>/.env -> <paket>/.env -> <paket>/../.env
4
8
 
5
9
  # Platform API adresleri (host makinesinden lokal compose icin)
6
10
  ORG_API_BASE_URL=http://localhost:17000
@@ -52,9 +56,10 @@ SCREENSHOT_BROWSER_PATH=
52
56
  ORG_SWAGGER_URL=
53
57
  TENANT_SWAGGER_URL=
54
58
 
55
- # Bos = tum moduller (149 tool). Hazir kumeler: core (veri+mantik, 92), studio (sayfa
56
- # tasarimi, 46), admin (template/organizasyon/deployment, 15). Kume ve tekil modul adi
57
- # karisik yazilabilir. Ornek: core,studio | entity,row,microservice
59
+ # Bos = tum moduller (162 tool / 26 modul). Hazir kumeler: core (veri+mantik, 93), studio
60
+ # (sayfa tasarimi, 59), admin (template/organizasyon/deployment, 16). platform modulu (3 tool)
61
+ # her kumede vardir. Kume ve tekil modul adi karisik yazilabilir.
62
+ # Ornek: core,studio | entity,row,microservice
58
63
  MODULES=
59
64
 
60
65
  MCP_PORT=5100
@@ -1,6 +1,7 @@
1
1
  # UZAK PROFIL — kosular, uygulama kurulumu, gercek-ekran dogrulama, demo.
2
2
  # Kurulum: cp zeyrek-mcp/.env.production.example .env (sonra PASSWORD'u doldurun)
3
3
  # Ortam rolleri: docs/ortam.md
4
+ # npm paketiyle kurulumda ayni anahtarlar .mcp.json'in env blogundan da verilebilir (README).
4
5
  #
5
6
  # "production" burada PLATFORM KURULUMUNUN adidir. AI'in yazma hedefi orada da
6
7
  # development environment'idir — asagidaki DEFAULT_ENVIRONMENT bu yuzden development.
@@ -37,6 +38,7 @@ SCREENSHOT_BROWSER_PATH=
37
38
  ORG_SWAGGER_URL=
38
39
  TENANT_SWAGGER_URL=
39
40
 
41
+ # Bos = tum moduller (162 tool). Kumeler: core (93) | studio (59) | admin (16).
40
42
  MODULES=
41
43
 
42
44
  MCP_PORT=5100
package/README.md CHANGED
@@ -1,174 +1,150 @@
1
- # zeyrek-ai-mcp
1
+ # @appaflytech/zeyrek-ai-mcp
2
2
 
3
- NgApps platformunu MCP tool'ları olarak sunan bağımsız gateway — veri/mantık tarafı (project,
4
- application, datasource, entity, row, microservice, query, workflow, automation, dto, view) ve
5
- Studio tasarım tarafı (page, component, flow, layout, variable, folder, file) birlikte, **162
6
- tool / 24 modül**. Durum + yol haritası:
7
- [`docs/00-durum-ve-yol-haritasi.md`](docs/00-durum-ve-yol-haritasi.md);
8
- tasarım: [`docs/`](docs/01-vizyon-ve-kapsam.md). Platform koduna
9
- referans vermez; iki API'yi HTTP üzerinden sarar, istekler MVC binding'den geçtiği için
10
- FluentValidation aynen çalışır.
3
+ Zeyrek (NgApps) platformunu **MCP tool'ları** olarak sunan bağımsız gateway. Bir Claude / MCP
4
+ oturumu Studio arayüzüne hiç girmeden proje kurabilir, veri modeli çıkarabilir, mikroservis ve
5
+ workflow yazıp çalıştırabilir, sayfa tasarlayabilir.
11
6
 
12
- ## Kurulum
7
+ - **162 tool · 26 modül** — veri/mantık tarafı (project, application, datasource, entity, row,
8
+ microservice, query, workflow, automation, dto, view, dependency), Studio tasarım tarafı
9
+ (page, component, external component, flow, layout, variable, folder, file, access,
10
+ translation) ve yönetim (template, organization, deployment).
11
+ - Platform koduna referans vermez: Organization.API ile Tenant.API'yi **HTTP üzerinden** sarar —
12
+ istekler MVC binding'den geçtiği için FluentValidation aynen çalışır.
13
+ - Üstünde bir **bilgi katmanı** vardır (rehber + altın örnek + politika lint'i): platformun
14
+ yazılı olmayan kuralları istek API'ye gitmeden uygulanır.
13
15
 
14
- ```bash
15
- cd zeyrek-mcp
16
- npm install
17
- cp .env.example ../.env
18
- ```
16
+ Gereken: **Node 20+** ve erişebildiğiniz bir platform kurulumu (API adresleri, org adı, kullanıcı).
19
17
 
20
- `.env` **repo kökünde**, `.mcp.json`'ın yanında durur (kök `.gitignore`'da `/.env` ile korunur).
21
- Sunucu şu sırayla arar, ilk bulunan anahtar kazanır: `<çalışma dizini>/.env` →
22
- `<paket>/.env` → `<paket>/../.env`.
18
+ ---
23
19
 
24
- > `npm install` yalnız `npm run dev` için değil: repo kökündeki `.mcp.json` sunucuyu
25
- > `zeyrek-mcp/node_modules/.bin/tsx` ile başlatır. Bağımlılıklar kurulu değilken MCP istemcisi
26
- > **hata vermeden sıfır tool ile** bağlanır — repoyu yeni klonladıysanız ilk adım budur.
20
+ ## Hızlı başlangıç (npm)
27
21
 
28
- Ayarlar `.env` yerine (ya da onunla birlikte) repo kökündeki `.mcp.json`'ın `env` bloğundan da
29
- verilebilir; env bloğu her zaman `.env`'i ezer — ayrıntı [npm paketi olarak
30
- kurulum](#npm-paketi-olarak-kurulum). Asgari şunlar gerekir:
22
+ Repoyu klonlamanıza gerek yok; paket npx ile çalışır. Projenizin kökündeki `.mcp.json`'a
23
+ ekleyin:
31
24
 
32
- | Değişken | Örnek | Not |
33
- |----------|-------|-----|
34
- | `ORG_API_BASE_URL` | `http://localhost:7000` | Organization.API |
35
- | `TENANT_API_BASE_URL` | `http://localhost:5000` | Tenant.API |
36
- | `ORGANIZATION` | `zeyrek-local` | Org subdomain'i; istekler `Host: {org}.{suffix}` ile gider |
37
- | `USERNAME` / `PASSWORD` | | `/connect/token` ile takas edilir (AuthMode=local) |
38
- | `DEFAULT_PROJECT` | `crm` | Opsiyonel; tool'daki `project` parametresi her zaman ezer |
39
- | `STUDIO_BASE_URL` | `http://localhost:3000` | Opsiyonel; yalnız `page_screenshot` kullanır — Studio arayüzünün kök adresi ([`docs/26`](docs/26-sayfa-ekran-goruntusu.md)) |
40
- | `SCREENSHOT_BROWSER_PATH` | `/usr/bin/chromium-browser` | Opsiyonel; `page_screenshot` için sistemdeki Chromium ikilisinin yolu (verilmezse playwright-core'un indirdiği tarayıcı) |
25
+ ```json
26
+ {
27
+ "mcpServers": {
28
+ "zeyrek-ai": {
29
+ "type": "stdio",
30
+ "command": "npx",
31
+ "args": ["-y", "@appaflytech/zeyrek-ai-mcp@0.0.5", "--stdio"],
32
+ "env": {
33
+ "ORG_API_BASE_URL": "https://new-zeyrek.glomil.com/api/org",
34
+ "TENANT_API_BASE_URL": "https://new-zeyrek.glomil.com/api",
35
+ "ORGANIZATION": "new-zeyrek",
36
+ "HOST_SUFFIX": "glomil.com",
37
+ "DEFAULT_ENVIRONMENT": "development",
38
+ "USERNAME": "admin@zeyrek.com",
39
+ "PASSWORD": "parolanız",
40
+ "LOG_DIR": "logs"
41
+ }
42
+ }
43
+ }
44
+ }
45
+ ```
41
46
 
42
- ## Çalıştırma
47
+ Claude Code'da komutla eklemek isterseniz:
43
48
 
44
49
  ```bash
45
- npm run dev
50
+ claude mcp add zeyrek-ai \
51
+ -e ORG_API_BASE_URL=https://new-zeyrek.glomil.com/api/org \
52
+ -e TENANT_API_BASE_URL=https://new-zeyrek.glomil.com/api \
53
+ -e ORGANIZATION=new-zeyrek \
54
+ -e HOST_SUFFIX=glomil.com \
55
+ -e DEFAULT_ENVIRONMENT=development \
56
+ -e USERNAME=admin@zeyrek.com \
57
+ -e PASSWORD='parolanız' \
58
+ -- npx -y @appaflytech/zeyrek-ai-mcp@0.0.5 --stdio
46
59
  ```
47
60
 
48
- Sağlık: `http://localhost:5100/healthz`. Sunucu stateless streamable HTTP konuşur (`/mcp`,
49
- yalnız POST); `npm run start:stdio` ile stdio kipi de var.
61
+ **İlk doğrulama:** oturumda `platform_whoami` tool'unu çağırtın — kimlik, org çözümü ve ağ
62
+ erişimi tek seferde test edilir. Tool listesi boş geliyorsa Sorun giderme bölümüne bakın.
50
63
 
51
- ## Tool çağrısı günlüğü
64
+ ### Sürüm seçimi
52
65
 
53
- Her MCP tool çağrısı, okunmak için biçimlenmiş tek bir blok olarak dosyaya yazılır — varsayılan
54
- `zeyrek-mcp/logs/gateway-YYYY-MM-DD.log` (günlük dosya, `.gitignore`'da). Amaç: bir çağrının ne
55
- yapmaya çalıştığını, içeriden hangi duraklardan geçtiğini ve nerede patladığını **koda inmeden**
56
- okuyabilmek.
66
+ `@0.0.5` gibi sabit sürüm önerilir: npx kopyayı önbelleğe alır, sabit sürümde herkes aynı
67
+ gateway'i çalıştırır. `@latest` yazarsanız ekipteki makineler farklı sürümlerde kalabilir;
68
+ güncellemek için `.mcp.json`'daki sürümü yükseltip MCP sunucusunu yeniden başlatın.
57
69
 
58
- ```
59
- ┌─ #1 · 11:27:27.082 · platform_whoami — Oturum bilgisi
60
- │ amaç : Gateway'in platformda kimin adına çalıştığını döner; auth kurulumunu doğrulamak için ilk çağrılacak tool.
61
- │ girdi : (parametresiz)
62
- │ adımlar:
63
- │ +2ms kimlik → önbellekte geçerli token yok — POST http://localhost:7000/connect/token · kullanıcı admin@zeyrek.com
64
- │ +229ms kimlik ← HTTP 200 · token alındı, önbellekte 63158340 sn geçerli
65
- │ +229ms istek → GET http://localhost:7000/connect/userinfo · org api · env=development
66
- │ +237ms yanıt ← HTTP 200 · 8 ms · 174 B
67
- │ gövde: {"sub":"01917edf-…","email":"admin@zeyrek.com","role":["super-admin"]}
68
- └─ SONUÇ : başarılı · 238 ms · 4 adım · 137 B yanıt
69
- ```
70
+ ---
70
71
 
71
- Adım etiketleri: `politika` (lint kuralları; `politika ✕` isteği hiç göndermez), `düzeltme`
72
- (gateway'in gövdeye uyguladığı otomatik düzeltmeler — yanıttaki `gatewayNormalized`), `kimlik →/←`
73
- (`/connect/token` turu), `istek →/yanıt ←` (platform API turu, tam URL + süre + boyut),
74
- `kırpma ✂` (yanıt `MAX_RESPONSE_BYTES` sınırını aştı), `tarayıcı →/←` (`page_screenshot`'ın
75
- headless Chromium turu: açılan URL, viewport, PNG boyutu), `hata ✕` (yakalanan hata: sınıf,
76
- HTTP kodu, mesaj, ilk 3 stack satırı). Tool gövdesine hiç girmeyen çağrılar — yanlış tool adı ya da
77
- parametre şemasına takılan gövde — `MCP KATMANI REDDETTİ` bloğu olarak düşer; bunlar aksi hâlde
78
- hiçbir yerde görünmezdi.
72
+ ## Ayarlar
79
73
 
80
- Arama: `SONUÇ : HATA` tüm başarısız çağrılar, `hata ✕` hata satırları, `#<n>` tek bir çağrı.
74
+ Ayar üç kaynaktan gelebilir, **öncelik sırası**:
81
75
 
82
- | Değişken | Varsayılan | Not |
83
- |----------|-----------|-----|
84
- | `LOG_LEVEL` | `detail` | `detail` istek/yanıt gövdelerini de yazar · `summary` yalnız durak + boyut + hata gövdeleri · `off` hiç dosya açmaz |
85
- | `LOG_DIR` | `zeyrek-mcp/logs` | Günlük dosyaların klasörü |
86
- | `LOG_FILE` | — | Verilirse tek sabit dosyaya yazar (tarih döndürmesi kapanır) |
87
- | `LOG_MAX_BODY_CHARS` | `2000` | Tek bir gövde/parametre önizlemesinin karakter sınırı |
76
+ 1. `.mcp.json`'ın `env` bloğu (npm kurulumunda tek kaynak budur)
77
+ 2. `.env` dosyası — sırayla aranır, ilk bulunan anahtar kazanır:
78
+ `<çalışma dizini>/.env` → `<paket>/.env` → `<paket>/../.env`
79
+ 3. Şemadaki varsayılan
88
80
 
89
- Adı `pass|secret|token|authorization|api key|credential|connectionString` desenine uyan alanlar
90
- `***` ile maskelenir (`girdi` satırında ve gövde önizlemelerinde). Günlükleme yazma hatası tool
91
- çağrısını **düşürmez**: ilk hatada stderr'e tek satır yazılıp günlükleme kapatılır.
81
+ Parolayı sürüm kontrolündeki bir dosyaya yazmak istemiyorsanız `.mcp.json`'da `PASSWORD` alanını
82
+ hiç yazmayıp çalışma dizininize `PASSWORD=...` içeren bir `.env` koyun.
92
83
 
93
- ## Claude Code kaydı
84
+ ### Zorunlu
94
85
 
95
- ```bash
96
- claude mcp add ngapps --transport http http://localhost:5100/mcp
97
- ```
86
+ | Değişken | Örnek | Not |
87
+ |---|---|---|
88
+ | `ORG_API_BASE_URL` | `https://new-zeyrek.glomil.com/api/org` | Organization.API kökü |
89
+ | `TENANT_API_BASE_URL` | `https://new-zeyrek.glomil.com/api` | Tenant.API kökü |
90
+ | `ORGANIZATION` | `new-zeyrek` | Org subdomain'i; istekler `Host: {ORGANIZATION}.{HOST_SUFFIX}` ile gider |
91
+ | `DEFAULT_ENVIRONMENT` | `development` | Gömülü varsayılanı **yoktur**; boşsa sunucu açılmaz |
92
+ | `USERNAME` + `PASSWORD` | | `AUTH_MODE=local` için; `/connect/token` ile takas edilir |
93
+ | `TOKEN` | | `USERNAME`/`PASSWORD` yerine hazır Bearer JWT verilebilir |
98
94
 
99
- stdio alternatifi (port gerekmez, sunucuyu istemci başlatır):
95
+ ### Opsiyonel
100
96
 
101
- ```bash
102
- claude mcp add zeyrek-ai -- npx tsx <repo>/zeyrek-mcp/src/index.ts --stdio
103
- ```
97
+ | Değişken | Varsayılan | Not |
98
+ |---|---|---|
99
+ | `HOST_SUFFIX` | `localhost` | Org çözümündeki alan adı eki |
100
+ | `DEFAULT_PROJECT` | — | Tool'daki `project` parametresi her zaman ezer |
101
+ | `AUTH_MODE` | `local` | `passthrough`: kimlik istemcinin `Authorization` header'ından gelir (stdio kipinde kullanılamaz) |
102
+ | `MODULES` | hepsi | Tool setini daraltır — aşağıdaki Modüller bölümü |
103
+ | `POLICY` | `strict` | Politika lint'i: `strict` \| `warn` \| `off` |
104
+ | `LOG_LEVEL` | `detail` | `detail` gövdeleri de yazar · `summary` gövdesiz · `off` dosya açmaz |
105
+ | `LOG_DIR` | çalışma dizini altında `logs/` | Günlük dosyaların klasörü |
106
+ | `LOG_FILE` | — | Verilirse tek sabit dosyaya yazar (tarih döndürmesi kapanır) |
107
+ | `LOG_MAX_BODY_CHARS` | `2000` | Tek gövde/parametre önizlemesinin karakter sınırı |
108
+ | `MAX_RESPONSE_BYTES` | `262144` | Yanıt budama eşiği |
109
+ | `REQUEST_TIMEOUT_MS` | `100000` | Platform isteklerinin zaman aşımı |
110
+ | `MCP_PORT` | `5100` | Yalnız HTTP kipinde |
111
+ | `STUDIO_BASE_URL` | — | Yalnız `page_screenshot`: Studio arayüzünün kök adresi |
112
+ | `SCREENSHOT_BROWSER_PATH` | — | `page_screenshot` için sistemdeki Chromium ikilisi (verilmezse playwright-core'un indirdiği tarayıcı) |
104
113
 
105
- İlk doğrulama: oturumda `platform_whoami` tool'unu çağırtın — kimlik ve org çözümü tek seferde
106
- test edilir.
114
+ Tam liste ve yorumlu şablon: pakete dahil edilen `.env.example` (lokal profil) ve
115
+ `.env.production.example` (uzak profil).
107
116
 
108
- ## npm paketi olarak kurulum
117
+ ### Bilinmesi gereken üç davranış
109
118
 
110
- Repoyu klonlamadan, yayınlanmış paketle. Tüm ayarlar `.mcp.json`'ın `env` bloğundan gelir;
111
- `.env` dosyasına gerek yoktur:
119
+ - **`${…}` genişletmesi istemciye bağlıdır.** Claude Code `${PASSWORD}` ve
120
+ `${PASSWORD:-varsayılan}` yazımını açar, VS Code'un kendi MCP istemcisi açmaz ve metni olduğu
121
+ gibi geçirir. Sunucu, açılmamış yer tutucuyu boş değerle aynı sayıp **düşürür** — ayar `.env`'den
122
+ ya da varsayılandan doldurulur, sunucu yer tutucu metinle patlamaz.
123
+ - **Boş bırakılan (`""`) alan tanımsız sayılır**; varsayılana düşer ya da `.env`'den doldurulur.
124
+ Yani `"MODULES": ""` yazmak alanı hiç yazmamakla aynıdır.
125
+ - **`USERNAME` adı işletim sistemine aittir** (Windows'ta her zaman, macOS kabuklarında sık sık
126
+ tanımlıdır). Bu yüzden `.mcp.json`'da `${USERNAME:-…}` gibi genişletme kullanmayın, değeri düz
127
+ yazın. Değer işletim sisteminin kullanıcı adıyla (`USER`/`LOGNAME`) **aynıysa** sunucu onu
128
+ düşürür ve `.env`'deki değer geçerli olur; bu guard olmadan gateway kimliği makine kullanıcı
129
+ adıyla almaya kalkıyor ve `POST /connect/token` "kayıt bulunamadı" diyerek 404 dönüyordu.
112
130
 
113
- ```json
114
- {
115
- "mcpServers": {
116
- "zeyrek-ai": {
117
- "type": "stdio",
118
- "command": "npx",
119
- "args": ["-y", "@appaflytech/zeyrek-ai-mcp@latest", "--stdio"],
120
- "env": {
121
- "ORG_API_BASE_URL": "http://localhost:17000",
122
- "TENANT_API_BASE_URL": "http://localhost:15000",
123
- "ORGANIZATION": "zeyrek-test",
124
- "HOST_SUFFIX": "zeyrek.local",
125
- "DEFAULT_PROJECT": "emrah",
126
- "DEFAULT_ENVIRONMENT": "development",
127
- "USERNAME": "admin@zeyrek.com",
128
- "PASSWORD": "${PASSWORD}",
129
- "MODULES": "core",
130
- "LOG_DIR": "logs"
131
- }
132
- }
133
- }
134
- }
135
- ```
131
+ ---
136
132
 
137
- Ayar öncelik sırası: **`.mcp.json` env bloğu → `.env` (varsa; repo içinden çalışırken kökte
138
- durur) → şemadaki varsayılan.** `.env.example` tüm değişkenlerin tam listesidir. npx ile kurulan
139
- pakette `.env` yoktur, tüm ayarlar env bloğundan gelir.
140
-
141
- - `.mcp.json` sürüm kontrolündeyse parolayı düz yazmayın: Claude Code `${PASSWORD}` ve
142
- `${PASSWORD:-varsayılan}` genişletmesi yapar, değer kabuk ortamından gelir.
143
- - Genişletme **istemciye bağlıdır**: Claude Code açar, VS Code'un kendi MCP istemcisi açmaz ve
144
- metni olduğu gibi geçirir. Bu yüzden sunucu, açılmamış `${…}` yer tutucusunu boş değerle aynı
145
- sayıp **düşürür** — ayar `.env`'den ya da şema varsayılanından doldurulur, sunucu yer tutucu
146
- metinle patlamaz (`dropUnusableEnvironment`). Ortama göre gerçekten değişen ayarı `.env`'e
147
- koymak her istemcide çalışan yoldur.
148
- - Boş bırakılan (`""`) alanlar **tanımsız** sayılır; varsayılana düşer ya da `.env`'den
149
- doldurulur. Yani `"${MODULES:-}"` yazmak alanı hiç yazmamakla aynıdır.
150
- - Değişken adları ön eksizdir (`USERNAME`, `PASSWORD`, `TOKEN`, `LOG_LEVEL` …), yani kabuk
151
- ortamındaki aynı adlı değişkenlerle çakışabilir — `USERNAME` Windows'ta yerleşiktir, macOS
152
- kabukları da sık sık tanımlar. Bu yüzden `.mcp.json`'da `${USERNAME:-…}` gibi genişletme
153
- kullanmayın; değeri düz yazın.
154
- `USERNAME` işletim sisteminin kullanıcı adıyla (`USER`/`LOGNAME`) AYNIYSA sunucu onu düşürür ve
155
- `.env`'deki değer geçerli olur — bu guard olmadan terminalden `npm run dev` çalıştırmak kimliği
156
- makine kullanıcısı adıyla almaya kalkıyor ve `POST /connect/token` 404 dönüyordu. Hata metni
157
- "kayıt bulunamadı" olduğu için kimlik ayarına değil veriye işaret ediyor, teşhisi zorlaştırıyordu.
158
- - `LOG_DIR` verilmezse günlükler **çalışma dizininin** altındaki `logs/` klasörüne yazılır.
159
- - Konfigürasyon geçersizse sunucu stderr'e tek satır sebep yazıp `exit 1` yapar — istemci artık
160
- sessizce sıfır tool ile bağlanmaz.
161
-
162
- Yayınlama (paket bakımcısı için):
133
+ ## Modüller
163
134
 
164
- ```bash
165
- cd zeyrek-mcp
166
- npm run typecheck && npm test
167
- npm publish # prepack: tsc -p tsconfig.build.json + varlık kopyalama
168
- ```
135
+ `MODULES` ile tool seti daraltılabilir — tekil modül adı (`entity,row,microservice`), hazır küme
136
+ ya da ikisi karışık (`core,page`). `platform` modülü (3 tool) her kümede vardır.
137
+
138
+ | Küme | Tool | Modüller |
139
+ |---|---|---|
140
+ | `core` | 93 | platform, project, application, datasource, entity, row, microservice, query, workflow, automation, dto, view, dependency |
141
+ | `studio` | 59 | platform, page, component, externalComponent, flow, layout, variable, folder, file, access, translation |
142
+ | `admin` | 16 | platform, template, organization, deployment |
143
+ | (boş) | **162** | 26 modülün tamamı |
169
144
 
170
- `dist/` içine `src/resources/{schemas,guides,examples}` altındaki 41 JSON/MD varlığı
171
- `scripts/copy-assets.ts` kopyalar — `tsc` tek başına bunları taşımaz.
145
+ Bilinmeyen bir modül/küme adı verilirse sunucu açılmaz, geçerli adları listeleyen bir hata yazar.
146
+
147
+ ---
172
148
 
173
149
  ## Kullanım kalıpları
174
150
 
@@ -178,47 +154,39 @@ npm publish # prepack: tsc -p tsconfig.build.json + varlık kopyalama
178
154
  `definition` parametresini API'ye birebir geçirir. En iyi şablon, mevcut bir kaydın `*_get`
179
155
  çıktısıdır; step şeması için `workflow_step_schema` kullanılır.
180
156
  - **Test kası:** `microservice_execute` gerçek runtime yolunu çağırır; dönen `httpStatus`
181
- microservice'in kendi sonucudur. Beklenmedik sonuçta aynı parametrelerle
182
- `microservice_debug` çağırın — adım adım `executionItems` ağacı döner.
157
+ microservice'in kendi sonucudur. Beklenmedik sonuçta aynı parametrelerle `microservice_debug`
158
+ çağırın — adım adım `executionItems` ağacı döner.
183
159
  - **Asenkron işler:** `automation_trigger` fire-and-forget'tır (`automation_histories` ile
184
160
  izlenir); `deployment_start` bir saga başlatır (`deployment_status` ile izlenir).
185
161
  - **Sayfa tasarımı:** `layout_*` → `page_create` → `page_state` → `page_schema_patch`
186
162
  (micro-op); olay akışları `flow_*` + `set_event`. Şema değişikliği `page_update` ile değil
187
- `page_schema_patch` ile yapılır; `page_build` diye bir tool **yok** (platform ucu üründe
188
- olmayan ayrı bir servise delege ediyor) — ayrıntı `platform_guide('page')`.
163
+ `page_schema_patch` ile yapılır; `page_build` diye bir tool **yok** — ayrıntı
164
+ `platform_guide('page')`.
189
165
  - **Yazma tool'ları replace gövdeleri merge eder:** `page_update`, `layout_update`,
190
166
  `component_update` kaydı önce okur, yalnız verdiğiniz alanları değiştirir; şema/olay kaybı
191
167
  olmaz. `flow_*` uçlarının istediği barındırıcı gövdesini de gateway kurar.
192
- - Tool seti `MODULES` ile daraltılabilir: tekil modül adı (`entity,row,microservice`)
193
- ya da hazır küme — `core` (92 tool: veri + mantık), `studio` (50 tool: sayfa tasarımı),
194
- `admin` (15 tool: template, organizasyon, deployment). Küme ve modül adları karışık
195
- yazılabilir: `MODULES=core,page`.
196
-
197
- ## Bilgi katmanı (Faz 1.5)
198
-
199
- Tasarım: [`docs/07-bilgi-katmani.md`](docs/07-bilgi-katmani.md).
200
- Üç savunma hattı:
201
-
202
- - **Rehberler:** `platform_guide` tool'u (workflow, microservice, entity, page, component,
203
- html, layout, middleware, view, expressions, getting-started, modify-existing) + `ngapps://guides/*`
204
- resource'ları. Bir modülde ilk yazma işleminden önce ilgili rehber okunmalı; tool
205
- açıklamaları bunu söyler. Komponent davranış bilgisi ayrıca `component_get` çıktısında
206
- `knowledge` alanı olarak döner (`src/knowledge/componentCatalog.ts`).
207
- - **Altın örnekler:** `ngapps://examples/*` — boş org'da şablon kaynağı. Şu an sentetik seed;
208
- platform ayaktayken `npm run harvest-examples -- --project qm` ham hasadı
209
- `src/resources/examples/harvested/` altına yazar, küratörlükten geçen dosyalar `examples/`
210
- köküne taşınır.
168
+ - **Gerçek ekran:** UI değişikliği `page_screenshot` ile doğrulanır (`STUDIO_BASE_URL` gerekir;
169
+ ilk kullanımda `npx playwright-core install chromium`).
170
+
171
+ ## Bilgi katmanı
172
+
173
+ Üç savunma hattı, hepsi pakete gömülü — ayrı kurulum gerekmez:
174
+
175
+ - **Rehberler:** `platform_guide` tool'u (workflow, microservice, entity, page, component, html,
176
+ layout, middleware, view, expressions, getting-started, modify-existing) +
177
+ `ngapps://guides/*` resource'ları. Bir modülde ilk yazma işleminden önce ilgili rehber
178
+ okunmalıdır; tool açıklamaları bunu söyler. Komponent davranış bilgisi ayrıca `component_get`
179
+ çıktısında `knowledge` alanı olarak döner.
180
+ - **Altın örnekler:** `ngapps://examples/*` — boş org'da şablon kaynağı.
211
181
  - **Politika lint'i:** entity/microservice/workflow/automation create/update/preview gövdeleri
212
- API'ye gitmeden `src/knowledge/rules.ts` kurallarından geçer. Block kuralları (MS-001 join'li
213
- kaynakta boş selectFields, WF-001 kopuk step grafı, WF-002 workflow'da returnDtoId, WF-005
214
- tip×step matrisi) isteği durdurup düzeltme önerisi döner; warn bulguları yanıta
215
- `policyFindings` olarak eklenir. `POLICY=strict|warn|off`, çağrı başına kaçış:
216
- `policyOverride: true`. Kural envanteri: `docs/08-kural-envanteri.md`.
182
+ API'ye gitmeden kurallardan geçer. Block kuralları (MS-001 join'li kaynakta boş selectFields,
183
+ WF-001 kopuk step grafı, WF-002 workflow'da returnDtoId, WF-005 tip×step matrisi) isteği
184
+ durdurup düzeltme önerisi döner; warn bulguları yanıta `policyFindings` olarak eklenir.
185
+ `POLICY=strict|warn|off`, çağrı başına kaçış: `policyOverride: true`.
217
186
 
218
187
  ## Büyük şema erişimi
219
188
 
220
- Tam gövdeyi LLM bağlamına sokmadan çalışma modeli
221
- ([tasarım](docs/09-buyuk-sema-stratejisi.md)):
189
+ Tam gövdeyi LLM bağlamına sokmadan çalışma modeli:
222
190
 
223
191
  1. `project_overview` — projenin kompakt haritası (id/ad/tip envanteri)
224
192
  2. `workflow_get` / `microservice_get` / `entity_get` + `view: 'outline'` — iskelet
@@ -226,42 +194,135 @@ Tam gövdeyi LLM bağlamına sokmadan çalışma modeli
226
194
  4. `workflow_patch` / `microservice_patch` / `entity_patch` — RFC 6902 işlemleri; gateway
227
195
  get→patch→lint→put zincirini kendi belleğinde yürütür, yanıt outline özetidir
228
196
 
229
- ## Şema kaynakları
197
+ ---
198
+
199
+ ## Tool çağrısı günlüğü
200
+
201
+ Her MCP tool çağrısı, okunmak için biçimlenmiş tek bir blok olarak dosyaya yazılır — varsayılan
202
+ `{LOG_DIR}/gateway-YYYY-AA-GG.log`. Amaç: bir çağrının ne yapmaya çalıştığını, hangi duraklardan
203
+ geçtiğini ve nerede patladığını **koda inmeden** okuyabilmek.
204
+
205
+ ```
206
+ ┌─ #1 · 11:27:27.082 · platform_whoami — Oturum bilgisi
207
+ │ amaç : Gateway'in platformda kimin adına çalıştığını döner; auth kurulumunu doğrulamak için ilk çağrılacak tool.
208
+ │ girdi : (parametresiz)
209
+ │ adımlar:
210
+ │ +2ms kimlik → önbellekte geçerli token yok — POST http://localhost:7000/connect/token · kullanıcı admin@zeyrek.com
211
+ │ +229ms kimlik ← HTTP 200 · token alındı, önbellekte 63158340 sn geçerli
212
+ │ +229ms istek → GET http://localhost:7000/connect/userinfo · org api · env=development
213
+ │ +237ms yanıt ← HTTP 200 · 8 ms · 174 B
214
+ │ gövde: {"sub":"01917edf-…","email":"admin@zeyrek.com","role":["super-admin"]}
215
+ └─ SONUÇ : başarılı · 238 ms · 4 adım · 137 B yanıt
216
+ ```
217
+
218
+ Adım etiketleri: `politika` (lint kuralları; `politika ✕` isteği hiç göndermez), `düzeltme`
219
+ (gateway'in gövdeye uyguladığı otomatik düzeltmeler — yanıttaki `gatewayNormalized`),
220
+ `kimlik →/←` (`/connect/token` turu), `istek →/yanıt ←` (platform API turu, tam URL + süre +
221
+ boyut), `kırpma ✂` (yanıt `MAX_RESPONSE_BYTES` sınırını aştı), `tarayıcı →/←`
222
+ (`page_screenshot`'ın headless Chromium turu), `hata ✕` (yakalanan hata: sınıf, HTTP kodu, mesaj,
223
+ ilk 3 stack satırı). Tool gövdesine hiç girmeyen çağrılar — yanlış tool adı ya da parametre
224
+ şemasına takılan gövde — `MCP KATMANI REDDETTİ` bloğu olarak düşer.
225
+
226
+ Arama: `SONUÇ : HATA` tüm başarısız çağrılar, `hata ✕` hata satırları, `#<n>` tek bir çağrı.
227
+
228
+ Adı `pass|secret|token|authorization|api key|credential|connectionString` desenine uyan alanlar
229
+ `***` ile maskelenir. Günlükleme yazma hatası tool çağrısını **düşürmez**: ilk hatada stderr'e
230
+ tek satır yazılıp günlükleme kapatılır.
231
+
232
+ ## Sorun giderme
233
+
234
+ | Belirti | Sebep / çözüm |
235
+ |---|---|
236
+ | İstemci bağlanıyor ama **hiç tool görünmüyor** | Konfigürasyon geçersiz. Sunucu stderr'e tek satır sebep yazıp `exit 1` yapar; istemcinin MCP log'una bakın. En sık: `DEFAULT_ENVIRONMENT` boş, `USERNAME`/`PASSWORD` eksik. |
237
+ | `POST /connect/token` 404 / "kayıt bulunamadı" | Kimlik makine kullanıcı adıyla gidiyor — `USERNAME` üstteki üçüncü davranış maddesi. |
238
+ | `Host` çözülemedi / 404 | `ORGANIZATION` + `HOST_SUFFIX` birlikte `{org}.{suffix}` üretir; ikisi de doğru olmalı. |
239
+ | `page_screenshot` hata veriyor | `STUDIO_BASE_URL` boş ya da tarayıcı yok: `npx playwright-core install chromium` veya `SCREENSHOT_BROWSER_PATH`. |
240
+ | Eski sürüm çalışıyor | npx önbelleği: `.mcp.json`'da sabit sürüm yazın ve sunucuyu yeniden başlatın. |
241
+
242
+ Her durumda ilk bakılacak yer günlük dosyasıdır (`LOG_DIR`).
243
+
244
+ ---
245
+
246
+ ## HTTP kipi
230
247
 
231
- API'ler ayaktayken:
248
+ Gateway'i ortak bir sunucu olarak çalıştırmak için (stateless streamable HTTP; `/mcp`, yalnız
249
+ POST):
232
250
 
233
251
  ```bash
234
- npm run generate-schemas
252
+ npx -y @appaflytech/zeyrek-ai-mcp@0.0.5 # --stdio olmadan
235
253
  ```
236
254
 
237
- Swagger'dan seçili komut şemalarını `src/resources/schemas/` altına yazar; sunucu bunları
238
- `ngapps://schemas/*` MCP resource'ları olarak yayınlar (`ngapps://schemas/index` dizindir).
239
- Üretilen JSON'lar klasörde durur ve gateway'le birlikte taşınır — script yalnızca yeniden
240
- üretmek için gerekir.
255
+ Sağlık ucu: `http://localhost:5100/healthz` (port `MCP_PORT`). İstemci kaydı:
256
+
257
+ ```bash
258
+ claude mcp add zeyrek-ai --transport http http://localhost:5100/mcp
259
+ ```
260
+
261
+ `AUTH_MODE=passthrough` yalnız bu kipte anlamlıdır: kimlik istemcinin `Authorization` header'ından
262
+ geçer. (PoC boyunca `local` modda test edildi.)
263
+
264
+ ---
265
+
266
+ ## Geliştirme (repo)
267
+
268
+ Bu paket [monorepo](https://gitlab.com/new-zeyrek/zeyrek-app) içindeki `zeyrek-mcp/` klasöründen
269
+ yayınlanır. Aşağıdaki bağlantılar ve komutlar **repo içinde** geçerlidir; npm paketinde `docs/`
270
+ ve `src/` yoktur.
241
271
 
242
- Swagger adresi sırayla denenir: `ORG_SWAGGER_URL` / `TENANT_SWAGGER_URL`
243
- override'ları → `{API_BASE_URL}/swagger/v1/swagger.json` → `localhost:3000` frontend proxy'si
244
- (`/api/org` ve `/api`). Hangi adresin kullanıldığı çıktıda yazar.
272
+ ```bash
273
+ cd zeyrek-mcp
274
+ npm install
275
+ cp .env.example ../.env # uzak profil için: cp .env.production.example ../.env
276
+ npm run dev # HTTP · npm run start:stdio ile stdio
277
+ ```
245
278
 
246
- ## Test
279
+ `.env` **repo kökünde**, `.mcp.json`'ın yanında durur. Repo kökündeki `.mcp.json` sunucuyu
280
+ `zeyrek-mcp/node_modules/.bin/tsx` ile başlatır — bağımlılıklar kurulu değilken MCP istemcisi
281
+ hata vermeden sıfır tool ile bağlanır; repoyu yeni klonladıysanız ilk adım `npm install`'dır.
282
+
283
+ Doğrulama:
247
284
 
248
285
  ```bash
249
286
  npm run typecheck
250
- npm test
287
+ npm test # gerçek ağa çıkmaz (undici MockAgent); MCP katmanı InMemoryTransport ile
288
+ npm run docs:lint
251
289
  ```
252
290
 
253
- Testler gerçek ağa çıkmaz (undici `MockAgent`); MCP katmanı `InMemoryTransport` üzerinden
254
- gerçek el sıkışmasıyla doğrulanır.
291
+ Şema kaynakları (API'ler ayaktayken): `npm run generate-schemas`, Swagger'dan seçili komut
292
+ şemalarını `src/resources/schemas/` altına yazar; sunucu bunları `ngapps://schemas/*` resource'ları
293
+ olarak yayınlar (`ngapps://schemas/index` dizindir). Swagger adresi sırayla denenir:
294
+ `ORG_SWAGGER_URL` / `TENANT_SWAGGER_URL` override'ları → `{API_BASE_URL}/swagger/v1/swagger.json`
295
+ → `localhost:3000` frontend proxy'si.
296
+
297
+ Tasarım ve durum dokümanları: [`docs/INDEX.md`](docs/INDEX.md),
298
+ [`docs/00-durum-ve-yol-haritasi.md`](docs/00-durum-ve-yol-haritasi.md),
299
+ kural envanteri [`docs/08-kural-envanteri.md`](docs/08-kural-envanteri.md).
300
+
301
+ ### Yayınlama (paket bakımcısı)
302
+
303
+ ```bash
304
+ cd zeyrek-mcp
305
+ npm run typecheck && npm test
306
+ npm version patch # package.json sürümü
307
+ npm publish # prepack: tsc -p tsconfig.build.json + varlık kopyalama
308
+ ```
309
+
310
+ `dist/` içine `src/resources/{schemas,guides,examples}` altındaki JSON/MD varlıklarını
311
+ `scripts/copy-assets.ts` kopyalar — `tsc` tek başına bunları taşımaz. Yayınlanan paket
312
+ `dist/`, `README.md` ve iki `.env` şablonundan oluşur.
313
+
314
+ Sürüm yükseldikten sonra ekipteki `.mcp.json` örneklerindeki sabit sürümü de güncelleyin.
315
+
316
+ ---
255
317
 
256
- ## Bilinen sınırlar (PoC)
318
+ ## Bilinen sınırlar
257
319
 
258
320
  - `project_create/update` `LoaderImage` yüklemez (multipart dosya kapsam dışı; urlencoded form
259
321
  kullanılır).
260
- - `row_list.selectedFields` kırpması gateway tarafında yapılır: platform `GetRowsQuery.SelectedFields`
261
- alanını yalnızca many-to-many alt sorgularını daraltmak için okur, skaler kolonlar için her zaman
262
- tam satır döner. Gateway satırları verilen alanlara (+`id`) indirger; alan eşleşmesi
263
- büyük/küçük harf duyarsızdır.
322
+ - `row_list.selectedFields` kırpması gateway tarafında yapılır: platform
323
+ `GetRowsQuery.SelectedFields` alanını yalnızca many-to-many alt sorgularını daraltmak için okur,
324
+ skaler kolonlar için her zaman tam satır döner. Gateway satırları verilen alanlara (+`id`)
325
+ indirger; alan eşleşmesi büyük/küçük harf duyarsızdır.
264
326
  - `microservice_execute` dosya (stream) çıktısını içerik olarak aktarmaz.
265
- - Passthrough auth modu tanımlı ama uçtan uca tatbik edilmedi; PoC `local` modda test edilir.
266
- - Docker/compose servisi bilinçli olarak ertelendi (Faz 3 backlog'u —
267
- `docs/00-durum-ve-yol-haritasi.md` §5.4).
327
+ - Passthrough auth modu tanımlı ama uçtan uca tatbik edilmedi.
328
+ - Docker/compose servisi bilinçli olarak ertelendi.
package/package.json CHANGED
@@ -1,8 +1,8 @@
1
1
  {
2
2
  "name": "@appaflytech/zeyrek-ai-mcp",
3
- "version": "0.0.4",
3
+ "version": "0.0.5",
4
4
  "type": "module",
5
- "description": "MCP gateway exposing the NgApps platform APIs as tools",
5
+ "description": "Zeyrek (NgApps) platform APIs as MCP tools — data, logic and Studio design surface in one gateway",
6
6
  "license": "UNLICENSED",
7
7
  "engines": {
8
8
  "node": ">=20"