# Yapay Zekâ İstemcilerini Bağlamak

> Claude Code, Cursor, Claude Desktop ve diğer her MCP istemcisi için yapıştırmaya hazır kurulum; ayrıca token'lar, uzaktan erişim ve bir endpoint'i ajansız doğrulama.

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

---
Her proje tek bir URL'dir. Bir istemciyi ona yöneltin, ajan üç dokümantasyon aracı kazanır — başka
bir yapılandırma, API key ya da plugin gerekmez.

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

Panonun **Connect an agent** paneli, aşağıdaki her parçayı gerçek URL ile doldurulmuş, kopyalamaya
hazır biçimde yazdırır — proje bir token gerektiriyorsa `Authorization` header'ı dahil. Örneklerde
`demo`'yu kendi proje adınızla, `ctxm_9f3a…`'yı proje sayfasının size gösterdiği token ile değiştirin.

---

## Claude Code

Yeni bir proje varsayılan olarak bir token gerektirir, bu yüzden projenizin token'ıyla header'ı ekleyin:

```bash
claude mcp add --transport http demo-docs http://localhost:3444/mcp/demo \
  --header "Authorization: Bearer ctxm_9f3a…"
```

Projenin **MCP access**'i **open**'a çevrildiyse header'ı çıkarabilirsiniz:

```bash
claude mcp add --transport http demo-docs http://localhost:3444/mcp/demo
```

Çalıştığını kontrol edin:

```bash
claude mcp list
```

Sonra yalnızca dokümantasyonunuz hakkında bir soru sorun — Claude Code, `search_docs`'u kendiliğinden
çağırmaya karar verir, çünkü sunucu neyi tuttuğunu anlatır.

## Cursor

Her proje için `~/.cursor/mcp.json`, ya da tek bir depo içinde `.cursor/mcp.json`. Yeni bir proje
varsayılan olarak bir token gerektirir:

```json
{
  "mcpServers": {
    "demo-docs": {
      "url": "http://localhost:3444/mcp/demo",
      "headers": { "Authorization": "Bearer ctxm_9f3a…" }
    }
  }
}
```

Projenin **MCP access**'i **open**'a çevrildiyse `headers` bloğunu çıkarabilirsiniz:

```json
{
  "mcpServers": {
    "demo-docs": { "url": "http://localhost:3444/mcp/demo" }
  }
}
```

Cursor'ı yeniden başlatın, sonra **Settings → MCP**'de yeşil bir gösterge arayın.

## Claude Desktop

Claude Desktop stdio konuşur, bu yüzden bir köprüye ihtiyaç duyar. Yeni bir proje varsayılan olarak bir
token gerektirir ve `mcp-remote` onu `--header` ile iletir; `claude_desktop_config.json` içinde:

```json
{
  "mcpServers": {
    "demo-docs": {
      "command": "npx",
      "args": [
        "-y", "mcp-remote", "http://localhost:3444/mcp/demo",
        "--header", "Authorization: Bearer ctxm_9f3a…"
      ]
    }
  }
}
```

Projenin **MCP access**'i **open**'a çevrildiyse `--header` argümanını çıkarabilirsiniz:

```json
{
  "mcpServers": {
    "demo-docs": {
      "command": "npx",
      "args": ["-y", "mcp-remote", "http://localhost:3444/mcp/demo"]
    }
  }
}
```

Claude Desktop'ı yeniden başlatın. Araçlar connectors simgesinin altında görünür.

Yapılandırma dosyası konumları: macOS `~/Library/Application Support/Claude/claude_desktop_config.json`,
Windows `%APPDATA%\Claude\claude_desktop_config.json`.

## Başka herhangi bir MCP istemcisi

Ona URL'yi verin. Contextator **her iki** MCP transport'unu da aynı adreste sunar ve istemcinin
gönderdiğine göre seçer:

- **Streamable HTTP** (güncel istemciler): bir `initialize` isteğini `POST` edin; session id
  `mcp-session-id` header'ında geri gelir.
- **HTTP + SSE** (protokol `2024-11-05`, eski istemciler): URL'yi `GET` edin; sunucu
  `/mcp/demo/messages?sessionId=…`'i işaret eden bir `endpoint` olayıyla yanıt verir.

İkisi arasında geçiş yapan bir yapılandırma yoktur.

## Token gerektiren projeler

**MCP access**'i **token required** olan bir proje, geçerli bir token olmadan gelen her isteği,
istemcinin hangi transport'u kullandığından bağımsız olarak `401` ve bir
`www-authenticate: Bearer realm="<project-name>"` header'ıyla yanıtlar. Token'ı proje sayfasında
üretin — yalnızca bir kere gösterilir — ve sıradan bir header olarak gönderin:

```
Authorization: Bearer ctxm_9f3a…
```

- Header **her** `/mcp/*` isteğinde kontrol edilir. Eski SSE transport'unda bu, stream'i açan `GET`
  isteği *ve* `/mcp/demo/messages`'a giden `POST`'lar anlamına gelir; bu yüzden yalnızca ikisinden
  birine header ekleyebilen bir istemci bağlanamaz. Bir tarayıcı `EventSource`'u genelde bu durumdur —
  o projeleri açık bırakın ya da tüm örneği kimlik doğrulayan bir proxy'nin arkasına koyun.
- Token'lar proje başınadır. İki token korumalı projeye bağlı bir istemcinin her biri için birer
  token'a ihtiyacı vardır.
- Bir token'ı iptal etmek, istemcisini oturum ortasında hemen keser; bir projeyi **open**'dan
  **token required**'a çevirmek de öyle. Güncel bir token ile yeniden bağlanmak tek gereken şeydir.

Bu anahtarın nerede olduğu ve kimin çevirebileceği: [Projeler](/tr/docs/projects/).

## Hesap zorunlu kılan projeler

**account required** üçüncü moddur ve bu panonun üyeliklerinin `/mcp/*`'a ulaştığı moddur. Statik bir
`ctxm_…` token kimseyi adlandırmaz ve orada reddedilir; bir istemcinin projenin **üyesi** olan bir hesap
adına davranması gerekir ve bu **her** istekte yeniden denetlenir — bir üyeliği kaldırmak, bir hesabı
devre dışı bırakmak ya da parolasını sıfırlamak bağlantıyı bir süre dolumunda değil, bir sonraki
çağrısında keser.

İstemci bu kimlik bilgisini **OAuth 2.1** üzerinden alır; tarayıcı tabanlı MCP connector'larının zaten
konuştuğu şey budur. Hiçbir şey yapılandırmazsınız: connector'ı
`http://host:3444/mcp/<project-name>`'e yöneltin; sunucunun yetkilendirme endpoint'lerini keşfeder,
kendini kaydeder ve sizi buradaki bir sayfaya, oturum açıp onaylamanız için gönderir. Geri aldığı şey
*sizin* hesabınız olarak davranır, sessizce kendini yeniler ve connector bir ay kullanılmazsa süresi
dolar. Parolanızı değiştirmek, sizin adınıza davranan her connector'ın bağlantısını keser.

`MCP_OAUTH=0` akışın tamamını kaldırır; o zaman kapalı bir projeyi yalnızca statik tokenlar açar — bu da
tarayıcı tabanlı connector'ların hiç bağlanamaması demektir.

## Aynı anda birden fazla proje

Proje başına bir girdi ekleyin. İzole kalırlar — ikisine de bağlı bir ajanın basitçe iki ayrı araç
seti olur ve birindeki bir arama diğerinden hiçbir zaman belge döndürmez.

```json
{
  "mcpServers": {
    "billing-docs": { "url": "http://localhost:3444/mcp/billing" },
    "mobile-docs":  { "url": "http://localhost:3444/mcp/mobile" }
  }
}
```

---

## Başka bir makineden bağlanmak

1. Sunucunun erişilebilir olduğundan emin olun: `HOST=0.0.0.0` (varsayılan) ve port açık.
2. `localhost` değil, sunucunun adresini kullanın: `http://docs.internal:3444/mcp/demo`.
3. Bir reverse proxy arkasında, panonun doğru URL'leri yazdırması için `PUBLIC_BASE_URL`'i ayarlayın
   ve response buffering'i kapatın — bkz. [Kurulum](/tr/docs/installation/).

:::note
**Bir proje açık bırakılabilir.** **MCP access**'i **open** iken, porta ulaşan herkes onda indekslenmiş
her belgeyi anonim olarak okuyabilir — yeni bir proje varsayılan olarak böyle değildir, ama kendi
sayfasından bu şekilde çevrilebilir. Proje sayfasında bir token ya da hesap zorunlu kılın, portu özel
bir ağda tutun ya da önüne bir kimlik doğrulama koyun — bkz. [Güvenlik](/tr/docs/security/). Bir token
kendi başına bir kapıdır ve kimseyi adlandırmaz; bir hesabı adlandıran kimlik bilgisi ise **open** dâhil
her modda o hesabın üyeliğine karşı denetlenir.
:::

## Bir ajan olmadan doğrulamak

Depoyla birlikte bir smoke test gelir. Bir kaynak checkout'undan:

```bash
npm install
npm run smoke -- http://localhost:3444/mcp/demo "how do I re-index"
npm run smoke -- http://localhost:3444/mcp/demo "kurulum" --sse   # eski transport'u da dener
```

Gerçek bir MCP handshake yapar, araçları listeler ve bir arama çalıştırır. Bir `Authorization`
header'ı gönderemez, bu yüzden bir token gerektiren proje ona `401` yanıtı verir — o durumu bunun
yerine `curl` ile kontrol edin:

```bash
curl -s -i -X POST http://localhost:3444/mcp/demo \
  -H "Authorization: Bearer ctxm_9f3a…" \
  -H 'content-type: application/json' -H 'accept: application/json, text/event-stream' \
  -d '{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":"2025-03-26","capabilities":{},"clientInfo":{"name":"curl","version":"0"}}}'
```

## Bağlanmıyorsa

| Belirti | Kontrol edin |
|---------|-------|
| `Unknown project "…"` | URL'deki proje adı, tam olarak panonun gösterdiği gibi mi |
| İstemci bağlanıyor ama hiçbir şey bulamıyor | Proje indekslendi mi — pano belge ve parça sayılarını gösterir |
| "indexed with another model" | Projeyi yeniden indeksleyin ([Gömme Modelleri](/tr/docs/embedding-models/)) |
| Local'de çalışıyor, başka bir makineden çalışmıyor | `HOST`, firewall ve `localhost` yerine makinenin adresini kullanıp kullanmadığınız |
| Tarayıcı tabanlı bir istemci reddediliyor | Origin'ini `ALLOWED_ORIGINS`'e ekleyin |
| `401 This project requires an MCP token` | Proje **token required** modunda ve istemci hiç `Authorization` header'ı göndermiyor |
| `401 This project requires an account-backed credential` | Proje **account required** modunda ve istemci, kimseyi adlandırmayan statik bir `ctxm_…` token gönderiyor |
| `403 That account is not a member of this project` | Connector, projenin üyesi olmayan bir hesap adına oturum açtı. Bu, **open** dâhil **her** modda denetlenir |
| Tarayıcı tabanlı bir connector hiç bağlanamıyor | Bu kurulumda `MCP_OAUTH=0`, yani kullanabileceği bir akış yok |
| `401 Unknown or revoked MCP token` | Token iptal edilmiş ya da başka bir projeye ait. Proje sayfasında yeni bir tane üretin |

Daha fazlası [Sorun Giderme](/tr/docs/troubleshooting/) sayfasında.
