Bu hafta başında bir “Ableton Live MCP” Show HN gönderisi 118 puana ve 78 yoruma ulaştı. Artık bu model tanıdık: birisi beklenmedik bir araç için bir Model Bağlam Protokolü sunucusu yazdı, Claude Desktop kitlesi bunu sevdi ve ardından “X için bir tane yazmalı mıyım?” gönderileri dalgası geldi. MCP, Anthropic'e özel bir deneyden bir yıldan kısa sürede varsayılan bir aracı entegrasyon katmanına dönüştü.
Bu büyümenin gizlediği şey, araçlarda bir boşluk olmasıdır: kimse MCP sunucularını test etmek için temiz bir yol sunmadı. Hata ayıklayıcı ile stdio üzerinden JSON-RPC'yi elle çalıştırmak "hello-world" için iyi olabilir; ancak sunucunuzda 12 araç, 3 istem ve güvenilmez bir yukarı akış API'si olduğunda dağılır. Bu kılavuz, MCP sunucularını manuel olarak test etmek ve bu testleri Apidog ile otomatikleştirmek için pratik bir rehber sunar, böylece MCP sunucularını diğer tüm API'leri gönderdiğiniz gibi gönderebilirsiniz: bir sözleşme, bir mock ve bir regresyon paketi ile.
Daha genel bir aracı bağlamından geliyorsanız, agents.md kılavuzumuz bununla iyi uyum sağlar; oradaki kurallar MCP sunucu sözleşmelerini ekibinize iletmeyi kolaylaştırır.
TL;DR (Çok Uzun; Okumadım)
- MCP, Anthropic'ten gelen Model Bağlam Protokolü'dür; stdio veya HTTP üzerinden JSON-RPC 2.0'dır ve üç temel öğeyi (araçlar, kaynaklar ve istemler) sunar.
- Bir MCP sunucusunu test etmek, initialize, tools/list, tools/call, resources/read ve prompts/get yanıtlarını bir sözleşmeye göre doğrulamak anlamına gelir.
- Manuel başlayın: sunucuyu komut satırından stdio ile çalıştırın, yanıtları gözle onaylayın ve istemcileri eklemeden önce şekil hatalarını düzeltin.
- Otomasyona geçin: Apidog'da JSON-RPC trafiğini yakalayın, her çağrıyı kaydedilmiş bir isteğe dönüştürün, yanıt şekli ve içeriği üzerinde iddialar oluşturun ve paketi CI'da çalıştırın.
- MCP sunucunuzun çağırdığı yukarı akış API'lerini simüle etmek için Apidog'un mock sunucusunu kullanın, böylece testler belirleyici kalır.
- İstek koleksiyonunu, mock sunucusunu ve CI çalıştırıcısını tek bir yerden almak için Apidog'u indirin.
MCP aslında iki dakikada nedir
Model Bağlam Protokolü spesifikasyonu, küçük bir yüzey alanına sahip bir JSON-RPC 2.0 kablo formatı tanımlar. Bir istemci (Claude Desktop, Cursor, kendi aracınız) bir MCP sunucusu başlatır, bir initialize el sıkışması gerçekleştirir ve ardından çağrılar yapar.
Testlerinizin yüzde 90'ını ayıracağınız beş çağrı:
initialize: sürüm anlaşması ve yetenek bildirimi.tools/list: sunucu, bağımsız değişkenler için JSON Şeması dahil olmak üzere sunduğu araçları döndürür.tools/call: istemci, bir aracı adıyla ve bağımsız değişkenlerle çağırır.resources/listveresources/read: sunucu, okunabilir URI adresli içeriği sunar.prompts/listveprompts/get: sunucu, istemcinin oluşturabileceği istem şablonlarını sunar.
Aktarım, ya stdio (stdin/stdout üzerinde yeni satırla ayrılmış JSON-RPC çerçeveleri) ya da akış destekli HTTP'dir (genellikle akış için SSE ile POST /). Çoğu yerel sunucu stdio kullanırken, uzak sunucular HTTP kullanır.
Test etmenin neden önemli olduğu: her Claude Desktop kullanıcısı, her Cursor kullanıcısı, MCP desteği ekleyen her IDE sunucunuzu çağıracaktır. tools/list şeklindeki hatalar tüm istemcileri aynı anda bozar. Bir regresyonun maliyeti yüksektir.
Ne test etmelisiniz
Sağlam bir MCP sunucusu test paketi altı boyutu kapsar.
- Protokol uygunluğu.
initializedoğruprotocolVersiondeğerini döndürüyor mu? Sunucu, gerçekten desteklediği yetenekleri ilan ediyor mu? - Şema doğruluğu.
tools/listiçindeki her aracın argümanlar için geçerli bir JSON Şeması var mı? Gerekli alanlar işaretli mi? Açıklama üç kelimeden uzun mu? Boş açıklamalar Claude'da araç seçimini bozar. - Araç davranışı. Her araç için,
tools/calldoğru tipte (text,image,resource) içerik blokları döndürüyor mu? Hata durumları JSON-RPC hataları atmak yerineisError: truesonucu döndürüyor mu? - Kaynak erişimi.
resources/listURI'larıresources/readaracılığıyla çağrıldığında çözümleniyor mu? Sayfalama ilk sayfadan sonra çalışıyor mu? - İstem oluşturma. İstemler iyi biçimlendirilmiş
messagesdizileri döndürüyor mu? Argüman ikameleri doğru yerlere geliyor mu? - Hata modları. Yukarı akış API'si kapalı olduğunda ne olur? Bir araç argümanı eksik olduğunda? İstemci zaman aşımına uğradığında? Bunlar, "hello-world" aşamasında değil, üretimde ortaya çıkan hatalardır.
Bu kılavuzun geri kalanı, önce manuel, sonra otomatik olarak bunların her birini anlatır.
Stdio ile manuel test
Mümkün olan en basit kurulumla başlayın: bir terminal, sunucu ikili dosyanız ve MCP denetleyicisi veya el ile ham JSON-RPC.
Henüz bir sunucu oluşturmadıysanız, Python veya TypeScript'teki resmi MCP SDK hızlı başlangıcı ile bir iskelet oluşturun. İki araçlı hava durumu örneği, test etmek için yeterlidir.
Sunucuyu denetleyici modunda çalıştırın:
npx @modelcontextprotocol/inspector node your-server.js
Denetleyici, sunucunuza MCP ile konuşan ve her isteği ve yanıtı gösteren yerel bir web kullanıcı arayüzü başlatır. Bu, sunucunun başladığını, yeteneklerini ilan ettiğini ve tools/list'e yanıt verdiğini doğrulamak için en hızlı yoldur.
Denetleyici görünümü doğru göründüğünde, Apidog için çerçeveleri yakalayabilmek amacıyla aynı akışı ham stdio ile çalıştırın:
echo '{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":"2026-04-01","capabilities":{}}}' | node your-server.js
Stdout'ta bir JSON-RPC yanıtı alacaksınız. İsteği ve yanıtı kaydedin. tools/list, tools/call, resources/list ve diğerleri için tekrarlayın. Bu alıştırmanın sonunda, sunucunuzun kablo düzeyindeki sözleşmesini tanımlayan 6 ila 12 standart istek-yanıt çiftine sahip olacaksınız.
Dikkat edilmesi gereken iki şey.
Birincisi, içerik blokları. Bir araç sonucu content: [{ type: "text", text: "..." }] veya content: [{ type: "image", data: "...", mimeType: "image/png" }] döndürür. Bir yanıtta türleri karıştırmaya izin verilir; istemciler bunları nasıl işledikleri konusunda farklılık gösterir.
İkincisi, hatalar. MCP spesifikasyonu açıktır: araç yürütme hataları, isError: true ile normal bir sonuç ve hatayı açıklayan bir içerik bloğu döndürür. Bir aracın içinden JSON-RPC hata yanıtları atmayın; bu, bir araç düzeyindeki hatayı değil, bir protokol düzeyindeki hatayı gösterir. Birçok istemci, protokol hatalarında bağlantıyı düşürür.
Manuelden otomatike: Apidog'da test paketini oluşturma
Manuel test, bariz hataları ortaya çıkarır. “Son değişikliğim araç 7'nin argüman şemasını bozdu mu?” diye sormaya başladığınızda ve bunu öğrenmek için 12 curl komutu yazmak istemediğinizde otomasyona geçersiniz.
Desen: manuel test sırasında kaydettiğiniz her istek-yanıt çiftini Apidog'a kaydedilmiş bir istek olarak yapıştırın, iddialar ekleyin ve her push işleminde paketi çalıştırın.
1. MCP sunucusu için bir Apidog projesi oluşturun
Apidog'u açın, yeni bir proje oluşturun, temel URL'yi MCP sunucunuzun HTTP uç noktasına (veya stdio köprü URL'sine; aşağıya bakın) ayarlayın. Apidog projeleri hem REST'i hem de JSON-RPC'yi destekler; bir JSON-RPC ortamı oluşturun.
HTTP arayüzü olmayan stdio sunucuları için, bunları test için ince bir HTTP sarmalayıcısının arkasında çalıştırın. Resmi denetleyici bir tane sunar; alternatif olarak, HTTP üzerinden JSON-RPC okuyan ve stdio'ya yönlendiren 30 satırlık bir Node betiği gayet iyi çalışır. Aynı deseni, HTTP olmayan arka uçlar için 2026'da Postman'sız API testi makalesinde kullanıyoruz.
2. Standart istekleri kaydedin
initialize, tools/list, tools/call, resources/list, resources/read, prompts/list, prompts/get'in her biri için JSON-RPC gövdesini bir istek olarak kaydedin. Apidog bunları gövde, başlıklar ve beklenen durumla birlikte depolar.
Apidog'un istek gövdesi görünümünde bir tools/call isteği şöyle görünür:
{
"jsonrpc": "2.0",
"id": 42,
"method": "tools/call",
"params": {
"name": "get_weather",
"arguments": {
"city": "Tokyo"
}
}
}
3. İddialar ekleyin
Otomasyonun amacı, isteği göndermek değil, yanıtı doğrulamaktır. Apidog, JSONPath iddialarını doğal olarak destekler. tools/list için en azından şunları istersiniz:
$.result.toolsmevcut$.result.tools.lengthsıfırdan büyük- Her aracın
name,descriptionveinputSchema'sı var - Her
inputSchemageçerli bir JSON Şeması
Bilinen iyi bir girdi üzerindeki tools/call için şunları istersiniz:
$.result.isErrorfalse (veya mevcut değil)$.result.contentbir dizi- İlk içerik bloğu beklenen
typeve içeriğe sahip
Bilinen kötü bir girdi üzerindeki tools/call için (eksik gerekli argüman) şunları istersiniz:
$.result.isErrortrue$.result.content[0].textbeklenen hata mesajınızla eşleşiyor
Apidog bu iddiaları istek başına depolar. Hatalar çalıştırma raporunda gösterilir.
4. Yukarı akış API'lerini mocklayın
Çoğu MCP sunucusu harici bir API'yi sarmalar: hava durumu verileri, GitHub, Linear, dahili bir veritabanı. Her commit işleminde CI çalıştırmalarının canlı API'lere ulaşmasını istemezsiniz. İki neden: maliyet ve kararsızlık.
Apidog'un yerleşik mock sunucusu bunu düzeltir. Her yukarı akış uç noktasını gerçekçi bir JSON gövdesi döndüren bir mock rotası olarak tanımlayın. MCP sunucunuzun yapılandırmasını testler sırasında mock URL'sine ve gerçek çalıştırmalar sırasında üretim ortamına yönlendirin. Mock iş akışını sözleşme-öncelikli API geliştirme makalesinde ayrıntılı olarak ele alıyoruz.
Sonuç: saniyeler içinde çalışan, harici ağ gerektirmeyen ve şema regresyonlarını piyasaya sürülmeden çok önce yakalayan bir test paketi.
5. Paketi CI'da çalıştırın
Apidog projeleri CLI çalıştırıcılara dışa aktarılır. apidog run komutu bir proje kimliği alır, kaydedilen her isteği çalıştırır, iddiaları değerlendirir ve başarısızlık durumunda sıfır olmayan bir kodla çıkar. Bunu GitHub Actions'unuza veya zaten kullandığınız herhangi bir CI sağlayıcısına entegre edin.
Minimal bir iş akışı:
name: MCP server tests
on: [push, pull_request]
jobs:
test:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with: { node-version: 22 }
- run: npm ci
- name: Start MCP HTTP wrapper
run: node test/wrapper.js &
- name: Run Apidog suite
run: npx apidog run --project-id $APIDOG_PROJECT --env ci
env:
APIDOG_PROJECT: ${{ secrets.APIDOG_PROJECT }}
APIDOG_TOKEN: ${{ secrets.APIDOG_TOKEN }}
Her push işlemi tüm MCP sözleşmesini çalıştırır. Araç 7'nin şema regresyonu, ortaya çıkmadan yerleşemez.
İyi test kapsamı nasıl görünür
Apidog'da eksiksiz bir MCP sunucusu test planı tipik olarak şunları içerir:
- Yetenek iddialarıyla 1
initializeisteği - Şekil ve JSON Şeması iddialarıyla 1
tools/lististeği - Araç başına 2 ila 4
tools/callisteği: mutlu yol, eksik argüman, geçersiz tür, yukarı akış hatası - Kaynak ailesi başına 1
resources/listartı 1resources/read - İstem şablonu başına 1
prompts/listartı 1prompts/get
3 kaynak ve 4 istem içeren 10 araçlı bir sunucu için, paket 50 ila 70 istek gönderir. Apidog, mock sunucusu hazır olduğunda bunu yerel olarak 10 saniyenin altında çalıştırır.
MCP sunucularını test ederken sık yapılan hatalar
En sık gördüğümüz modeller bunlardır.
initializegidiş-dönüşünü atlamak. Bazı sunucular, el sıkışma sırasında araç kayıt defterlerini geç yükledikleri içininitializehiç çağrılmamışsatools/list'te çöker. Her zaman önceinitialize'ı çalıştırın.- Ham hata dizeleri üzerinde iddia oluşturmak. Araç hata mesajları değişecektir. Tam dize eşleşmeleri yerine
isError: trueve kararlı bir hata kodu veya bir regex üzerinde iddia oluşturun. - Mock'un üretimden uzaklaşmasına izin vermek. Gerçek API'nin asla döndürmediği şekilleri döndüren bir mock, bozuk bir entegrasyonda size yeşil testler verir. Her sürümde gerçek yanıtlardan mock fixture'ları yeniden kaydedin.
- Akışı unutmak. HTTP MCP sunucuları, SSE üzerinden araç sonuçlarını akışla gönderir. Test çalıştırıcınız SSE'yi işlemelidir; Apidog bunu yapar, ancak isteğe akışı etkinleştirmeniz gerekir.
- Eşzamanlılığı test etmemek. MCP istemcileri, aracı döngülerinde eşzamanlı
tools/callistekleri gönderir. Sunucunuz kilitler olmadan paylaşılan durumu tutuyorsa, tek istek testleri geçer ve üretim bozulur. Pakete paralel çalıştırma testi ekleyin. - Protokol hatalarını araç hatalarıyla karıştırmak. MCP spesifikasyonu bunları bilerek ayırır; bunları karıştırmak Claude Desktop'ın bağlantıyı kapatmasına neden olur. Aynı tür sözleşme hatasını API platformu sözleşme-öncelikli geliştirme makalesinde ele almıştık.
Gerçek dünya kullanım durumları
Şirketlerinin olay yönetimi API'si için dahili bir MCP sunucusu oluşturan bir ekip, tools/list şekli üzerindeki Apidog iddialarını kullanarak bir hafta içinde üç regresyon yakaladı. Bu test olmasaydı, hatalar Claude Desktop kullanan her mühendise aynı anda dağıtılacaktı.
Notion için açık kaynaklı bir MCP sunucusu yayınlayan bağımsız bir geliştirici, CI sırasında Notion'ın hız sınırlarına takılmadan test paketini çalıştırmak için Apidog mock'larını kullanıyor. Paketleri her PR'da çalışır, 8 saniye sürer ve katkıda bulunanların geliştirme için API erişimine ihtiyaç duymaması için Apidog'un mock fixture'larını depoda önbelleğe alır.
14 dahili MCP sunucusu çalıştıran bir platform ekibi, her sunucunun sözleşmesinin yaşadığı paylaşılan bir Apidog çalışma alanı oluşturdu. Yeni sunucular temel bir test paketi miras alır; incelemeciler birleştirmeden önce şema farklılıklarını yan yana karşılaştırabilirler. Ekip, ilk çeyrekte önlenen iki kesinti bildirdi; her ikisi de şirketteki her Claude Desktop kullanıcısına yeniden adlandırılmış bir argüman gönderecek bir PR üzerindeki tools/list şekil iddiaları tarafından yakalandı.
Dahili bir gözlemlenebilirlik platformu için bir MCP sunucusu oluşturan ikinci bir ekip, aynı paketi hazırlama ve üretim ortamlarına karşı çalıştırmak için Apidog'un ortam değiştiricisini kullanıyor. Her ortam farklı bir mock fixture dosyasına işaret eder, böylece aynı 60 iddia tek bir isteği yeniden yazmadan her iki dağıtımı da doğrular.
Sonuç
MCP bu yıl ana akım haline geldi, ancak test hikayesi hala on yıl önceki REST API testlerinin olduğu yerde: geçici, manuel, kırılgan. Ekosistemin yetişmesini beklemek zorunda değilsiniz. MCP sunucunuzu olduğu gibi bir API olarak ele alın, bir sözleşme tasarlayın, yukarı akışları mock'layın ve CI'da iddiaları çalıştırın.
Beş önemli çıkarım:
- Bir MCP sunucusu bir JSON-RPC API'sidir; onu bir REST API gibi aynı titizlikle test edin.
- Resmi denetleyici ile manuel olarak başlayın, ardından standart istekleri yakalayın ve otomasyona geçin.
- Apidog, JSON-RPC'yi, iddiaları, mock'ları ve CI'ı tek bir projede ele alır.
- Altı boyutu kapsayın: protokol uygunluğu, şema doğruluğu, araç davranışı, kaynak erişimi, istem oluşturma ve hata modları.
- Test paketinin hızlı ve belirleyici kalması için Apidog'daki yukarı akış API'lerini mock'layın.
Bir sonraki adım: Apidog'u açın, bir proje oluşturun, manuel olarak yakaladığınız istek gövdelerini yapıştırın, tools/list için JSONPath iddiaları ekleyin ve paketi çalıştırın. Sunucunuzun sözleşmesinin gönderilmeye yetecek kadar sağlam olup olmadığını bir saat içinde öğreneceksiniz.
Sıkça Sorulan Sorular (SSS)
MCP nedir?
MCP, Model Bağlam Protokolü, Anthropic'in yapay zeka istemcilerinin (Claude Desktop gibi) harici araçları, kaynakları ve istemleri nasıl çağırdığına dair açık spesifikasyonudur. Stdio veya akış destekli HTTP üzerinden JSON-RPC 2.0'dır. Tam MCP spesifikasyonu modelcontextprotocol.io adresinde yayınlanmıştır.
Bir MCP sunucusunu HTTP sarmalayıcı olmadan test edebilir miyim?
Evet. Resmi MCP denetleyicisi doğrudan stdio ile konuşur ve manuel test için bir kullanıcı arayüzü sunar. Apidog'da otomatik test için, CI sırasında stdio'yu ince bir HTTP sunucusuna sarın; üretim trafiği hala stdio üzerinden gider.
MCP sunucumun çağırdığı yukarı akış API'lerini nasıl mocklarım?
Apidog projenizde her yukarı akış uç noktasını bir mock olarak tanımlayın, testler sırasında MCP sunucusunun yapılandırmasını mock URL'sine yönlendirin ve çalışma zamanında üretim URL'lerine geçin. Aynı deseni QA mühendisleri için API test araçları makalesinde ayrıntılı olarak ele alıyoruz.
Akışlı araç sonuçları ne olacak?
HTTP MCP sunucuları, Sunucu Tarafından Gönderilen Olaylar (SSE) üzerinden araç sonuçlarını akışla gönderir. Apidog, kaydedilen isteklerde SSE'yi destekler; istek ayarlarında açın ve birleştirilmiş akış üzerinde iddia oluşturun.
Protokol sürümünü test etmeli miyim?
Evet. Desteklediğiniz protocolVersion'ı initialize içinde sabitleyin ve buna karşı iddia oluşturun. Uyuşmazlıklar sessiz istemci uyumsuzluğuna neden olur.
MCP sunucumu gerçek Claude Desktop'a karşı test edebilir miyim?
Yapabilirsiniz ve her sürümden önce en az bir kez yapmalısınız. Ancak Claude Desktop'ı test döngünüz olarak kullanmayın; yavaş, manuel ve belirleyici değildir. Regresyon paketi için Apidog'u ve duman testi için Claude Desktop'ı kullanın.
Gerçek MCP sunucu örneklerini nerede görebilirim?
Resmi MCP sunucuları deposu, dosya sistemi, GitHub, Slack, Postgres ve düzinelerce başka araç için referans uygulamalara sahiptir. Araç tanımlarını okuyun; bunlar, iyi bir MCP şeklinin neye benzediğini anlamanın en kolay yoludur.
