@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 +8 -3
- package/.env.production.example +2 -0
- package/README.md +254 -193
- package/package.json +2 -2
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 (
|
|
56
|
-
# tasarimi,
|
|
57
|
-
# 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
|
|
58
63
|
MODULES=
|
|
59
64
|
|
|
60
65
|
MCP_PORT=5100
|
package/.env.production.example
CHANGED
|
@@ -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'
|
|
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
|
-
|
|
39
|
-
|
|
40
|
-
|
|
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
|
-
|
|
47
|
+
Claude Code'da komutla eklemek isterseniz:
|
|
43
48
|
|
|
44
49
|
```bash
|
|
45
|
-
|
|
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
|
-
|
|
49
|
-
|
|
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
|
-
|
|
64
|
+
### Sürüm seçimi
|
|
52
65
|
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
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
|
-
|
|
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
|
-
|
|
74
|
+
Ayar üç kaynaktan gelebilir, **öncelik sırası**:
|
|
81
75
|
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
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
|
-
|
|
90
|
-
|
|
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
|
-
|
|
84
|
+
### Zorunlu
|
|
94
85
|
|
|
95
|
-
|
|
96
|
-
|
|
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
|
-
|
|
95
|
+
### Opsiyonel
|
|
100
96
|
|
|
101
|
-
|
|
102
|
-
|
|
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
|
-
|
|
106
|
-
|
|
114
|
+
Tam liste ve yorumlu şablon: pakete dahil edilen `.env.example` (lokal profil) ve
|
|
115
|
+
`.env.production.example` (uzak profil).
|
|
107
116
|
|
|
108
|
-
|
|
117
|
+
### Bilinmesi gereken üç davranış
|
|
109
118
|
|
|
110
|
-
|
|
111
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
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
|
-
|
|
171
|
-
|
|
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
|
-
|
|
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**
|
|
188
|
-
|
|
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
|
-
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
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
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
`
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
252
|
+
npx -y @appaflytech/zeyrek-ai-mcp@0.0.5 # --stdio olmadan
|
|
235
253
|
```
|
|
236
254
|
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
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
|
-
|
|
243
|
-
|
|
244
|
-
|
|
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
|
-
|
|
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
|
-
|
|
254
|
-
|
|
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
|
|
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
|
|
261
|
-
alanını yalnızca many-to-many alt sorgularını daraltmak için okur,
|
|
262
|
-
tam satır döner. Gateway satırları verilen alanlara (+`id`)
|
|
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
|
|
266
|
-
- Docker/compose servisi bilinçli olarak ertelendi
|
|
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.
|
|
3
|
+
"version": "0.0.5",
|
|
4
4
|
"type": "module",
|
|
5
|
-
"description": "
|
|
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"
|