@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.
- package/.env.example +27 -8
- package/.env.production.example +44 -0
- package/README.md +254 -186
- package/dist/config.js +113 -47
- package/dist/knowledge/componentCatalog.js +474 -31
- package/dist/knowledge/componentEvents.js +150 -12
- package/dist/knowledge/errorPath.js +64 -0
- package/dist/knowledge/normalize.js +12 -1
- package/dist/knowledge/outlines.js +6 -0
- package/dist/knowledge/rules.js +184 -3
- package/dist/knowledge/styleResolve.js +485 -0
- package/dist/observability/trace.js +4 -0
- package/dist/platform/http.js +3 -0
- package/dist/platform/responses.js +80 -4
- package/dist/platform/screenshot.js +106 -0
- package/dist/resources/examples/layout-app-shell.json +368 -0
- package/dist/resources/examples/microservice-table-list.json +1 -0
- package/dist/resources/examples/middleware-authenticate.json +243 -47
- package/dist/resources/examples/workflow-basic.json +24 -2
- package/dist/resources/guides/component.md +6 -3
- package/dist/resources/guides/external-component.md +129 -0
- package/dist/resources/guides/layout.md +147 -0
- package/dist/resources/guides/microservice.md +35 -0
- package/dist/resources/guides/middleware.md +10 -0
- package/dist/resources/guides/page.md +132 -14
- package/dist/resources/guides/workflow.md +127 -2
- package/dist/server.js +2 -0
- package/dist/tools/externalComponents.js +285 -0
- package/dist/tools/layouts.js +48 -6
- package/dist/tools/microservices.js +2 -2
- package/dist/tools/pages.js +98 -30
- package/dist/tools/platformInfo.js +2 -2
- package/dist/tools/screens.js +36 -0
- package/dist/tools/workflows.js +3 -3
- 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:
|
|
3
|
-
TENANT_API_BASE_URL=http://localhost:
|
|
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-
|
|
14
|
+
ORGANIZATION=zeyrek-test
|
|
7
15
|
HOST_SUFFIX=localhost
|
|
8
16
|
|
|
9
|
-
#
|
|
10
|
-
|
|
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 (
|
|
42
|
-
# tasarimi,
|
|
43
|
-
# karisik yazilabilir.
|
|
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'
|
|
4
|
-
|
|
5
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
21
|
-
Sunucu şu sırayla arar, ilk bulunan anahtar kazanır: `<çalışma dizini>/.env` →
|
|
22
|
-
`<paket>/.env` → `<paket>/../.env`.
|
|
18
|
+
---
|
|
23
19
|
|
|
24
|
-
|
|
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
|
-
|
|
29
|
-
|
|
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
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
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
|
-
|
|
47
|
+
Claude Code'da komutla eklemek isterseniz:
|
|
41
48
|
|
|
42
49
|
```bash
|
|
43
|
-
|
|
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
|
-
|
|
47
|
-
|
|
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
|
-
|
|
64
|
+
### Sürüm seçimi
|
|
50
65
|
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
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
|
-
|
|
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
|
-
|
|
74
|
+
Ayar üç kaynaktan gelebilir, **öncelik sırası**:
|
|
78
75
|
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
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
|
-
|
|
87
|
-
|
|
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
|
-
|
|
84
|
+
### Zorunlu
|
|
91
85
|
|
|
92
|
-
|
|
93
|
-
|
|
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
|
-
|
|
95
|
+
### Opsiyonel
|
|
97
96
|
|
|
98
|
-
|
|
99
|
-
|
|
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
|
-
|
|
103
|
-
|
|
114
|
+
Tam liste ve yorumlu şablon: pakete dahil edilen `.env.example` (lokal profil) ve
|
|
115
|
+
`.env.production.example` (uzak profil).
|
|
104
116
|
|
|
105
|
-
|
|
117
|
+
### Bilinmesi gereken üç davranış
|
|
106
118
|
|
|
107
|
-
|
|
108
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
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
|
-
|
|
164
|
-
|
|
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
|
-
|
|
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**
|
|
181
|
-
|
|
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
|
-
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
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
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
`
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
252
|
+
npx -y @appaflytech/zeyrek-ai-mcp@0.0.5 # --stdio olmadan
|
|
228
253
|
```
|
|
229
254
|
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
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
|
-
|
|
236
|
-
|
|
237
|
-
|
|
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
|
-
|
|
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
|
-
|
|
247
|
-
|
|
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
|
|
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
|
|
254
|
-
alanını yalnızca many-to-many alt sorgularını daraltmak için okur,
|
|
255
|
-
tam satır döner. Gateway satırları verilen alanlara (+`id`)
|
|
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
|
|
259
|
-
- Docker/compose servisi bilinçli olarak ertelendi
|
|
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.
|