İçeriğe atla
SinaptikLabAI KNOWLEDGE PLATFORM
RehberOrtaAraç Çağırma ve MCP

Araç şeması tasarlamak ve MCP sunucusu yayımlamak

İyi bir araç şeması tek bir fiili karşılar, girdisini serbest metin yerine enum ve desen kısıtlarıyla tanımlar, açıklamasında aracın ne zaman kullanılmayacağını da söyler ve hatayı modelin okuyup düzeltebileceği yapılandırılmış bir biçimde döndürür. Yan etkisi olan her araç istemciden gelen bir tekillik anahtarı alır: aynı anahtarla gelen ikinci çağrı yeni kayıt açmaz, ilk sonucu döndürür. Araç kümesi birden fazla istemciden kullanılacaksa MCP sunucusu olarak yayımlayın; tek istemci varsa doğrudan çağrı daha az hareketli parça demektir.

ÖNKOŞULLAR

  • Araçların çağıracağı, tek başına çalıştığı doğrulanmış en az bir uç nokta
  • Çağrılacak sistemlerde hangi işlemin geri alınabilir olduğunu bilen bir kişi
  • Şema değişikliğini sürümleyebileceğiniz bir kod deposu ve sürüm politikası
  • Araç çağrılarını tek tek görebildiğiniz bir iz kaydı

GEREKEN ARAÇLAR

  • JSON Şema yazıp doğrulayabileceğiniz bir kütüphane
  • Araç çağırmayı destekleyen bir model uç noktası
  • MCP sunucusu çalıştırabileceğiniz bir uygulama çatısı
  • Sözleşme testleri koşacak bir test çatısı
  • İz kaydı toplayıcısı
  1. 01

    Araç sınırını tek fiile indir

    Her araç tek bir fiili karşılasın; kip parametresiyle dallanan tek bir araç, modelin seçim hatasını yakalanması zor bir parametre hatasına dönüştürür.

    Araç sınırını çizen sizsiniz ve bu sınır modelin karar uzayını belirliyor. Tek bir "islem_yap(kip=...)" aracı yazmak seçim hatasını ortadan kaldırmaz, yalnızca yerini değiştirir: model artık yanlış aracı değil yanlış kipi seçer ve bunu araç adından, yetki katmanından veya ölçümden ayırt edemezsiniz.

    Sorunlu sınırYerineKazanç
    kayit_islemi(kip: ara | getir | guncelle)kayit_ara, kayit_getir, kayit_guncelleAyrı yetki, ayrı ölçüm, net ad
    veri_sorgula(sorgu: serbest metin)musteri_ara(eposta), siparis_getir(siparis_no)Girdi enum ve desenle kısıtlanabilir
    dosya_islemi(yol, icerik?, sil?)dosya_oku, dosya_yazYıkıcı işlem ayrı yetkiye bağlanır
    Araç adı bir arayüz sözleşmesidir; kip parametresi bu sözleşmeyi çalışma anına erteler.

    Sınırı çizerken ölçüt işin konusu değil geri alınabilirliğidir: okumayı yazmayla, geri alınabilir yazmayı geri alınamaz işlemle aynı araçta toplamayın. Bu ayrım sonradan yapılamaz, çünkü yetki ve onay katmanları araç adına bağlanır.

  2. 02

    Girdiyi kısıtlarla tanımla

    Serbest metin alanı bırakmayın: sabit kümeler enum, kimlikler desen, sayılar alt ve üst sınırla tanımlansın, zorunlu alanlar açıkça işaretlensin.

    Şema, modelin gördüğü tek biçimsel belgedir. Serbest metin bıraktığınız her alanda model makul görünen ama geçersiz bir değer üretebilir; enum, desen ve sınır koyduğunuz her alanda bu ihtimali baştan kapatırsınız. Kısıt aynı zamanda bir belgeleme biçimidir: kabul edilen değerler listesi, açıklamanın yapamadığı işi yapar.

    json
    {
      "ad": "siparis_durumu_guncelle",
      "aciklama": "Sipariş numarası bilinen TEK bir siparişin durumunu günceller. Numara elde yoksa önce siparis_ara çağrılır. İade ve ödeme işlemleri için kullanılmaz.",
      "girdi_semasi": {
        "type": "object",
        "required": ["siparis_no", "yeni_durum"],
        "additionalProperties": false,
        "properties": {
          "siparis_no": { "type": "string", "pattern": "^SP-[0-9]{8}$" },
          "yeni_durum": {
            "type": "string",
            "enum": ["hazirlaniyor", "kargoda", "teslim", "iptal"]
          },
          "not": { "type": "string", "maxLength": 200 }
        }
      }
    }
    • Sabit bir kümeden gelen her alan enum olsun; "durum: string" modelin yaratıcılığına açık kapı bırakır.
    • Kimlik alanlarına desen koyun; biçimi tutmayan uydurma bir numara şemada reddedilir.
    • additionalProperties alanını kapatın; şemada olmayan bir alan sessizce yutulmasın.
    • Zorunlu alanları gerçekten zorunlu tutun; "opsiyonel ama olmazsa hata" en kötü sözleşmedir.
    • Serbest metin kalacaksa uzunluk sınırı koyun ve ne beklendiğini açıklamada yazın.
    • Tekillik anahtarını modele gösterilen şemaya koymayın; onu istemci katmanı, çağrı döndükten sonra ekler.
  3. 03

    Açıklamayı seçim ölçütüyle yaz

    Açıklama aracın ne yaptığını değil ne zaman seçileceğini anlatsın; benzer araçtan farkını ve "ne zaman kullanılmaz" satırını mutlaka ekleyin.

    Araç açıklaması dokümantasyon değil seçim yönergesidir. Model onu bir insanın API belgesi okuması gibi değil, karar anında bir etiket gibi okur. Bu yüzden açıklamada işlevin tarifi kadar sınırı da bulunmalı: ne zaman bu araç, ne zaman öteki, hangi ön koşul sağlanmadan hiç çağrılmaz.

    text
    ZAYIF
    "Sipariş bilgisi döndürür."
    
    GÜÇLÜ
    "Sipariş numarası bilinen TEK bir siparişin güncel durumunu döndürür.
    Sipariş numarası elde yoksa önce siparis_ara kullanılır.
    Bir müşterinin tüm siparişlerini listelemek için kullanılmaz.
    Döndürdüğü alanlar müşteriye gösterilebilir; maliyet alanı hariç."

    Doğrulama adımı: birbirine en çok benzeyen iki aracın açıklamasını yan yana koyup "hangisi ne zaman" sorusunu bir meslektaşınıza sorun. O ayıramıyorsa model de ayıramaz. Ayrımı açıklamaya yazmadan araç kümesini yayımlamayın.

  4. 04

    Yazma araçlarını tekrarlanabilir kıl

    Yan etkisi olan her araca istemcinin ürettiği bir tekillik anahtarı ekleyin; aynı anahtarla gelen ikinci çağrı yeni kayıt açmadan ilk sonucu döndürsün.

    Bir ajan aynı aracı beklediğinizden çok daha sık iki kez çağırır: zaman aşımından sonra yeniden dener, yanıtı görmeden planını günceller, hatayı yanlış yorumlar. Yan etkisi olan araçlar bu gerçeğe göre yazılmalı. Tekillik anahtarı, "aynı işlem iki kez istendiğinde ne olur" sorusunu çalışma anına bırakmayan tek mekanizmadır.

    json
    {
      "calistirilan_cagri": {
        "arac": "siparis_durumu_guncelle",
        "model_argumanlari": {
          "siparis_no": "SP-10428317",
          "yeni_durum": "kargoda"
        },
        "istemcinin_ekledigi": {
          "tekillik_anahtari": "8f2c1b90-5a3d-4c77-9f61-0a2e4d6b8c11"
        }
      },
      "yanit": {
        "durum": "tamam",
        "uygulandi": false,
        "aciklama": "Bu tekillik anahtarı daha önce işlendi; kayıt yeniden güncellenmedi.",
        "siparis_durumu": "kargoda"
      }
    }
  5. 05

    Hata sözleşmesini tanımla

    Hata; kod, kısa açıklama, düzeltilecek alan adı ve yeniden denenebilirlik bayrağı olarak dönsün — yığın izi modele hiçbir yön vermez.

    Hata yanıtı, modelin bir sonraki turda ne yapacağını belirleyen en önemli metindir. "Bir hata oluştu" yazan bir araç modele tek bir seçenek bırakır: aynı çağrıyı tekrarlamak. Hata sözleşmesi bu yüzden başarı sözleşmesi kadar tasarlanmalı ve her hata sınıfı için beklenen model davranışı önceden yazılmalı.

    Hata sınıfıYanıtta ne dönmeliBeklenen model davranışı
    Geçersiz parametreReddedilen alan ve kabul edilen değerlerAlanı düzeltip bir kez daha dener
    Kayıt bulunamadıBoş sonuç ve hangi arama aracının kullanılacağıArama aracına geçer
    Yetki yokKısa gerekçe, yeniden denenebilir: hayırDenemez, devreder
    Geçici hataYeniden denenebilir: evet, önerilen beklemeİstemci katmanı yeniden dener
    Ön koşul sağlanmadıÖnce yapılması gereken adım ve aracıO adımı çağırıp geri döner
    Sözleşme yalnızca biçimi değil, hatanın modele önereceği hamleyi de tanımlar. "yeniden_denenebilir" bayrağı tek bir soruyu yanıtlar: aynı çağrı hiç değiştirilmeden tekrarlanabilir mi? Geçici hatada evet, geçersiz parametrede hayır — parametre hatası çağrıyı tekrarlayarak değil, reddedilen alanı düzelterek çözülür.
    json
    {
      "durum": "hata",
      "kod": "GECERSIZ_PARAMETRE",
      "alan": "yeni_durum",
      "mesaj": "Kabul edilen değerler: hazirlaniyor, kargoda, teslim, iptal.",
      "yeniden_denenebilir": false
    }
  6. 06

    Çıktıyı modele göre boyutlandır

    Araç yalnızca bir sonraki kararın gerektirdiği alanları döndürsün; listelerde toplam sayı ve sürdürme imleci ayrı alanlarda dönsün, gövde kırpılsın.

    Araç çıktısı bağlamın en hızlı büyüyen parçası ve çoğu zaman en az okunanıdır. Ham yanıtı olduğu gibi döndürmek iki maliyet üretir: bağlam dolar ve karar için gereken alan kalabalığın içinde kaybolur. Çıktı tasarımı, girdi şeması kadar bir sözleşme meselesidir.

    • Yalnızca bir sonraki kararın gerektirdiği alanları döndürün; "ileride lazım olur" diye alan taşımayın.
    • Liste dönen araçlarda sayfa boyutunu aracın kendisi sınırlasın; toplam sayı ve sürdürme imleci ayrı alanlarda dönsün.
    • Uzun metinleri kırpın ve kırpıldığını açıkça belirtin; sessiz kırpma modeli yanlış sonuca götürür.
    • Alan adlarını sabit tutun; her sürümde değişen alan adı hem istemi hem değerlendirmeyi bozar.
  7. 07

    Kümeyi MCP sunucusu olarak yayımla

    Aynı araçlar birden çok istemciden kullanılacaksa MCP sunucusu yazın: araç listesi, şemalar ve çağrı tek protokolden konuşulur, istemci başına yeniden yazılmaz.

    MCP (Model Context Protocol), araç ve kaynak yüzeylerini istemciden bağımsız bir protokole taşır: sunucu araçlarını ve şemalarını listeler, istemci bu listeyi alıp modele sunar. Kazanç, aynı araç kümesini her istemcide yeniden yazmaktan kurtulmak; bedeli, ayrı bir süreç ve ayrı bir yetki yüzeyi.

    1. 1Sunucu iskeletini kur

      Araçları tek bir kayıt noktasında toplayın; her araç ad, açıklama ve girdi şemasıyla kaydedilsin.

    2. 2Şemayı tek kaynaktan üret

      Girdi şemasını koddaki tip tanımından üretin; elle yazılan ikinci bir kopya kaçınılmaz olarak sapar.

    3. 3Yetkiyi sunucuda uygula

      Kimlik ve kapsam denetimi araç gövdesinde çalışsın; istemciden gelen hiçbir alan yetki kaynağı sayılmasın.

    4. 4İstemciye bağla ve listelemeyi sına

      Bağladıktan sonra araç listesini ve bir örnek çağrıyı istemci üzerinden deneyin; şema hataları burada görünür.

    5. 5Sürüm politikasını yaz

      Hangi sürümün hangi araçları taşıdığı ve geriye dönük uyumun ne kadar süreceği yazılı olsun.

    Ne zaman değmez: tek bir uygulamanın kendi içindeki üç aracı protokole taşımak, kazanç sağlamadan bir süreç, bir taşıma katmanı ve bir yetki sınırı ekler. Ölçüt araç sayısı değil istemci sayısıdır — küme ikinci bir istemci tarafından kullanılacaksa protokol kendini ödetir.

  8. 08

    Sözleşmeyi sözleşme testiyle kilitle

    Her araç için şemaya uyan ve uymayan girdilerle test yazın; şema değiştiğinde sürümü artırın ve eski sürümü bir süre birlikte çalıştırın.

    Araç şeması bir arayüz sözleşmesidir ve sessizce değiştiğinde kırılan şey modeldir. Şema değişikliğini iç bir kod değişikliği gibi değil, yayımlanmış bir API değişikliği gibi ele alın: kırıcı değişiklik sürüm açar.

    • Her araç için şemaya uyan ve uymayan birer girdi testi yazın; uymayan girdi net bir hata kodu döndürmeli.
    • Yazma araçları için aynı tekillik anahtarıyla iki çağrı testi yazın; ikinci çağrı yeni kayıt açmamalı.
    • Alan silmek veya enum daraltmak kırıcı değişikliktir; yeni sürüm açın, eskisini bir süre birlikte çalıştırın.
    • Açıklama metnini de sürümleyin; açıklama değişikliği model davranışını şema değişikliği kadar etkiler.

    Doğrulama adımı: sahte bir istemciyle araç listesini çekin, her aracı en az bir geçerli ve bir geçersiz girdiyle çağırın, dönen hata kodunu kontrol edin. Bu testin kırmızıya düştüğü gün, ajanın da bozulacağı gündür.

SIK DÜŞÜLEN TUZAKLAR

  • Tek aracı kip parametresiyle şişirmek

    Seçim hatası ortadan kalkmaz, parametre hatasına dönüşür. Üstelik yetki ve ölçüm araç adına bağlı olduğu için ikisi de körelir.

  • Şemayı güvenlik sınırı sanmak

    Model şemayı görür ama uymak zorunda değildir; geçersiz çağrı yine gelir. Denetim araç gövdesinde, sunucu tarafında çalışmalı.

  • Hata metnini insana yazmak

    Yığın izi ve serbest metin model için yön içermez. Modelin düzeltebilmesi için hangi alanın neden reddedildiği alan olarak dönmeli.

  • Ham yanıtı olduğu gibi döndürmek

    Bağlam dolar, alan adları sürümden sürüme kayar ve karar için gereken tek alan kalabalığın içinde kaybolur.

  • Tek istemci için MCP kurmak

    Ayrı bir süreç, ayrı bir taşıma katmanı ve ayrı bir yetki yüzeyi eklenir; karşılığında hiçbir şey kazanılmaz.

KONTROL LİSTESİ

  • Her araç tek bir fiili karşılıyor; kip parametresiyle dallanan araç yok
  • Sabit değer alan her alan enum, her kimlik desen kısıtı taşıyor
  • Her açıklamada "ne zaman kullanılmaz" satırı var
  • Yan etkili araçlar tekillik anahtarı alıyor ve ikinci çağrı yeni kayıt açmıyor
  • Hata yanıtı kod, alan adı ve yeniden denenebilirlik bayrağı taşıyor
  • Araç çıktısı sayfalanıyor, kırpılıyor ve kırpma açıkça bildiriliyor
  • Yetki denetimi şemada değil araç gövdesinde uygulanıyor
  • Sözleşme testleri geçiyor ve kırıcı şema değişikliği sürüme bağlı

Maddelerin tamamı işaretlenmeden kurulum üretime alınmamalı.

Sık sorulan sorular

Kaç tane araç tanımlamalıyım?

Sayı hedefi koymak yerine iki kurala bakın: her araç tek bir fiili karşılasın ve hiçbir iki aracın açıklaması "hangisi ne zaman" sorusunu belirsiz bırakmasın. Küme büyüdükçe seçim hatası da büyüdüğü için, eklenen her aracın gerçekten kullanıldığını izden doğrulayın; kullanılmayan araç yalnızca bağlam ve karışıklık maliyetidir.

MCP kullanmak zorunda mıyım?

Hayır. MCP, araç yüzeyini istemciden bağımsız kılan bir protokol; kazancı aynı araçları her istemcide yeniden yazmaktan kurtulmak. Tek bir uygulamanın kendi içindeki araçlar için doğrudan çağrı daha az hareketli parça demektir. Ölçüt istemci sayısıdır, araç sayısı değil.

Model yanlış aracı seçiyor, ne yapmalıyım?

Neredeyse her zaman iki nedenden biri: iki aracın kapsamı örtüşüyordur ya da açıklamalar "ne zaman kullanılmaz" satırını taşımıyordur. Önce örtüşen araçları birleştirin veya kapsamlarını daraltın, sonra açıklamalara seçim ölçütünü yazın. İstem düzeltmesi bu ikisinden sonra gelir.

Araç açıklaması ne kadar uzun olmalı?

Kararı vermeye yetecek kadar: ne yaptığı, ne zaman seçileceği, ne zaman seçilmeyeceği ve varsa ön koşulu. Açıklama her turda bağlama giriyor, bu yüzden uzun bir kullanım kılavuzu hem yer hem dikkat kaybıdır. Ayrıntı dokümantasyonda kalsın, seçim ölçütü şemada dursun.

Kaynaklar

  1. 01Model Context Protocol belgeleri — Model Context Protocol · Dokümantasyon
  2. 02JSON Schema belirtimi — JSON Schema · Dokümantasyon
  3. 03Sinaptik Research — araç sözleşmesi notları — Sinaptik Lab · Teknik rapor

BUILD

Bu rehberi kurumunuzda uygulayalım mı?

Aynı mimariyi kendi verinizle kurmak için discovery oturumundan üretime kadar birlikte ilerliyoruz.