@appaflytech/zeyrek-ai-mcp 0.0.3 → 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.
Files changed (35) hide show
  1. package/.env.example +27 -8
  2. package/.env.production.example +44 -0
  3. package/README.md +254 -186
  4. package/dist/config.js +113 -47
  5. package/dist/knowledge/componentCatalog.js +474 -31
  6. package/dist/knowledge/componentEvents.js +150 -12
  7. package/dist/knowledge/errorPath.js +64 -0
  8. package/dist/knowledge/normalize.js +12 -1
  9. package/dist/knowledge/outlines.js +6 -0
  10. package/dist/knowledge/rules.js +184 -3
  11. package/dist/knowledge/styleResolve.js +485 -0
  12. package/dist/observability/trace.js +4 -0
  13. package/dist/platform/http.js +3 -0
  14. package/dist/platform/responses.js +80 -4
  15. package/dist/platform/screenshot.js +106 -0
  16. package/dist/resources/examples/layout-app-shell.json +368 -0
  17. package/dist/resources/examples/microservice-table-list.json +1 -0
  18. package/dist/resources/examples/middleware-authenticate.json +243 -47
  19. package/dist/resources/examples/workflow-basic.json +24 -2
  20. package/dist/resources/guides/component.md +6 -3
  21. package/dist/resources/guides/external-component.md +129 -0
  22. package/dist/resources/guides/layout.md +147 -0
  23. package/dist/resources/guides/microservice.md +35 -0
  24. package/dist/resources/guides/middleware.md +10 -0
  25. package/dist/resources/guides/page.md +132 -14
  26. package/dist/resources/guides/workflow.md +127 -2
  27. package/dist/server.js +2 -0
  28. package/dist/tools/externalComponents.js +285 -0
  29. package/dist/tools/layouts.js +48 -6
  30. package/dist/tools/microservices.js +2 -2
  31. package/dist/tools/pages.js +98 -30
  32. package/dist/tools/platformInfo.js +2 -2
  33. package/dist/tools/screens.js +36 -0
  34. package/dist/tools/workflows.js +3 -3
  35. package/package.json +5 -2
package/.env.example CHANGED
@@ -1,17 +1,28 @@
1
+ # LOKAL PROFIL — platform/gateway kodu gelistirirken. Uzak ortam icin:
2
+ # cp zeyrek-mcp/.env.production.example .env
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
8
+
1
9
  # Platform API adresleri (host makinesinden lokal compose icin)
2
- ORG_API_BASE_URL=http://localhost:7000
3
- TENANT_API_BASE_URL=http://localhost:5000
10
+ ORG_API_BASE_URL=http://localhost:17000
11
+ TENANT_API_BASE_URL=http://localhost:15000
4
12
 
5
13
  # Org cozumu: istekler Host: {ORGANIZATION}.{HOST_SUFFIX} header'i ile gider
6
- ORGANIZATION=zeyrek-local
14
+ ORGANIZATION=zeyrek-test
7
15
  HOST_SUFFIX=localhost
8
16
 
9
- # Varsayilanlar; tool parametresi her zaman ezer
10
- DEFAULT_ENVIRONMENT=production
17
+ # ZORUNLU. Gomulu varsayilan yok: bos birakilirsa sunucu acilmaz.
18
+ # AI yazmalari her zaman development'a gider (AGENTS.md 1).
19
+ DEFAULT_ENVIRONMENT=development
11
20
  DEFAULT_PROJECT=
12
21
 
13
22
  # local: kimlik asagidaki alanlardan, passthrough: istemcinin Authorization header'i aynen gecer
14
23
  # local modda ya TOKEN (hazir Bearer JWT) ya da USERNAME+PASSWORD verin
24
+ # NOT: USERNAME isletim sisteminde de tanimli olabilir (Windows her zaman, macOS sik sik).
25
+ # Sunucu, USER/LOGNAME ile AYNI olan USERNAME'i dusurur; asagidaki deger yine de gecerli olur.
15
26
  AUTH_MODE=local
16
27
  TOKEN=
17
28
  USERNAME=
@@ -33,14 +44,22 @@ LOG_MAX_BODY_CHARS=2000
33
44
  MAX_RESPONSE_BYTES=262144
34
45
  REQUEST_TIMEOUT_MS=100000
35
46
 
47
+ # page_screenshot icin: Studio arayuzunun kok adresi (yerel gelistirmede http://localhost:3000).
48
+ # Bos birakilirsa tool anlasilir hata doner; ilk kullanimda `npx playwright-core install chromium`
49
+ # gerekir. SCREENSHOT_BROWSER_PATH ile playwright indirmesi yerine sistemdeki Chromium kullanilir.
50
+ # Lokal Studio org'u Host'tan cozer; screenshot icin uzak host gerekebilir (docs/ortam.md).
51
+ STUDIO_BASE_URL=http://localhost:3000
52
+ SCREENSHOT_BROWSER_PATH=
53
+
36
54
  # generate-schemas icin swagger adresleri. Bos birakilirsa sirayla denenir:
37
55
  # 1) asagidaki override, 2) {API_BASE_URL}/swagger/v1/swagger.json, 3) localhost:3000 frontend proxy'si
38
56
  ORG_SWAGGER_URL=
39
57
  TENANT_SWAGGER_URL=
40
58
 
41
- # Bos = tum moduller (148 tool). Hazir kumeler: core (veri+mantik, 92), studio (sayfa
42
- # tasarimi, 45), admin (template/organizasyon/deployment, 15). Kume ve tekil modul adi
43
- # 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
44
63
  MODULES=
45
64
 
46
65
  MCP_PORT=5100
@@ -0,0 +1,44 @@
1
+ # UZAK PROFIL — kosular, uygulama kurulumu, gercek-ekran dogrulama, demo.
2
+ # Kurulum: cp zeyrek-mcp/.env.production.example .env (sonra PASSWORD'u doldurun)
3
+ # Ortam rolleri: docs/ortam.md
4
+ # npm paketiyle kurulumda ayni anahtarlar .mcp.json'in env blogundan da verilebilir (README).
5
+ #
6
+ # "production" burada PLATFORM KURULUMUNUN adidir. AI'in yazma hedefi orada da
7
+ # development environment'idir — asagidaki DEFAULT_ENVIRONMENT bu yuzden development.
8
+
9
+ ORG_API_BASE_URL=https://new-zeyrek.glomil.com/api/org
10
+ TENANT_API_BASE_URL=https://new-zeyrek.glomil.com/api
11
+
12
+ ORGANIZATION=new-zeyrek
13
+ HOST_SUFFIX=glomil.com
14
+
15
+ # ZORUNLU. Gomulu varsayilan yok.
16
+ DEFAULT_ENVIRONMENT=development
17
+ DEFAULT_PROJECT=
18
+
19
+ AUTH_MODE=local
20
+ TOKEN=
21
+ USERNAME=admin@zeyrek.com
22
+ PASSWORD=
23
+
24
+ POLICY=strict
25
+
26
+ LOG_LEVEL=detail
27
+ LOG_DIR=zeyrek-mcp/logs
28
+ LOG_FILE=
29
+ LOG_MAX_BODY_CHARS=2000
30
+
31
+ MAX_RESPONSE_BYTES=262144
32
+ REQUEST_TIMEOUT_MS=100000
33
+
34
+ # page_screenshot icin gercek Studio host'u (localhost:3000 org'u cozemez — 27/S-22).
35
+ STUDIO_BASE_URL=https://new-zeyrek.glomil.com
36
+ SCREENSHOT_BROWSER_PATH=
37
+
38
+ ORG_SWAGGER_URL=
39
+ TENANT_SWAGGER_URL=
40
+
41
+ # Bos = tum moduller (162 tool). Kumeler: core (93) | studio (59) | admin (16).
42
+ MODULES=
43
+
44
+ MCP_PORT=5100
package/README.md CHANGED
@@ -1,167 +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, **152
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 |
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
+ ```
39
46
 
40
- ## Çalıştırma
47
+ Claude Code'da komutla eklemek isterseniz:
41
48
 
42
49
  ```bash
43
- 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
44
59
  ```
45
60
 
46
- Sağlık: `http://localhost:5100/healthz`. Sunucu stateless streamable HTTP konuşur (`/mcp`,
47
- 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.
48
63
 
49
- ## Tool çağrısı günlüğü
64
+ ### Sürüm seçimi
50
65
 
51
- Her MCP tool çağrısı, okunmak için biçimlenmiş tek bir blok olarak dosyaya yazılır — varsayılan
52
- `zeyrek-mcp/logs/gateway-YYYY-MM-DD.log` (günlük dosya, `.gitignore`'da). Amaç: bir çağrının ne
53
- yapmaya çalıştığını, içeriden hangi duraklardan geçtiğini ve nerede patladığını **koda inmeden**
54
- 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.
55
69
 
56
- ```
57
- ┌─ #1 · 11:27:27.082 · platform_whoami — Oturum bilgisi
58
- │ amaç : Gateway'in platformda kimin adına çalıştığını döner; auth kurulumunu doğrulamak için ilk çağrılacak tool.
59
- │ girdi : (parametresiz)
60
- │ adımlar:
61
- │ +2ms kimlik → önbellekte geçerli token yok — POST http://localhost:7000/connect/token · kullanıcı admin@zeyrek.com
62
- │ +229ms kimlik ← HTTP 200 · token alındı, önbellekte 63158340 sn geçerli
63
- │ +229ms istek → GET http://localhost:7000/connect/userinfo · org api · env=development
64
- │ +237ms yanıt ← HTTP 200 · 8 ms · 174 B
65
- │ gövde: {"sub":"01917edf-…","email":"admin@zeyrek.com","role":["super-admin"]}
66
- └─ SONUÇ : başarılı · 238 ms · 4 adım · 137 B yanıt
67
- ```
70
+ ---
68
71
 
69
- Adım etiketleri: `politika` (lint kuralları; `politika ✕` isteği hiç göndermez), `düzeltme`
70
- (gateway'in gövdeye uyguladığı otomatik düzeltmeler — yanıttaki `gatewayNormalized`), `kimlik →/←`
71
- (`/connect/token` turu), `istek →/yanıt ←` (platform API turu, tam URL + süre + boyut),
72
- `kırpma ✂` (yanıt `MAX_RESPONSE_BYTES` sınırını aştı), `hata ✕` (yakalanan hata: sınıf,
73
- HTTP kodu, mesaj, ilk 3 stack satırı). Tool gövdesine hiç girmeyen çağrılar — yanlış tool adı ya da
74
- parametre şemasına takılan gövde — `MCP KATMANI REDDETTİ` bloğu olarak düşer; bunlar aksi hâlde
75
- hiçbir yerde görünmezdi.
72
+ ## Ayarlar
76
73
 
77
- 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ı**:
78
75
 
79
- | Değişken | Varsayılan | Not |
80
- |----------|-----------|-----|
81
- | `LOG_LEVEL` | `detail` | `detail` istek/yanıt gövdelerini de yazar · `summary` yalnız durak + boyut + hata gövdeleri · `off` hiç dosya açmaz |
82
- | `LOG_DIR` | `zeyrek-mcp/logs` | Günlük dosyaların klasörü |
83
- | `LOG_FILE` | — | Verilirse tek sabit dosyaya yazar (tarih döndürmesi kapanır) |
84
- | `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
85
80
 
86
- Adı `pass|secret|token|authorization|api key|credential|connectionString` desenine uyan alanlar
87
- `***` ile maskelenir (`girdi` satırında ve gövde önizlemelerinde). Günlükleme yazma hatası tool
88
- ç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.
89
83
 
90
- ## Claude Code kaydı
84
+ ### Zorunlu
91
85
 
92
- ```bash
93
- claude mcp add ngapps --transport http http://localhost:5100/mcp
94
- ```
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 |
95
94
 
96
- stdio alternatifi (port gerekmez, sunucuyu istemci başlatır):
95
+ ### Opsiyonel
97
96
 
98
- ```bash
99
- claude mcp add zeyrek-ai -- npx tsx <repo>/zeyrek-mcp/src/index.ts --stdio
100
- ```
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ı) |
101
113
 
102
- İlk doğrulama: oturumda `platform_whoami` tool'unu çağırtın — kimlik ve org çözümü tek seferde
103
- test edilir.
114
+ Tam liste ve yorumlu şablon: pakete dahil edilen `.env.example` (lokal profil) ve
115
+ `.env.production.example` (uzak profil).
104
116
 
105
- ## npm paketi olarak kurulum
117
+ ### Bilinmesi gereken üç davranış
106
118
 
107
- Repoyu klonlamadan, yayınlanmış paketle. Tüm ayarlar `.mcp.json`'ın `env` bloğundan gelir;
108
- `.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.
109
130
 
110
- ```json
111
- {
112
- "mcpServers": {
113
- "zeyrek-ai": {
114
- "type": "stdio",
115
- "command": "npx",
116
- "args": ["-y", "@appaflytech/zeyrek-ai-mcp@latest", "--stdio"],
117
- "env": {
118
- "ORG_API_BASE_URL": "http://localhost:17000",
119
- "TENANT_API_BASE_URL": "http://localhost:15000",
120
- "ORGANIZATION": "zeyrek-test",
121
- "HOST_SUFFIX": "zeyrek.local",
122
- "DEFAULT_PROJECT": "emrah",
123
- "DEFAULT_ENVIRONMENT": "development",
124
- "USERNAME": "admin@zeyrek.com",
125
- "PASSWORD": "${PASSWORD}",
126
- "MODULES": "core",
127
- "LOG_DIR": "logs"
128
- }
129
- }
130
- }
131
- }
132
- ```
131
+ ---
133
132
 
134
- Ayar öncelik sırası: **`.mcp.json` env bloğu → `.env` (varsa; repo içinden çalışırken kökte
135
- durur) → şemadaki varsayılan.** `.env.example` tüm değişkenlerin tam listesidir. npx ile kurulan
136
- pakette `.env` yoktur, tüm ayarlar env bloğundan gelir.
137
-
138
- - `.mcp.json` sürüm kontrolündeyse parolayı düz yazmayın: Claude Code `${PASSWORD}` ve
139
- `${PASSWORD:-varsayılan}` genişletmesi yapar, değer kabuk ortamından gelir.
140
- - Genişletme **istemciye bağlıdır**: Claude Code açar, VS Code'un kendi MCP istemcisi açmaz ve
141
- metni olduğu gibi geçirir. Bu yüzden sunucu, açılmamış `${…}` yer tutucusunu boş değerle aynı
142
- sayıp **düşürür** — ayar `.env`'den ya da şema varsayılanından doldurulur, sunucu yer tutucu
143
- metinle patlamaz (`dropUnusableEnvironment`). Ortama göre gerçekten değişen ayarı `.env`'e
144
- koymak her istemcide çalışan yoldur.
145
- - Boş bırakılan (`""`) alanlar **tanımsız** sayılır; varsayılana düşer ya da `.env`'den
146
- doldurulur. Yani `"${MODULES:-}"` yazmak alanı hiç yazmamakla aynıdır.
147
- - Değişken adları ön eksizdir (`USERNAME`, `PASSWORD`, `TOKEN`, `LOG_LEVEL` …), yani kabuk
148
- ortamındaki aynı adlı değişkenlerle çakışabilir — `USERNAME` Windows'ta yerleşiktir. Bu yüzden
149
- `.mcp.json`'da `${USERNAME:-…}` gibi genişletme kullanmayın; değeri düz yazın ya da `.env`'e
150
- koyun.
151
- - `LOG_DIR` verilmezse günlükler **çalışma dizininin** altındaki `logs/` klasörüne yazılır.
152
- - Konfigürasyon geçersizse sunucu stderr'e tek satır sebep yazıp `exit 1` yapar — istemci artık
153
- sessizce sıfır tool ile bağlanmaz.
154
-
155
- Yayınlama (paket bakımcısı için):
133
+ ## Modüller
156
134
 
157
- ```bash
158
- cd zeyrek-mcp
159
- npm run typecheck && npm test
160
- npm publish # prepack: tsc -p tsconfig.build.json + varlık kopyalama
161
- ```
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ı |
162
144
 
163
- `dist/` içine `src/resources/{schemas,guides,examples}` altındaki 41 JSON/MD varlığı
164
- `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
+ ---
165
148
 
166
149
  ## Kullanım kalıpları
167
150
 
@@ -171,47 +154,39 @@ npm publish # prepack: tsc -p tsconfig.build.json + varlık kopyalama
171
154
  `definition` parametresini API'ye birebir geçirir. En iyi şablon, mevcut bir kaydın `*_get`
172
155
  çıktısıdır; step şeması için `workflow_step_schema` kullanılır.
173
156
  - **Test kası:** `microservice_execute` gerçek runtime yolunu çağırır; dönen `httpStatus`
174
- microservice'in kendi sonucudur. Beklenmedik sonuçta aynı parametrelerle
175
- `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.
176
159
  - **Asenkron işler:** `automation_trigger` fire-and-forget'tır (`automation_histories` ile
177
160
  izlenir); `deployment_start` bir saga başlatır (`deployment_status` ile izlenir).
178
161
  - **Sayfa tasarımı:** `layout_*` → `page_create` → `page_state` → `page_schema_patch`
179
162
  (micro-op); olay akışları `flow_*` + `set_event`. Şema değişikliği `page_update` ile değil
180
- `page_schema_patch` ile yapılır; `page_build` diye bir tool **yok** (platform ucu üründe
181
- 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')`.
182
165
  - **Yazma tool'ları replace gövdeleri merge eder:** `page_update`, `layout_update`,
183
166
  `component_update` kaydı önce okur, yalnız verdiğiniz alanları değiştirir; şema/olay kaybı
184
167
  olmaz. `flow_*` uçlarının istediği barındırıcı gövdesini de gateway kurar.
185
- - Tool seti `MODULES` ile daraltılabilir: tekil modül adı (`entity,row,microservice`)
186
- ya da hazır küme — `core` (92 tool: veri + mantık), `studio` (49 tool: sayfa tasarımı),
187
- `admin` (15 tool: template, organizasyon, deployment). Küme ve modül adları karışık
188
- yazılabilir: `MODULES=core,page`.
189
-
190
- ## Bilgi katmanı (Faz 1.5)
191
-
192
- Tasarım: [`docs/07-bilgi-katmani.md`](docs/07-bilgi-katmani.md).
193
- Üç savunma hattı:
194
-
195
- - **Rehberler:** `platform_guide` tool'u (workflow, microservice, entity, page, component,
196
- html, middleware, view, expressions, getting-started, modify-existing) + `ngapps://guides/*`
197
- resource'ları. Bir modülde ilk yazma işleminden önce ilgili rehber okunmalı; tool
198
- açıklamaları bunu söyler. Komponent davranış bilgisi ayrıca `component_get` çıktısında
199
- `knowledge` alanı olarak döner (`src/knowledge/componentCatalog.ts`).
200
- - **Altın örnekler:** `ngapps://examples/*` — boş org'da şablon kaynağı. Şu an sentetik seed;
201
- platform ayaktayken `npm run harvest-examples -- --project qm` ham hasadı
202
- `src/resources/examples/harvested/` altına yazar, küratörlükten geçen dosyalar `examples/`
203
- 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ğı.
204
181
  - **Politika lint'i:** entity/microservice/workflow/automation create/update/preview gövdeleri
205
- API'ye gitmeden `src/knowledge/rules.ts` kurallarından geçer. Block kuralları (MS-001 join'li
206
- kaynakta boş selectFields, WF-001 kopuk step grafı, WF-002 workflow'da returnDtoId, WF-005
207
- tip×step matrisi) isteği durdurup düzeltme önerisi döner; warn bulguları yanıta
208
- `policyFindings` olarak eklenir. `POLICY=strict|warn|off`, çağrı başına kaçış:
209
- `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`.
210
186
 
211
187
  ## Büyük şema erişimi
212
188
 
213
- Tam gövdeyi LLM bağlamına sokmadan çalışma modeli
214
- ([tasarım](docs/09-buyuk-sema-stratejisi.md)):
189
+ Tam gövdeyi LLM bağlamına sokmadan çalışma modeli:
215
190
 
216
191
  1. `project_overview` — projenin kompakt haritası (id/ad/tip envanteri)
217
192
  2. `workflow_get` / `microservice_get` / `entity_get` + `view: 'outline'` — iskelet
@@ -219,42 +194,135 @@ Tam gövdeyi LLM bağlamına sokmadan çalışma modeli
219
194
  4. `workflow_patch` / `microservice_patch` / `entity_patch` — RFC 6902 işlemleri; gateway
220
195
  get→patch→lint→put zincirini kendi belleğinde yürütür, yanıt outline özetidir
221
196
 
222
- ## Ş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
223
247
 
224
- API'ler ayaktayken:
248
+ Gateway'i ortak bir sunucu olarak çalıştırmak için (stateless streamable HTTP; `/mcp`, yalnız
249
+ POST):
225
250
 
226
251
  ```bash
227
- npm run generate-schemas
252
+ npx -y @appaflytech/zeyrek-ai-mcp@0.0.5 # --stdio olmadan
228
253
  ```
229
254
 
230
- Swagger'dan seçili komut şemalarını `src/resources/schemas/` altına yazar; sunucu bunları
231
- `ngapps://schemas/*` MCP resource'ları olarak yayınlar (`ngapps://schemas/index` dizindir).
232
- Üretilen JSON'lar klasörde durur ve gateway'le birlikte taşınır — script yalnızca yeniden
233
- ü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.
234
271
 
235
- Swagger adresi sırayla denenir: `ORG_SWAGGER_URL` / `TENANT_SWAGGER_URL`
236
- override'ları → `{API_BASE_URL}/swagger/v1/swagger.json` → `localhost:3000` frontend proxy'si
237
- (`/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
+ ```
238
278
 
239
- ## 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:
240
284
 
241
285
  ```bash
242
286
  npm run typecheck
243
- npm test
287
+ npm test # gerçek ağa çıkmaz (undici MockAgent); MCP katmanı InMemoryTransport ile
288
+ npm run docs:lint
244
289
  ```
245
290
 
246
- Testler gerçek ağa çıkmaz (undici `MockAgent`); MCP katmanı `InMemoryTransport` üzerinden
247
- 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
+ ---
248
317
 
249
- ## Bilinen sınırlar (PoC)
318
+ ## Bilinen sınırlar
250
319
 
251
320
  - `project_create/update` `LoaderImage` yüklemez (multipart dosya kapsam dışı; urlencoded form
252
321
  kullanılır).
253
- - `row_list.selectedFields` kırpması gateway tarafında yapılır: platform `GetRowsQuery.SelectedFields`
254
- alanını yalnızca many-to-many alt sorgularını daraltmak için okur, skaler kolonlar için her zaman
255
- tam satır döner. Gateway satırları verilen alanlara (+`id`) indirger; alan eşleşmesi
256
- 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.
257
326
  - `microservice_execute` dosya (stream) çıktısını içerik olarak aktarmaz.
258
- - Passthrough auth modu tanımlı ama uçtan uca tatbik edilmedi; PoC `local` modda test edilir.
259
- - Docker/compose servisi bilinçli olarak ertelendi (Faz 3 backlog'u —
260
- `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.