Client implementasyonu
Implementing a client
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:

- Claude’a göndermek için mevcut tool’ların listesini almak
- 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:
- Kodumuz mevcut tool’ları almak için client’ı kullanır
- Bu tool’lar kullanıcının sorusuyla birlikte Claude’a gönderilir
- Claude
read_doc_contentstool’unu kullanmaya karar verir - Kodumuz, o tool’u çalıştırmak için client’ı kullanır
- 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()vecall_tool() - Session metodları
asyncolduğu içinawaitile ç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