# FikoCad MCP Sunucusu (`fiko_mcp.exe`)

Yapay zeka istemcilerinin (Claude Desktop / Claude Code, IDE ajanları, otomasyon botları)
**çalışan FikoCad örneklerini** görmesini ve yönetmesini sağlayan MCP (Model Context
Protocol) sunucusu.

## Neden ayrı süreç?

FikoCad çok-süreçlidir ("Yeni Belge" = yeni `fikocad.exe`) ve süreçler arasında zaten
merkezi bir köprü vardır (`SurecKopru` — named pipe + tip-çerçeveli ikili protokol).
MCP sunucusu bu köprüye **normal bir akran** olarak katılır:

```
  Yapay zeka  ──stdio/JSON-RPC──▶  fiko_mcp.exe  ──named pipe──▶  fikocad.exe (#1)
                                        │                     └─▶  fikocad.exe (#2)
                                        ◀──── olay akışı ─────────┘
```

Kazanç: GUI sürecine tek satır risk eklenmez. MCP sunucusu çökse bile CAD çalışmaya
devam eder; CAD kapansa MCP bunu süreç listesinde görür.

## Lisans — atlanamaz

Sunucu kendi başına **hiçbir CAD işlemi yapmaz**. Her mutasyon hedef `fikocad`
örneğinde `Cekirdek::komutCalistir` üzerinden koşar; lisans kapısı ve denetim kaydı
orada uygulanır. Yani MCP bir arka kapı değildir: lisansın kapsamadığı komut yapay
zekadan gelince de reddedilir ve `KomutCalisti`/red olayı denetime düşer.

Protokol katmanında ayrıca araç başına `lisansKimlik` alanı vardır
(`McpSunucu::lisansKapisiAyarla`); ileride yerel araçlar eklenirse kapı orada da çalışır.

## Kurulum (Claude Desktop / Claude Code)

MCP istemcisinin yapılandırmasına ekleyin:

```json
{
  "mcpServers": {
    "fikocad": {
      "command": "D:\\__sistem__\\Masaustu\\FikoYT.Yeni.Cag\\fikatia-local\\insa\\Release\\uygulama\\fikocad\\fiko_mcp.exe"
    }
  }
}
```

`fiko_mcp.exe` derleme sonrası `fikocad.exe` ile aynı dizine kopyalanır; `fikocad.exe`'yi
kendi yanında arar, bu yüzden başka yol ayarı gerekmez.

## Araçlar (v1)

| Araç | İş |
|------|-----|
| `fikocad_surecler` | Çalışan tüm örnekler: PID, açık belge, durum, çalışma süresi, bellek |
| `fikocad_komut_calistir` | Bir örnekte (veya hepsinde) menü/palet komutu çalıştır — lisans kapısı hedefte |
| `fikocad_belge_ac` | Dosyayı (.fikocad/.stp/.step/.FikoApt/.FikoOp/.wrl) yeni pencerede aç |
| `fikocad_surec_sonlandir` | Örneği nazikçe kapat (`zorla=true` yalnız yanıtsız süreç için) |
| `fikocad_komut_listesi` | Tüm komutları grup+ad olarak listeler; **aksansız arama** çalışır (`sigdir` → "Tümünü Sığdır") |
| `fikocad_makro_calistir` | **Gerçek modelleme burada**: Lua makrosu çalıştırır ve çıktıyı geri döndürür |
| `fikocad_makro_api` | Kullanılabilir Lua API referansı — modellemeden önce çağrılmalı |
| `fikocad_ekran_goruntusu` | 3B görünümü PNG olarak yazar — yapay zeka ne modellediğini görür |
| `fikocad_olaylar` | Örneklerden merkeze akan son olaylar (komut çalıştı, seçim değişti, …) |

## Kendi kendini test

```powershell
$m = [Diagnostics.Process]::Start(@{FileName='fiko_mcp.exe';RedirectStandardInput=$true;
                                    RedirectStandardOutput=$true;UseShellExecute=$false})
$m.StandardInput.WriteLine('{"jsonrpc":"2.0","id":1,"method":"initialize","params":{}}')
$m.StandardOutput.ReadLine()
$m.StandardInput.WriteLine('{"jsonrpc":"2.0","id":2,"method":"tools/list"}')
$m.StandardOutput.ReadLine()
```

Protokol katmanının birim testleri: `insa\Release\motor\mcp\fiko_mcp_test.exe` (54 kontrol).

## İstek/yanıt akışı (nasıl çalışıyor)

IPC protokolü tek yönlüydü (komut gönder, olay al). Sorgu-cevap için `Onay` çerçevesi
canlandırıldı: MCP korelasyon numarasıyla istek yollar, FikoCad işi yapıp aynı korelasyonla
sonucu döner, MCP yanıtı bekler (varsayılan 8 sn).

İki IPC eylemi bu kanalı kullanır — ikisi de menüde GÖRÜNMEZ, yalnız IPC'den erişilir:

- `makro.lua` — parametre `kod`. Lisans: **`makro.calistir`** hakkı sorulur.
  Makro çıktısı (`fiko.log`) ve Lua hataları yanıt olarak döner.
- `ekran.png` — parametre `yol`. Viewport'u PNG'ye yazar.

## Örnek: "kumpas çiz"

```lua
local function kutu(ad, sx,sy,sz, x,y,z)
  local id = fiko.sahne.ekle("kutu")
  fiko.sahne.parametreAyarla(id, sx,sy,sz)
  fiko.sahne.konumAyarla(id, x,y,z)
  fiko.sahne.adAyarla(id, ad)
  return id
end
kutu("Ana Cubuk", 170,16,4,   0,0,0)      -- cetvel gövdesi
kutu("Sabit Cene", 8,16,26, -81,0,-15)    -- sabit çene
kutu("Surgu",     34,22,10, -20,0,0)      -- sürgü
-- … hareketli çene, verniyer, derinlik çubuğu, kilit vidası
fiko.komut.calistir("İzometrik")
fiko.komut.calistir("Tümünü Sığdır")
```

Sonra `fikocad_ekran_goruntusu` ile PNG alıp sonucu görün.

## Sırada (v2 fikirleri)

- Belge ağacı / seçim / ölçüm **sorgulama** araçları (kanal hazır — `Onay` akışı çalışıyor)
- Ayar okuma/yazma (`AyarSistemi` kayıtları — kimlik/açıklama/aralık ile birlikte)
- Sketch + Pad/Cep (Part Design) Lua API'si — şu an yalnız primitif + boolean var
- `fiko.sahne.renkAyarla` render'a yansımıyor (malzeme yolu gerekiyor) — incelenecek
- MCP *resources*: açık belgeler kaynak olarak listelensin
