Phase 11: LLM Engineering

Model Konekst Protokolü (MCP)

MCP, bir AI sunucusuna araçları, kaynakları ve istekleri keşfetmek ve çağrıştırmak için bir protokol verir. 2026-07-28 baskısı bu protokolü devletsiz hale getirir: yetenek ve sürüm bağlamı her taleple seyahat eder, bağlantı bağlı bir el sıkışmasında değil.

Type: Build

Languages: Python

Prerequisites: Phase 11 · 09 (Function Calling), Phase 11 · 03 (Structured Outputs)

Time: ~75 minutes

Öğrenme Hedefleri

  • Bir MCP barındırma, istemci, sunucu, nakliye ve sunucu primitif ayırt edin.
  • MCP 2026-07-28 tarafından istenen metadata ile JSON-RPC talebi oluşturun.
  • Kullanımserver/discoverVersiyonları, kimliği ve özelliklerini incelemek için.
  • Araçlardan, kaynaklardan ve isteklerden yazılmış ve önbelleğe anlaşılan sonuçları geri gönderin.
  • Modern devletsiz MCP'nin el sıkışması çağındaki sunucularla nasıl etkileşime girdiğini açıklayın.
  • Bir sunucu için güvenli durum, ulaşım ve onay sınırlarını seçin.

Sorun

Uygulama bir veritabanı sorgu, bir takvim işlevi ve bir dosya okuyucuya ihtiyaç duyar. Paylaşılan bir protokol olmadan, her AI sunucusu aynı özellikler için özel keşif, çağrı, hata, nakliye ve yetki yapıştırıcıya ihtiyaç duyar.

MCP, bu entegrasyon matrisini azaltır. Bir sunucu standart bir JSON-RPC yüzeyini yayınlar. Uyumlu bir istemci yüzeyi keşfedebilir, bir model veya kullanıcıya sunar, çağrıştırır ve sonuçları sunucu özel bir adaptör olmadan yorumlayabilir.

MCP iletişim standartlaştırır. Model hangi aracı çağırması gerektiğini, güvenilmeyen içeriği güvenli hale getirmesi veya devletsiz bir talebi dayanıklı bir uygulama durumuna dönüştürmesi gerektiğini belirlemez. Ev sahibi ve sunucu bu kararları hala sahip.

Anlaşım

!MCP host, stateless request, and server primitives

Üç sunucu ilkesi

  1. ToolsHer araç bir isim, açıklama, JSON Schema giriş ve işlemci vardır.
  2. ResourcesURI adresli ve müşterinin okuyabileceği içerikler.
  3. Promptsbir host tarafından kullanıcının açıklayabileceği tekrar kullanılabilir şablonlardır.

Host, AI uygulamasıdır. Bu host içindeki bir MCP istemcisi bir sunucuyla konuşur.

İnsansızlık talepleri el sıkışının yerini alır

MCP 2026-07-28 kaldırılıyor initializeve notifications/initializedAyrıca protokol düzeyinde oturumları da kaldırır.params._meta- ...

json{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/list",
  "params": {
    "_meta": {
      "io.modelcontextprotocol/protocolVersion": "2026-07-28",
      "io.modelcontextprotocol/clientCapabilities": {},
      "io.modelcontextprotocol/clientInfo": {
        "name": "lesson-client",
        "version": "1.0.0"
      }
    }
  }
}

Protokol versiyonu ve istemci yetenekleri gereklidir._meta, eksik olan gerekli alan veya yanlış tipi olan gerekli alan yanlış biçimlendirilmiş ve geçersiz Parameler gönderilmiştir (-32602). Server tarafından desteklenmeyen iyi oluşan bir sürüm dizisi gönderir UnsupportedProtocolVersionError(-32022). Bir sunucu, geçerli bir talebi daha önce yapılan müzakere kayıtlarını geri kazanmadan işleyebilir.

İstemsizlik, bir başvuru hiçbir zaman durumunu koruyabilme anlamına gelmez.Mcp-Session-Id. Eğer bir iş akışı süreklilik gerektirirse, sunucu bir açık olmayan eldiven oluşturur ve müşteri daha sonraki aramalarda sıradan bir araç argümanı olarak bu eldivenini geçer.

Bulma ve sürüm seçimi

Her modern sunucu uygulaması server/discover. Sonuç desteklenen sürümleri , özellikleri ve sunucu kimliğini reklam eder:

json{
  "jsonrpc": "2.0",
  "id": 1,
  "result": {
    "resultType": "complete",
    "supportedVersions": ["2026-07-28"],
    "capabilities": {
      "tools": {},
      "resources": {},
      "prompts": {}
    },
    "ttlMs": 3600000,
    "cacheScope": "public",
    "_meta": {
      "io.modelcontextprotocol/serverInfo": {
        "name": "demo-server",
        "version": "1.0.0"
      }
    }
  }
}

Bir istemci doğrudan başka bir yöntemi arayabilir ve bir sürüm hatasını ele alabilir, ancak keşif yetenek gösterisini ve sürüm seçimini açık yapar. Desteklenmeyen bir sürüm geri gelir UnsupportedProtocolVersionErrorKodla -32022Verilerinde supported, bir dizi sunucu revizyonu ve requested, reddedilen düzenleme.

Stüdyoda, ikili çağda çalışan bir müşteri ile konuşuyor.server/discoverBir keşif sonucu veya tanınan modern bir hata .UnsupportedProtocolVersionErrorModern olarak tanınmayan herhangi bir hata veya zamanlama 2025-11-25'e geri dönmenizi sağlar.initializeGeçmiş davranışlar uyumluluk kodu, modern standart değil.

Sonuçlar açıkça belirtildi .

2026-07-28 sonuçları her çekirdeğin üzerinderesultType- ...

  • completeOperasyon bitti demektir.
  • input_requiredBu da sunucuyu bir daha dönüşe ve dönüşe yönlendirme şekliyle yönlendirme gerektirir.tools/call- Evet .resources/readveyaprompts/get- Evet .

Müşteriler , eklenmiş bir sonuca bakmalıdır .resultTypeTam olarak.

Sunucular io.modelcontextprotocol/serverInfoHer sonuçta._metaBu kimlik kendiliğinden bildirilmektedir ve güvenlik kararları için değil görüntüleme, kayıt ve hata işlemleri için kullanılır.

Liste ve okuma sonuçları da taşınır ttlMsve cacheScope- Deterministik birtools/listsipariş eklenmiş bir tazelik ipucu müşterilerin keşifleri güvenli bir şekilde önbelleğe almalarını sağlar ve hızlı önbelleğin istikrarını artırır. cacheScope: publicPaylaşılan önbelleğe izin verir; privateBu, tekrar kullanımı çağrı bağlamına sınırlıyor.

Kablo biçimi ve nakliye

MCP, stdio veya Streamable HTTP üzerinden JSON-RPC 2.0 kullanır.

  • Bir talebinin jsonrpc- Evet .id- Evet .methodveparams- Evet .
  • Bir cevap eşleşir .idVe ya daresultveya error- Evet .
  • Bir bildirim yok .idVe hiçbir tepki beklemiyor.

Modern Streamable HTTP, POST'u kabul eden bir uç noktasını ortaya çıkarır. Her JSON-RPC mesajı kendi POST'unu alır. Bir istek POST, bir JSON nesnesi veya son cevabıyla biten bir istek-scoped Server-Sent Events akışını alır. Kabul edilen bir bildirim POST, hiçbir cevap vücudu olmayan HTTP 202 alır; bu temel revizyondan Streamable HTTP üzerinden hiçbir istemci-sözümci bildirim tanımlanmaz.

Standalone MCP GET akışı, DELETE seans son noktası yok.Mcp-Session-IdveyaLast-Event-ID2026-07-28'de tekrar oynayın.subscriptions/listenPOST, SSE akışı olarak açık bir cevap olarak kalır.

Sunucu tarafından başlatılan istekler olmadan istemci girişleri

Daha eski değişiklikler , sunucuya gibi istekler göndermesine izin verir .sampling/createMessage- Evet .roots/listveyaelicitation/createBir akış üzerinde. Şu anki protokol bunun yerine Multi Round-Trip Requests kullanıyor.resultType: input_requireden az bir tane ile inputRequestsveya requestState. Müşteri istedikleri herhangi bir giriş toplar, yeni bir JSON-RPC kimliği ve ilgili inputResponses, ve tam olarak yankılanır .requestStateEğer bir tane sağlanmamışsainputRequestsVarken tekrar denemeyi bırakır.inputResponses- Evet .

Kökler, Örnekleme ve Kayıtlama işlevsel kalır ancak eski hale gelmiştir, bu nedenle yeni uygulamalar bunları benimsememeli.inputRequests, asla bağımsız sunucu-klient JSON-RPC istekleri olarak. Açık dosya veya dizin parametrelerini, kaynak URIs'lerini, sunucu yapılandırmasını ve doğrudan model sağlayıcı entegrasyonu tercih edin. stderr'yi stdio teşhisleri ve OpenTelemetry'yi üretim telemetrisi için kullanın.

Yapın

Adım 1: Bir sunucu yüzeyini kaydet

Başvuru sözleşmesi değiştirilmesine rağmen kayıt basit kalır:

pythonserver = MCPServer("demo-server")

@server.tool(
    "add",
    "Add two integers.",
    {
        "type": "object",
        "properties": {
            "a": {"type": "integer"},
            "b": {"type": "integer"}
        },
        "required": ["a", "b"]
    }
)
def add(a: int, b: int) -> dict:
    return {"sum": a + b}

code/main.pyBu program, bir SDK'ye protokolü delegasyon etmek yerine her zarfı görebilmeniz için standart kütüphaneden kasıtlı olarak kullanır.

Adım 2: Her talebe metadata ekleyin

pythondef request(method, params=None):
    body_params = dict(params or {})
    body_params["_meta"] = {
        "io.modelcontextprotocol/protocolVersion": "2026-07-28",
        "io.modelcontextprotocol/clientCapabilities": {},
        "io.modelcontextprotocol/clientInfo": {
            "name": "demo-client",
            "version": "1.0.0"
        }
    }
    return {
        "jsonrpc": "2.0",
        "id": 1,
        "method": method,
        "params": body_params
    }

Bu metadataları yalnızca bir bağlantı nesnesinde saklama. Sunucu her istekle onaylar.

Adım 3: listelenmeden önce seçeneği keşfet

Arama .server/discover, desteklenen bir sürüm seçin, sonra arın tools/list- Bir direkt .tools/listEğer versiyonu zaten biliyorsanız ve bunu yapabiliyorsanız geçerlidir.-32022- Evet .

Demo , araç listelerini isim sırasıyla gönderir ve ekler ttlMs- Evet .cacheScope- Evet .resultTypeBir araç çağrısı, mevcut durumdan bağlı olabileceği için, tamamlanmış, önbelleğe kaydedilebilir olmayan bir sonuç gönderir.

Adım 4: Aynı istekleri HTTP'ye haritasın

Uzaktan bir ...tools/callPOST, JSON-RPC bedenini yansıtan başlıkları içerir:

httpPOST /mcp HTTP/1.1
Content-Type: application/json
Accept: application/json, text/event-stream
MCP-Protocol-Version: 2026-07-28
Mcp-Method: tools/call
Mcp-Name: add
  • Evet .MCP-Protocol-VersionBaşlık , _meta- Evet .Mcp-Methodher JSON-RPC talebi için gerekli ve eşleşmelidir method- Evet .Mcp-NameSadece tools/call- Evet .resources/readveprompts/get, tool adı, kaynak URI veya prompt adı ile eşleşmesi gereken.HeaderMismatchkod-32020- Evet .

Adım 5: Protokol durumundan dışarıdaki güvenlik güçlendirilmesi

  • Her HTTP istek için yetki ve izleyicileri doğrulayın.
  • Yerel sunucuları yerel sunucu ile bağlayın ve doğrulayın OriginAkışlı HTTP'de.
  • ile mutasyon aletlerini işaretleyindestructiveHint: trueve ev sahibi onayını gerektirir.
  • Geçmiş köklere bağlı olmaksızın açıkça dizini ve dosya kapsamını geçin.
  • Kaynakları ve araç çıkışını güvenilmeyen veriler olarak değerlendirin.
  • Stdout'u stdio altında JSON-RPC için ayırın; stderr'e teşhis yazın.

Kullan

Dersleri dizininden çalıştır:

bashpython3 code/main.py
cd code
python3 -m unittest discover tests -v

İlk satırda demo-serverProtokolde2026-07-28- Sonra kontrol et .MCPClient.requestBu yeniden inşa ediliyor._metaBir talebinden metadataları çıkar ve sunucu tarafından reddedildiğini gözlemle.

Gönder

outputs/skill-mcp-server-designer.mdBir alanı devletsiz bir MCP tasarımı haline getirir. Kabul kapısı bir keşif sonucu, talep başına metadata politikası, belirleyici önbelleğe farkındalık listesini, açık durum eleştiri, ulaşım başlıklarını, yetki ve onay kurallarını gerektirir.

MCP Derin Dalışını Sürdürün

Bu ders size protokol modeli verir. 13 aşama dört üretim sınırını ayrı yapı ve doğrulama derslerine dönüştürür:

  1. MCP Tool Contracts and ContentKapalı giriş şemeleri, yapılandırılmış içerik, yönlendirme metadata, netsiz sayfalama, tamamlama yetkisi ve protokol ve araç alanı hataları arasındaki farkı kapsar.
  2. MCP Reliability, Cancellation, and Flow ControlBaşvuru iptalini, kalıcı görev iptalini, tarihleri, boşluğu, geri baskıyı, vekil tamponu ve yeniden bağlama davranışını kapsar.
  3. MCP Registry Supply Chain, Admission, Drift, and RollbackAd alanı kanıtını, eserlerin kökenini, değişmez pinleri, canlı sürüklemeyi, kayıt durumunu, kabul kanıtı ve geri dönüşü kapsar.
  4. MCP Conformance EngineeringAltın ve negatif tel transkriptleri, sıkı sürüm dönemleri, SDK farklılıkları, vekillik kanıtları, redaksiyon, sağlık kapıları ve serbest bırakma geri dönüşü kapsar.

Bu yöntemler, bir ekip veya güven sınırını geçtikleri sırada takip edilir.

Egzersizler

  1. Bir eklesubtractaraç ve onaytools/listalfabetik olarak sıralanmış.
  2. Protokol sürüm anahtarını kaldır ve geçersiz Paramları doğrulay (-32602Sonra iyi şekillenen ama desteklenmeyen versiyonu gönderin.2025-11-25, doğrulayın -32022, onaylayın .requestedBu incelemeyi tekrarlıyor ve seçmelisiniz.supported- Evet .
  3. Sunucu-Mint ekle draftIdBu işlemin neden bir protokol seansı yerine bir uygulama durumu olduğunu açıklayın.
  4. Geri dön .input_requiredKullanıcı onayına ihtiyaç duyan bir araçtan.inputResponsesGiriş ve tam olarakrequestStateBir sunucu-klient JSON-RPC talebi icat etmek yerine.
  5. İki çağda bir stüdyo istemcisini çizin. Bir sonucu veya tanınan modern hatayı modern olarak değerlendirin ve geri dönüşe izin verin.initializeSadece tanınmamış bir hata veya bir süreliğine.

Anahtar Terimler

TermWhat people sayWhat it actually means
MCP"Tool protocol for LLMs"JSON-RPC protocol for server discovery, tools, resources, prompts, and extensions
Host"The AI app"Owns the model and UI and mounts one or more MCP clients
Client"The connector"Speaks MCP to one server on behalf of a host
Stateless MCP"No session"Every request carries version and capabilities; no protocol state is keyed by a connection
server/discover"Capability probe"Required server method advertising versions, capabilities, and identity
resultType"Result state"Marks a result as complete or input_required
State handle"Workflow id"Server-minted application identifier passed as an ordinary argument
Streamable HTTP"Remote transport"One POST endpoint with JSON or request-scoped SSE responses
MRTR"Ask and retry"Input request embedded in a result, followed by a retry of the original operation

Daha Fazla Okumak

This free lesson is part of the AI Engineering from Scratch curriculum. Read the full explanation, run the lesson code, and verify the result in the interactive reader or from the repository source.

Browse the complete course catalog or open this lesson on GitHub.