Modül 8 · Model Context Protocol · ⏱ 7 dakika

Client implementasyonu

Implementing a client

Orijinal İngilizce video — Anthropic Academy / JWPlayer. Aşağıdaki Türkçe metin dersi birebir özetler.

Bu modül için tahmini süre: 7 dakika

Genel bakış

MCP server’ımız çalıştığına göre client tarafını inşa etme zamanı. Client, uygulamanın MCP server ile iletişim kurmasını ve onun işlevselliğine erişmesini sağlar. Bu derste list_tools ve call_tool metodlarını içeren minimal bir client sınıfı yazacağız.

MCP server’ımız çalıştığına göre client tarafını inşa etme zamanı. Client, uygulamanın MCP server ile iletişim kurmasını ve onun işlevselliğine erişmesini sağlayan parçadır.

Client mimarisini anlamak

Çoğu gerçek dünya projesinde bir MCP client VEYA bir MCP server implement edersiniz — ikisini birden değil. Bu projede, birlikte nasıl çalıştıklarını görmeniz için ikisini de inşa ediyoruz.

MCP client iki ana bileşenden oluşur:

  • MCP Client — Session’ı kullanmayı kolaylaştırmak için oluşturduğumuz özel bir sınıf
  • Client Session — Server’a gerçek bağlantı (MCP Python SDK’nın parçası)

Client session, işimiz bittiğinde uygun resource cleanup gerektirir. Bu yüzden onu kendi MCP Client sınıfımıza sarıyoruz — tüm temizlik işini otomatik olarak yapsın diye.

Client uygulamamıza nasıl uyuyor

Uygulama akışımızı hatırlıyor musunuz? CLI kodumuzun MCP server ile iki ana şey yapması gerekir:

  1. Claude’a göndermek için mevcut tool’ların listesini almak
  2. Claude istediğinde tool’ları çalıştırmak

MCP client, bu yetenekleri uygulama kodumuzun kullanabileceği basit metod çağrıları üzerinden sunar.

Çekirdek metodları implement etmek

Client’ımızda iki temel metodu implement etmemiz gerekiyor: list_tools() ve call_tool().

List tools metodu

Bu metod, server’dan tüm mevcut tool’ları alır:

async def list_tools(self) -> list[types.Tool]:
    result = await self.session().list_tools()
    return result.tools

Basit ve anlaşılır: session’ımıza erişir (server’a bağlantı), yerleşik list_tools() fonksiyonunu çağırır ve sonuçtan tool’ları döner.

Call tool metodu

Bu metod, server’da belirli bir tool’u çalıştırır:

async def call_tool(
    self, tool_name: str, tool_input: dict
) -> types.CallToolResult | None:
    return await self.session().call_tool(tool_name, tool_input)

Tool adını ve input parametrelerini (Claude tarafından sağlanan) server’a iletir ve sonucu döner.

Client’ı test etmek

İmplementasyonumuzu test etmek için client’ı doğrudan çalıştırabiliriz. Dosya, MCP server’ımıza bağlanıp metodlarımızı çağıran bir test harness içerir:

async with MCPClient(
    command="uv", args=["run", "mcp_server.py"]
) as client:
    result = await client.list_tools()
    print(result)

Bu testi çalıştırdığımızda, daha önce oluşturduğumuz read_doc_contents ve edit_document tool’ları dahil tool tanımlarımızın yazdırıldığını görmeliyiz.

Hepsini bir araya getirmek

Client’ımız tool’ları listeleyip çağırabildiğine göre tam akışı test edebiliriz. Ana uygulamamızı çalıştırıp Claude’a bir doküman hakkında soru sorduğumuzda:

  1. Kodumuz mevcut tool’ları almak için client’ı kullanır
  2. Bu tool’lar kullanıcının sorusuyla birlikte Claude’a gönderilir
  3. Claude read_doc_contents tool’unu kullanmaya karar verir
  4. Kodumuz, o tool’u çalıştırmak için client’ı kullanır
  5. Sonuç Claude’a geri gönderilir, Claude da kullanıcıya yanıt verir

Örneğin “report.pdf dokümanının içeriği nedir?” diye sormak, Claude’un doküman okuma tool’umuzu kullanmasını tetikler ve server’ımızda kurduğumuz 20 metrelik kondansatör kulesi dokümanı hakkında bilgi alırız.

Client, uygulama mantığımız ile MCP server arasındaki köprü görevi görür; alt seviye bağlantı detaylarıyla uğraşmadan server işlevselliğine erişmeyi kolaylaştırır.

Temel çıkarımlar

  • MCP Client, Client Session’ı saran ve cleanup’ı yöneten özel sınıftır
  • İki temel metod yeterlidir: list_tools() ve call_tool()
  • Session metodları async olduğu için await ile çağrılır
  • Test harness ile client’ı server’a bağlamadan önce izole doğrulayabilirsiniz
  • Client, alt seviye protokol detaylarını uygulama mantığından soyutlar