Skip to content

MCP Sunucuları

Model Context Protocol sunucularına bağlanma — kurulum, hata ayıklama, taşıma protokolleri

16 dk okuma

MCP (Model Context Protocol), Anthropic’in Claude’u harici araçlar ve veri kaynaklarıyla genişletmek için geliştirdiği standarttır. Bunu Claude için bir plugin sistemi olarak düşünebilirsiniz — CLI’ı veritabanlarına, tarayıcılara, API’lere ve özel dahili servislere Claude’un kendisini değiştirmeden bağlar.

Buna kimin ihtiyacı var: Claude’un veritabanlarını sorgulamasını, API’lere erişmesini, bulut depolamayı okumasını veya 60 yerleşik CLI aracının ötesinde araçlar kullanmasını istiyorsanız MCP sunucularına ihtiyacınız var. Yerleşik Read, Write, Bash ve Grep araçları iş akışınızı karşılıyorsa MCP’ye ihtiyacınız yok.

Sunucular; araçları, kaynakları ve prompt’ları dışa açar. Claude bunları oturum başlangıcında keşfeder ve talep üzerine kullanır. Bu bölüm taşıma protokollerini, yapılandırmayı, hata ayıklamayı ve harici yetenekleri bağlamanın getirdiği performans ödünleşimlerini kapsar.

MCP architecture: Claude CLI communicates with external services via stdio or SSE transportClaude CLIRequest →← ResponseTransportstdioSSEExternal Service

Üç Taşıma Protokolü

MCP sunucuları Claude ile üç taşıma mekanizmasından biri aracılığıyla iletişim kurar. Doğru seçim, sunucunun nerede çalıştığına ve nasıl yönetildiğine bağlıdır.

Taşıma Protokolü Karşılaştırması

ProtokolYapılandırma AnahtarıEn Uygun KullanımÖdünleşim
stdiocommand + argsYerel araçlar, oturum bazında izolasyonOturum başına 2-10 saniye başlatma süresi (sunucu alt süreç olarak başlar)
sseurl (/sse ile biten yol)Halihazırda çalışan uzak sunucularUzun süre çalışan bir süreç gerektirir; eski protokol
streamable-httpurl + type: “streamable-http”Modern uzak sunucular, paylaşımlı ekip araçlarıSSE’den daha iyi bağlantı yönetimi; gelişmekte olan standart

Çoğu yerel geliştirme için stdio varsayılandır ve doğru seçimdir. Sunucu süreci oturum başladığında başlar ve sona erdiğinde kapanır. MCP sunucusu paylaşımlı veritabanı proxy’si veya ekip çapında araç sunucusu gibi uzun süre çalışan bir uzak servis olduğunda SSE veya streamable-http kullanın.

Satır İçi Yapılandırma

MCP sunucu tanımlarını --mcp-config ve bir JSON dizesiyle doğrudan komut satırında geçirin. Yapılandırma dosyası gerekmez.

Satır İçi MCP Yapılandırması
$ claude -p "List files in /tmp" --mcp-config '{"mcpServers":{"filesystem":{"command":"npx","args":["-y","@anthropic-ai/mcp-server-filesystem","/tmp"]}}}'
# Starting MCP server: filesystem
# Discovering tools...
Here are the files in /tmp:
- session-abc123.sock
- npm-cache/
- debug.log

Claude, dosya sistemi MCP sunucusunu alt süreç olarak başlatır, MCP protokol el sıkışması aracılığıyla araçlarını keşfeder, prompt’u yerine getirmek için kullanır ve oturum sona erdiğinde sunucuyu kapatır. Satır içi JSON, dosya tabanlı yapılandırmayla aynı mcpServers şemasını takip eder.

--mcp-config’e ham JSON yerine bir dosya yolu da verebilirsiniz:

Terminal window
claude -p "Query the database" --mcp-config ./mcp-config.json

Dosya Tabanlı Yapılandırma

Tekrarlanabilir kurulumlar için sunucuları bir JSON yapılandırma dosyasında tanımlayın. Bu aynı zamanda proje kökündeki .mcp.json (Claude tarafından otomatik keşfedilir) ve kullanıcı düzeyinde araçlar için ~/.claude/settings.json tarafından kullanılan formattır.

{
"mcpServers": {
"filesystem": {
"command": "npx",
"args": ["-y", "@anthropic-ai/mcp-server-filesystem", "/home/user/projects"],
"env": {}
},
"database": {
"command": "python",
"args": ["-m", "mcp_server_postgres"],
"env": {
"DATABASE_URL": "postgresql://user:pass@localhost/mydb"
}
},
"remote-tools": {
"url": "http://internal-tools.company.com:3000/sse"
}
}
}

Her sunucu ya bir command (stdio için) ya da bir url (SSE / streamable-http için) belirtir. İsteğe bağlı env nesnesi, sunucu sürecine ortam değişkenleri geçirir — prompt’larda sabit kodlamak istemediğiniz gizli anahtarlar için kullanışlıdır.

MCP sunucuları beş farklı kapsamda tanımlanabilir ve çalışma zamanında birleştirilir. Aynı sunucu adı birden fazla kapsamda göründüğünde, daha spesifik kapsam kazanır.

Yapılandırma Kapsamları

KapsamKonumPaylaşımlı mı?Kullanım Alanı
CLI satır içi—mcp-config bayrağıTek seferlikBetikler, CI/CD, deneyler
Yerel.claude/settings.local.jsonCommit edilMEZ (gitignore’da)Gizli anahtarlı yalnızca yerel araçlar
Proje.claude/settings.jsonRepoya commit edilirEkip paylaşımlı araçlar (ör. proje veritabanı)
Kullanıcı~/.claude/settings.jsonTüm projelerHer zaman erişilebilir olmasını istediğiniz kişisel araçlar
Yönetilenmanaged-mcp.jsonOrganizasyon düzeyinde, kurumsalYönetici tarafından zorunlu veya engellenmiş sunucular

Öncelik sırası: CLI > Yerel > Proje > Kullanıcı > Yönetilen.

Gotcha

MCP yapılandırmaları dizin ağacında koşulsuz olarak yukarı doğru arar. Repo kökündeki bir .mcp.json her alt klasör oturumunda görünür. Becerilerden farklı olarak, bir .git sınırı MCP kalıtımını engellemez. Boş bir alt .mcp.json üst dizindekini gölgelemez. Üst MCP sunucularının yüklenmesini engellemenin tek yolu —strict-mcp-config veya ayrı depolar kullanmaktır.

Try This

MCP araçlarının bağlam pencerenizi nasıl etkilediğini kontrol edin. MCP sunucularıyla ve sunucular olmadan bir oturum çalıştırın:

claude -p “Hi” —output-format json | jq ‘.usage.cache_creation_input_tokens’

Bu token sayısını MCP etkin oturumlarınızla karşılaştırın. Her MCP sunucusu bağlam penceresine araç şemaları ekler — ne kadar çok sunucu, çağrı başına maliyet o kadar yüksek. Yapılandırılmış her sunucu gerçekten kullanılıyor mu?

Katı MCP Yapılandırması

--strict-mcp-config bayrağının iki kullanımı vardır: bir sunucu bağlanamazsa hemen hata vermek ve MCP izolasyonu — dizin ağacındaki tüm .mcp.json dosyalarını görmezden gelmek.

Terminal window
# İzolasyon: yalnızca bu belirli yapılandırmadaki sunucuları yükle
claude -p "Run audit" \
--strict-mcp-config \
--mcp-config ./my-servers.json

--mcp-config olmadan kullanıldığında, tüm MCP sunucularını tamamen kaldırır. --mcp-config ile kullanıldığında, yalnızca açıkça belirtilen yapılandırmayı yükler. Bu, üst MCP sunucularının kalıtımından kaçınması gereken monorepo’lardaki alt klasör oturumları için önemlidir.

CI/CD için kritik: --strict-mcp-config, MCP hatalarını sessizce görmezden gelmek yerine açık hale getirir. Otomatik ardışık düzenlerde, eksik bir veritabanı sunucusu derlemeyi başarısız kılmalı, düşük yeteneklerle devam etmemelidir. CI/CD kalıpları için Bölüm 13’e (Agent İş Akışları) bakın.

Katı Mod — Hızlı Hata
$ claude -p "Run audit" --mcp-config ./mcp-config.json --strict-mcp-config
Error: MCP server "database" failed to connect
Connection refused: postgresql://localhost: 5432/mydb
Exiting due to --strict-mcp-config
Gotcha

Varsayılan olarak, bozuk MCP sunucuları sessizce atlanır. Claude bu araçlar olmadan devam eder ve hiçbir uyarı vermez. Sorunu ancak Claude’un “Bu yeteneğe sahip değilim” dediğinde, mevcut olmasını beklediğiniz bir araç için keşfedersiniz. Otomatik ardışık düzenlerde her zaman —strict-mcp-config kullanın.

ToolSearch: Ertelenmiş Yükleme

Çok sayıda MCP sunucusu etkinken, araç açıklamaları bağlam penceresinin önemli bir kısmını tüketebilir. Claude, MCP araç açıklamaları bağlam penceresinin yaklaşık %10’unu aştığında otomatik olarak ToolSearch’ü etkinleştirir. Bu yapılandırılabilir değildir — otomatiktir.

Ertelenmiş yükleme nasıl çalışır:

  1. Araç isimleri init olayında listelenir, ancak tam şemalar önceden yüklenMEZ
  2. Claude isimleri görür ve araçların var olduğunu bilir
  3. Claude belirli bir araca ihtiyaç duyduğunda, tam şemayı almak için ToolSearch’ü çağırır
  4. Ancak o zaman şema bağlama yüklenir

Ertelenmiş yükleme olmadan, ayrıntılı şemalara sahip 80 MCP aracı yaklaşık 40K token bağlam tüketebilir. ToolSearch ile bu yük, bir araç gerçekten ihtiyaç duyulana kadar yaklaşık 2K token’a düşer. Ödünleşim, oturum sırasında kullanılan her benzersiz MCP aracı başına bir ekstra tur-gidiş-dönüştür.

Bir oturumda ertelenmiş araçları görebilirsiniz — <available-deferred-tools> bloğunda yalnızca isimle, parametre veya açıklama olmadan listelenir:

{
"name": "mcp__chrome-devtools__take_screenshot",
"deferred": true
}

Claude araca ihtiyaç duyduğunda, önce tam şemayı alır:

{
"type": "tool_use",
"name": "ToolSearch",
"input": {
"query": "select:mcp__chrome-devtools__take_screenshot",
"max_results": 1
}
}
Gotcha

MCP araç açıklamaları kullanılmasalar bile bağlamda kalır. 20’den fazla sunucu ve ayrıntılı şemalarla, etkili bağlam önemli ölçüde küçülebilir — 20’den fazla sunucu ve ayrıntılı şemalar 100K+ token yük tüketebilir. Bağlam şişmesini tespit etmek için yanıt yüklerindeki usage.input_tokens’ı izleyin. ToolSearch, açıklamalar pencerenin ~%10’unu aştığında bunu otomatik olarak azaltır, ancak gerçek çözüm etkin sunucuları 10’un ve toplam araçları 80’in altında tutmaktır.

Init Olayı: MCP Sunucu Durumu

--output-format stream-json kullanırken, init olayı her MCP sunucusunun bağlantı durumunu raporlar. Tüm beklenen sunucuların sağlıklı olduğunu doğrulamak için bunu otomasyonda ayrıştırın.

Init Olayı — MCP Sunucu Durumuartifacts/09/mcp_config_load.json
1{
2 "type": "system",
3 "subtype": "init",
4 "session_id": "a3b1c4d2-9e8f-4a7b-b6c5-1d2e3f4a5b6c",
5 "mcp_servers": [A
6 {
7 "name": "filesystem",
8 "status": "connected",B
9 "tools": [
10 "mcp__filesystem__read_file",
11 "mcp__filesystem__write_file",
12 "mcp__filesystem__list_directory"
13 ]
14 },
15 {
16 "name": "database",C
17 "status": "error",
18 "error": "Connection refused: postgresql://localhost: 5432/mydb"
19 }
20 ],D
21 "tools": [
22 {
23 "name": "Read"
24 },
25 {
26 "name": "Write"
27 },
28 {
29 "name": "mcp__filesystem__read_file"
30 },
31 {
32 "name": "mcp__filesystem__write_file"
33 },
34 {
35 "name": "mcp__filesystem__list_directory"
36 }
37 ]
38}
AYapılandırılmış tüm MCP sunucuları ve bağlantı durumları dizisi
BBağlı sunucular keşfedilen araçlarını listeler
CBaşarısız sunucular hatayı raporlar — yalnızca stream-json ile görünür
Dtools dizisi yerleşik araçları sağlıklı sunuculardan gelen MCP araçlarıyla birleştirir

Her sunucu "status": "connected" veya "status": "error" gösterir. Otomasyonda, devam etmeden önce tüm beklenen sunucuların başarıyla başlatıldığını doğrulamak için bu init olayını kontrol edin:

Terminal window
claude -p "List tools" \
--output-format stream-json \
--verbose \
--mcp-config ./mcp.json | head -1 | jq '.mcp_servers'

MCP Bağlantı Hatalarını Ayıklama

Bir MCP sunucusu bağlanamadığında, şu adımlarla ilerleyin:

Sunucu ikili dosyasını doğrudan test edin:

Terminal window
echo '{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"capabilities":{}}}' \
| npx -y @anthropic-ai/mcp-server-filesystem /tmp

Bu askıda kalır veya hata verirse, sunucunun kendisi bozuktur — sorun Claude’da değildir.

Yaygın MCP hataları:

  • Sunucu ikili dosyası bulunamadı: PATH’i kontrol edin. npx ilk çalıştırmada indirir (yavaş, zaman aşımına uğrayabilir).
  • JSON ayrıştırma hataları: .mcp.json’ı jq < .mcp.json ile doğrulayın. Sondaki virgüller JSON’ı bozar.
  • İzin reddedildi: Dosya sahipliğini kontrol edin. Yerel ikili dosyalar için chmod +x kullanın.
  • Bağlantı reddedildi: SSE/streamable-http sunucuları için port çakışması.
  • Eksik ortam değişkenleri: Yapılandırmanızdaki env nesnesini kontrol edin.
  • Devre dışı bırakma geçersiz kılması: ~/.claude.json içindeki disabledMcpServers sunucuları sessizce engeller.

Günlükleri kontrol edin: MCP sunucu stderr’i ~/.claude/logs/mcp-<server-name>.log dosyasında yakalanır. Hata raporu göndermeden önce bunu okuyun.

MCP Araç Adlandırma ve Filtreleme

MCP araçları katı bir adlandırma kalıbı izler: mcp__<sunucu-adı>__<araç-adı>. Bu kural --disallowedTools ile araç filtreleme için önemlidir:

Terminal window
# Tek bir MCP aracını engelle
claude -p "..." --disallowedTools "mcp__chrome-devtools__click"
# Bir MCP sunucusunun tüm araçlarını engelle (glob kalıbı)
claude -p "..." --disallowedTools "mcp__chrome-devtools__*"
Güvenlik Hatırlatması: Derinlemesine Savunma

Yerleşik Write’ı engellemek mcp__postgres__write’ı engellemez. Araç kısıtlamaları ve MCP araç adları tamamen bağımsızdır. Derinlemesine savunma güvenlik stratejileri için Bölüm 19’u (Sandbox ve Güvenlik) inceleyin.

Performans Sınırları

MCP sunucuları güçlüdür ancak gerçek maliyetleri vardır. Bu kısıtlamaları aklınızda tutun.

MCP Performans Kısıtlamaları

KısıtlamaSınırÖneri
Eşzamanlı sunucularKesin sınır yokAynı anda 10’un altında etkin tutun
Toplam etkin araçlarKesin sınır yokEtkin araçları 80’in altında tutun
Çıktı uyarısı10K tokenHerhangi bir MCP araç çıktısı bunu aştığında uyarı
Çıktı kesin sınırı25K token (varsayılan)MAX_MCP_OUTPUT_TOKENS ortam değişkeniyle geçersiz kılın
Bağlam etkisi1M’ye kadarÇok fazla araç açıklaması bağlam pencerenizin 100K+ token’ını tüketebilir

Veri yoğun MCP araçları için çıktı sınırını artırmak istiyorsanız:

Terminal window
MAX_MCP_OUTPUT_TOKENS=50000 claude -p "Fetch large dataset" --mcp-config ./mcp.json
Tip

MAX_MCP_OUTPUT_TOKENS aşıldığında, çıktı sessizce kesilir — sonuçta hiçbir uyarı görünmez. MCP araç yanıtları eksik görünüyorsa, bu sınıra ulaşıp ulaşmadığınızı kontrol edin.

Claude’u MCP Sunucusu Olarak Kullanma

claude mcp serve komutu normal ilişkiyi tersine çevirir — Claude MCP araçlarını tüketmek yerine, diğer istemciler Claude’u araç olarak tüketir. Bu, Claude-Claude zincirleme ve meta-agent mimarilerini mümkün kılar.

Sunucu yalnızca stdio taşıma protokolü kullanır. Başka bir Claude örneğinin MCP yapılandırmasında alt süreç olarak yapılandırın:

{
"mcpServers": {
"claude-worker": {
"command": "claude",
"args": ["mcp", "serve"]
}
}
}

Bu, bir koordinatör Claude’un bir işçi Claude’u araç olarak çağırmasına olanak tanır. İşçi kendi bağlam penceresi, araç seti ve izinleriyle çalışır — doğal bir izolasyon sınırı oluşturur. Yerleşik Agent(type) aracından farklı olarak, claude mcp serve iç içe geçirmeye izin verir (derinlik sınırı yoktur) ve ayrı süreçler kullanır.

MCP Hata Modları

MCP sunucuları sinsi ve tehlikeli şekillerde başarısız olabilir:

Belirsiz takılmalar: Bir MCP sunucusu yanıt vermez hale geldiğinde, Claude’un takılma algılaması yoktur. Oturumlar herhangi bir zaman aşımı veya hata mesajı olmadan 16+ saat takılı kalabilir.

60 saniyelik kesin zaman aşımı: MCP_TIMEOUT yapılandırılabilir olsa da, 60 saniyeden uzun değerler sessizce görmezden gelinir. Sabit kodlanmış yaklaşık 60 saniyelik bir sınır vardır. MCP araçlarını 30 saniye içinde yanıt verecek şekilde tasarlayın.

Sessiz sunucu hataları: Varsayılan olarak, bozuk bir MCP sunucusu başlangıçta sessizce atlanır. Sessiz hataları kesin hatalara dönüştürmek için --strict-mcp-config kullanın.

IDE senkronizasyon boşluğu: CLI aracılığıyla eklenen MCP sunucuları VS Code eklentisiyle senkronize olmaz ve tersi de geçerlidir. Ayrı sunucu listeleri tutarlar.

Now Do This

Yapılandırılmış MCP sunucularınızı listeleyin ve hangilerini gerçekten kullandığınızı kontrol edin. Kullanılmayan sunucuları devre dışı bırakarak çağrı başına token yükünü azaltın — her sunucunun araç şemaları, hiç çağrılmasalar bile bağlam penceresi alanı tüketir. Farkı görmek için önce ve sonra claude -p “Hi” —output-format json | jq ‘.usage’ çalıştırın.