# Projeler

> Her şeyin ait olduğu birim — bir proje nasıl oluşturulur, MCP erişimi nasıl kontrol edilir, durumları nasıl okunur, nasıl yeniden indekslenir ya da silinir.

- Güncelleme: 2026-09-21
- Kaynak: https://contextator.com/tr/docs/projects/
- Dil: tr-TR
- Yazar: Muhammet Şafak

---
Bir **proje**, Contextator'daki her şeyin birimidir: dokümanlarını, gömmelerini, indeksleme geçmişini
ve tam olarak bir MCP endpoint'ini sahiplenir. Bir projeye bağlı istemci bir başkasının dokümanlarını
asla göremez.

Ajanlarınızın soru sorduğu her bilgi bütünü için bir proje açın — genelde ürün başına, takım başına
ya da müşteri başına.

## Bir proje oluşturmak

Panoda **New project**'e basın (ya da yalnızca `n` yazın).

| Alan | Kurallar |
|-------|-------|
| **Project name** | Küçük harf, rakam, `-` ve `_`; bir harf ya da rakamla başlar, en fazla 63 karakter. Benzersiz olmalı |
| **Documentation directory** | Opsiyonel. İzin verilen bir kök içindeki klasör (`/docs/...`), projenin ilk kaynağı olur |
| **Index now** | Bir ilk indeksleme çalıştırmasını hemen kuyruğa alır |

Ad URL'niz olur, bu yüzden ajan ayarlarına yapıştırmaktan memnun olacağınız bir şey seçin:

```
http://localhost:3444/mcp/<project-name>
```

> **Adı dikkatli seçin.** Bir projeyi yeniden adlandırmak, eski URL ile ayarlanmış her istemciyi
> kırar, bu yüzden onu kalıcı sayın. Pratikte yeniden adlandırmak için: yeni bir proje oluşturun,
> aynı kaynakları ekleyin ve istemcilerinizi güncelleyin.

Bir projeyi klasörsüz oluşturmak tamamen normaldir — sonradan **Add source** ile git depoları,
yüklemeler ya da Notion ekleyebilirsiniz.

> **New project** yalnızca `root` ve `admin` hesapları için görünür, **Delete** da öyle — yeni bir
> `/mcp/<name>` yüzeyi, örnek düzeyinde bir karardır. Bir `member` hesabı, proje sayfasında
> **Members** altında eklendiği projeler içinde çalışır; bkz.
> [Hesaplar ve İzinler](/tr/docs/accounts-and-permissions/).

## Bir projenin içinde ne var

```
project "handbook"
├── source "policies"   (local directory)   → policies/onboarding.md
├── source "api"        (git repository)    → api/reference/auth.md
└── source "notion"     (Notion workspace)  → notion/Engineering/Runbooks.md
```

Her doküman yolu, geldiği kaynağın adıyla başlar. İki kaynağın aynı anda `README.md` içermesine izin
veren de, bir ajanın yanıtının nereden geldiğini söylemesini sağlayan da budur. Bkz.
[Belge Kaynakları](/tr/docs/document-sources/).

## MCP erişimi

Yeni bir projenin endpoint'i varsayılan olarak **token required**'dır: onu oluşturmak ilk token'ını
üretir ve gizli anahtarı oluşturma diyaloğunda bir kez gösterir, böylece endpoint ilk saniyeden
itibaren kapalıdır. Bu varsayılan olmadan önce, yeni bir proje **open**'dı — hesap ya da token olmadan
URL'sine ulaşabilen herkese yanıt verirdi — ve güncelleme, zaten var olan bir projenin modunu geriye
dönük olarak değiştirmez. Modun her iki yönde de değiştiği yer, proje sayfasındaki **MCP access**
panelidir:

| Mod | Ne anlama gelir |
|------|---------------|
| **open** | `http://localhost:3444/mcp/<project-name>`'e ulaşan her istemci projeyi arayabilir ve okuyabilir |
| **token required** | Yalnızca `Authorization: Bearer ctxm_…` gönderen bir istemci yanıtlanır; geri kalan her şey `401` alır |
| **account required** | Yalnızca bu projenin **üyesi** olan bir hesap adına davranan bir istemci yanıtlanır; her istekte yeniden denetlenir |

Üçü bu sırayla daralır ve daralttıkları şey, kimseyi adlandırmayan çağrıcıdır — anonim bir istek ya da
statik bir `ctxm_…` token. Bir hesabı adlandıran kimlik bilgisi ise **open** dâhil **her** modda, her
istekte o hesabın üyeliğine karşı denetlenir: üye olmayan, mod ne derse desin `403` alır; bir üyeliği
kaldırmak ya da bir hesabı devre dışı bırakmak bağlantıyı bir sonraki çağrısında keser. İstemci böyle
bir kimlik bilgisini OAuth 2.1 üzerinden alır; tarayıcı tabanlı MCP connector'larının zaten konuştuğu
şey budur. **account required** ise anonim hiçbir yol bırakmayan moddur; statik bir token orada bu
yüzden reddedilir.

Modu değiştirmek proje üzerinde `manager` hakları gerektirir — pratikte bir
`root` ya da `admin` hesabı. Token üretmek ve iptal etmek bir editor'ün işidir; projeyi görebilen
herkes, tokenlarının listesini adlarıyla görür. Hangisi ne: [Hesaplar ve İzinler](/tr/docs/accounts-and-permissions/).

**New token**, gizli değeri **yalnızca bir kez**, oluşturulduğu anda gösterir. Sunucu yalnızca onun
bir hash'ini saklar, bu yüzden kopyalanmamış bir token kurtarılamaz, yalnızca değiştirilebilir.
Sonrasında liste yalnızca adını, ilk birkaç karakterini (`ctxm_9f3a…`) ve en son ne zaman kullanıldığını
gösterir.

Bir projeyi **token required**'a çevirmek açık MCP oturumlarını kapatır, bir token'ı iptal etmek de
öyle — istemcinin bir sonraki isteğinde değil, hemen. Token gerektiren ve hiç tokenı olmayan bir proje
ulaşılamaz olur, bu yüzden endpoint'in hazır olduğunu birine söylemeden önce ilk token'ı üretin.

Netleştirilmesi gereken bir şey: bir token, o endpoint için bir kimlik bilgisidir, bir hesap değil.
Hiçbir kimlik ve doküman bazlı kural taşımaz, bu yüzden onu elinde bulunduran kişi projede indekslenen
her şeyi okur. Her istemciye kendi token'ını verin, böylece biri diğerlerini rahatsız etmeden iptal
edilebilir. Bir istemcinin bunu nasıl gönderdiği: [Yapay Zekâ İstemcilerini Bağlamak](/tr/docs/connecting-ai-clients/).

## Durumlar

| Durum | Anlamı |
|--------|---------|
| `idle` | Hiçbir şey çalışmıyor. Son çalıştırma başarılı oldu |
| `queued` | İndeksleyiciyi bekliyor; o aynı anda tek bir projeyi işler |
| `indexing` | Şu anda senkronize ediyor, tarıyor ya da gömüyor |
| `error` | Son çalıştırma başarısız oldu, ya da kaynaklardan biri senkronize olamadı. Neden gösterilir |

Bir kaynaktan kaynaklanan `error` durumu hiçbir şeyin çalışmadığı anlamına gelmez: diğer kaynaklar yine
indekslendi, ve mesaj şöyle okunur: `2/3 sources synced; notion: <reason>`.

## Yeniden indeksleme

| | Ne zaman kullanılır |
|---|---|
| **Re-index** | Normal durum. Her kaynağı senkronize eder ve yalnızca içeriği değişen dosyaları yeniden gömer |
| **Force re-index** | Chunk ayarlarını değiştirdikten sonra, ya da indeksin hashleme'nin göremeyeceği bir şekilde bayat olduğundan şüphelendiğinizde |

Contextator, gömme modeli değiştiğinde de kendiliğinden tam bir yeniden indeksleme zorlar — bkz.
[Gömme Modelleri](/tr/docs/embedding-models/).

Bir çalıştırma sırasında ne olduğunun ayrıntıları: [İndeksleme](/tr/docs/indexing/).

## Silme

**Delete** (onaylamak için iki kez) projeyi, kaynaklarını, dokümanlarını, chunk'larını ve çalıştırma
geçmişini kaldırır, açık MCP oturumlarını kapatır ve `DATA_DIR` altında somutlaştırdığı dosyaları
(git checkout'ları, yüklemeler, Notion çekimleri) siler.

Kendi dosyalarınıza asla dokunulmaz: `/docs`'a bağlanan dokümantasyon salt okunurdur, ve local
directory kaynakları olduğu yerde taranır.

Proje indekslenirken silme reddedilir — çalıştırmanın bitmesini bekleyin.

## Birden fazla proje

İndeksleyici **aynı anda tek bir projeyi** işler, çünkü gömme CPU'ya bağlıdır. Kuyruktaki bir proje
hangi projeyi beklediğini gösterir. Bir dağıtımın kaç proje tutabileceğine dair bir sınır yoktur; her
biri yalnızca başka bir URL'dir.
