MCP Connect Oluşturma: Sunucular için MCP iOS Uygulaması
tech
tech
ios
swift
mcp

MCP Connect Oluşturma: Sunucular için MCP iOS Uygulaması

MCP Connect’i, sunuculara bağlanmak, araçlara göz atmak ve yolda AI ile sohbet etmek için yerel bir MCP iOS uygulaması olarak geliştirdim.

Uygar DuzgunUUygar Duzgun
Mar 22, 2026
Updated Mar 23, 2026
10 min read

What if your iPhone could talk to your own MCP servers anywhere? That is exactly what I built with MCP iOS app MCP Connect, a native mobile client for the Model Context Protocol. In this article, I explain how I designed, shipped, and deployed it, and why this approach matters if you want real AI tools on mobile.

MCP Connect nedir?

MCP Connect, MCP sunucularına HTTP üzerinden bağlanmak, araçlara göz atmak ve yolda AI ile sohbet etmek için benim MCP iOS uygulamam. Bunu Swift ve SwiftUI ile geliştirdim; böylece iPhone’da yerel, hızlı ve kararlı hissettiriyor.

Uygulama şunları yapmanıza olanak tanır:

HTTP üzerinden herhangi bir MCP sunucusuna bağlanma
her sunucuda bulunan araçlara göz atma
araçlarınız üzerinden AI ile sohbet etme
sunucu sağlığını ve gecikmeyi izleme
birden fazla sunucu bağlantısını yönetme
İngilizce ile İsveççe arasında geçiş yapma

Uygulamanın bir “wrapper” gibi değil, premium hissettirmesini istedim. Bu yüzden karanlık sinema tarzında, glassmorphism, yay (spring) animasyonları ve dokunsal geri bildirim (haptic feedback) ile tasarladım. Bu tasarım tercihi önemli; çünkü mobil AI araçlarının hızlı ve net hissettirmesi gerekir—özellikle kullanıcılar sohbetler ile sunucular arasında geçiş yaptığında.

Neden bir MCP iOS uygulaması yaptım?

Bu MCP iOS uygulamasını kendi araçlarıma telefonumdan doğrudan erişmek istediğim için yaptım. Masaüstüyle sınırlı iş akışları, masanızdan uzaktayken sizi yavaşlatır. iPhone’da, tarayıcıda ve Mac’te zaten sahip olduğum aynı kontrolü istedim.

Gothenburg’da ürünler geliştirirken edindiğim deneyime göre, en iyi mobil uygulamalar acı veren ve dar bir problemi çok iyi çözer. MCP Connect benim için bunu yapıyor. MCP sunucularıma güvenli erişim sağlıyor ve bunun için başka karmaşık bir katman eklemiyor.

Bu aynı zamanda Model Context Protocol’ün (MCP) kendi yönüyle de uyumlu. Anthropic’in MCP spesifikasyonu, temiz bir istemci-sunucu modeline dayanıyor; bu da yapılandırılmış araç erişimi gereken mobil uygulamalar için güçlü bir uyum. Uygulamayı bu fikre paralel olacak şekilde geliştirdim; böylece protokol geliştikçe uygulama sürdürülebilir kalıyor.

Çözdüğüm kullanıcı problemi

Çoğu AI aracı hâlâ masaüstünde oturuyormuş varsayımıyla tasarlanıyor. Seyahat ederken bir sunucuyu kontrol etmeniz, bir aracı tetiklemeniz ya da bir sonucu incelemeniz gerektiğinde bu durum bozuluyor. MCP Connect ile bu sürtünmeyi azalttım.

Sonuç basit: Uygulamayı açıyorum, bir sunucu seçiyorum ve araçlarımla saniyeler içinde etkileşime geçiyorum. MCP iOS uygulaması fikrinin özü bu hız.

MCP iOS uygulamasının arkasındaki teknoloji yığını

Yığını odaklı ve modern tuttum. Şişkin bir mimari ya da gereksiz bağımlılıklar istemedim.

KatmanTeknoloji
------
PlatformiOS 17+, Swift 6, SwiftUI
MimariMVVM + Coordinators
BackendSupabase (Auth, PostgreSQL, Realtime)
MCP TransportJSON-RPC over HTTP
KalıcılıkSwiftData
IAPStoreKit 2
i18nString Catalogs (EN + SV)
DağıtımXcode + XcodeGen

Bu yığın, MCP iOS uygulaması için sağlam bir temel sağladı. SwiftUI arayüzü iyi yönetti, SwiftData offline-first depolamayı destekledi ve Supabase ek bir backend yükü olmadan kimlik doğrulama ve senkronizasyon sağladı.

Ayrıca gizli bilgiler için Keychain ve abonelikler için StoreKit 2 gibi tanıdık üretim araçlarını kullandım. Böylece uygulama, altyapı gürültüsü yerine ürün kalitesine odaklı kaldı.

Adım 1: Önce sistemi tasarladım

Her zaman tasarım sistemiyle başlarım; çünkü sonrasında zaman kazandırır. Bu projede, özellik kodunu yazmadan önce token’ları ve paylaşılan bileşenleri oluşturdum.

Dark Cinema paleti derin siyahlar, hafif yükseltilmiş yüzeyler ve indigo bir vurgu (accent) kullanıyor. Her yüzey, `.ultraThinMaterial` ve ince bir sınır (border) ile glassmorphism uyguluyor; böylece UI katmanlı hissettiriyor ama ağırlaşmıyor.

Sistem şunları içeriyor:

Anlamsal renkler için ColorTokens
UI ve kod stilleri için TypographyTokens
4/8 ritmine göre inşa edilmiş SpacingTokens
yeniden kullanılabilir bir GlassMorphism modifier’ı
tutarlı hareket (motion) ile yay animasyonları
her etkileşim için dokunsal geri bildirim

`GlassCard`, `AccentButton`, `StatusBadge`, `ShimmerLoader` ve `GlassTextField` gibi yeniden kullanılabilir bileşenler oluşturdum. Bu sayede MCP iOS uygulaması daha kolay ölçeklendi; çünkü yeni ekranlar aynı görsel dili devraldı.

Adım 2: Modelleri kalıcılıktan ayırdım

Domain modellerini SwiftData kalıcılık modellerinden ayırdım. Bu, iş mantığını temiz ve test edilebilir tuttu.

Ana modeller şunlar:

Bağlantı ayarları için `MCPServer`
Her sohbet oturumu için `Conversation`
Kullanıcı ve asistan mesajları için `Message`
Araç girdisi, çıktısı ve zamanlaması için `ToolCall`

Bu ayrım, kulağa geldiğinden daha önemliydi. Depolama detaylarını uygulama mantığını yeniden yazmadan değiştirmeme alan sağladı. Bir MCP iOS uygulaması için bu tür bir sınır, gelecekteki özellikleri yayınlamayı kolaylaştırır.

Güvenlik kararı: API anahtarları için yalnızca Keychain

Bozmayacağım tek bir kural belirledim: API anahtarları asla Supabase’e dokunmayacak. Veritabanında yalnızca `apiKeyRef` saklıyorum; gerçek anahtar ise iOS Keychain’de yaşıyor.

Bu, veritabanı ihlalinin kimlik bilgilerini açığa çıkarmadığı anlamına geliyor. Taviz ise anahtarların cihazlar arasında otomatik senkronize olmaması. Kullanıcıların yeni telefonda yeniden girmesi gerekiyor; ancak bu birkaç saniye sürüyor ve ciddi bir güvenlik riskini ortadan kaldırıyor.

Adım 3: MCP istemcisini oluşturdum

İstemci JSON-RPC over HTTP kullanıyor; bu, MCP spesifikasyonundaki Streamable HTTP transport ile uyumlu. Her istek, JSON-RPC gövdesiyle birlikte standart bir HTTP POST olarak gönderiliyor.

Uygulama dört temel işlemi destekliyor:

Protokol sürümünü ve oturum kurulumunu müzakere etmek için `initialize`
Mevcut araçları keşfetmek için `tools/list`
Argümanlarla birlikte bir aracı çalıştırmak için `tools/call`
Gecikmeyi ölçmek ve sağlığı kontrol etmek için `ping`

Yetkilendirme token’larını istek zamanında Keychain’den yüklüyorum. Bu, MCP iOS uygulaması için güvenliği artırıyor ve sırların bellekte ihtiyaç olandan daha uzun süre tutulmasını engelliyor.

Bunu, istek akışı gerçek kullanımda kararlı hissedene kadar kendi sunucularım üzerinde test ettim. Sonuç, beklenenden öngörülebilir gecikme ve çok daha iyi bir mobil deneyim oldu.

Adım 4: Supabase’i bağladım

Kimlik doğrulama ve senkronizasyon için Supabase kullandım; çünkü üretime hızlı bir yol veriyor. Backend’de dört tablo var:

Tema ve dil ayarları için `user_profiles`
Kullanıcı başına sunucu konfigürasyonları için `mcp_servers`
Sohbet oturumları için `conversations`
Mesaj geçmişi ve araç verileri için `messages`

Her tabloda Row Level Security (RLS) var. Bu, kullanıcıların yalnızca kendi kayıtlarına erişebileceği anlamına geliyor. Ayrıca signup’tan sonra bir profilin otomatik oluşturulmasını sağlayan bir veritabanı tetikleyicisi (trigger) ekledim.

Auth, Apple ile Sign in ve email/password destekliyor. Bu, kullanıcıları tek bir giriş yöntemine zorlamadan temiz bir kayıt akışı sağladı. Bir MCP iOS uygulaması için bu esneklik benimsemeyi kolaylaştırır.

Adım 5: Ana özellikleri oluşturdum

Uygulamada üç temel yüzey var: sohbet, sunucu yönetimi ve ayarlar. Her birini telefonda deneyimin hızlı kalması için odaklı tuttum.

Sohbet arayüzü

Sohbet, bir durum makinesi (state machine) kullanıyor: `idle` → `sending` → `streaming` → `toolCalling` → `idle`. Araç çağrıları, araç adı, argümanlar, sonuç ve yürütme süresiyle birlikte genişletilebilir kartlar olarak satır içinde görünüyor.

Bu UI önemli; çünkü kullanıcıların AI’nın ne yaptığını güvenle anlamasına yardımcı oluyor. Tahmin etmek yerine her adımı görebiliyorlar.

Sunucu yönetimi

Kullanıcılar sunucu ekleyebilir, düzenleyebilir ve silebilir. URL doğrulaması, kaydırarak silme (swipe-to-delete) ve onay diyalogları ekledim; böylece sunucu değişiklikleri güvenli ve bilinçli hissettiriyor.

Her sunucu detay görünümü sağlık verilerini, Swift Charts ile gecikme grafiklerini ve mevcut araçları ile parametre şemalarını listeleyen bir Tool Explorer’ı gösteriyor. Bu, MCP iOS uygulamasını sadece basit bir sohbet ön yüzünden daha kullanışlı hale getirdi.

Navigasyon ve ayarlar

`NavigationStack` ve tür güvenli (type-safe) rotalarla üç sekmeli bir düzen kullandım. Derin bağlantılar (deep linking), `mcpconnect://` URL şeması üzerinden çalışıyor.

Ayarlar şunları içeriyor:

koyu, açık ve sistem temaları
sekiz vurgu rengi seçeneği
uygulama içi dil değiştirme (İngilizce ile İsveççe)
abonelik yönetimi

Adım 6: MCP sunucu endpoint’ini dağıttım

En zor kısım, stdio tabanlı bir MCP sunucusunu mobil cihazdan erişilebilir hale getirmekti. Kişisel sitemdeki MCP sunucum başlangıçta `StdioServerTransport` ile yerel bir Node.js süreci olarak çalışıyordu.

Bunu MCP iOS uygulamasına açığa çıkarmak için Vercel’deki Next.js siteme bir API route ekledim. Bu route, JSON-RPC isteklerini yerel sunucu implementasyonuna köprülemek için MCP SDK’sının `InMemoryTransport` özelliğini kullanıyor.

Her istek, `createLinkedPair()` ile taze bir sunucu/istemci çifti oluşturur, işlemi çalıştırır ve yanıtı döndürür. Bu yaklaşım, uzun ömürlü bağlantılardan kaçındığı için serverless altyapıya iyi uyuyor.

Endpoint `https://uygarduzgun.com/api/mcp` adresinde yaşıyor ve herhangi bir MCP istemcisinden çağırabildiğim 15 aracı açığa çıkarıyor. Bu kurulum, yerel bir araç sunucusunu, tüm backend’i yeniden tasarlamadan mobil uyumlu bir servise dönüştürdü.

Bu mimari neden işe yarıyor?

Pratikte işe yaramasının nedeni, her isteğin stateless ve izole olması. Bu, operasyonel riski azaltır ve ölçeklemeyi çok daha kolay hale getirir. Bir MCP iOS uygulaması geliştiriyorsanız, serverless dağıtım için bu deseni düşünmeye değer.

Adım 7: IAP ve gelir elde etme (monetization)

Basit bir free/pro modeli için StoreKit 2 kullandım. Ücretsiz katman kullanılabilir; ancak Pro katmanı, power user’ların en hızlı şekilde çarptığı limitleri kaldırıyor.

ÖzellikÜcretsizPro ($4.99/ay)
------:---:
Sunucular2Sınırsız
Sohbetler50Sınırsız
Geçmiş30 günSınırsız
TemalarKoyu + Açık+ özel vurgu
AramaMevcut sohbetTam metin tümü

Bu modeli seviyorum; çünkü gündelik kullanıcıları cezalandırmıyor. Uygulama gerçek bir iş akışının parçası haline geldiğinde doğal olarak genişleyen, baştan yeterli bir değer sunuyor.

Proje istatistikleri ve sonuçlar

Geliştirme beklediğimden daha büyük çıktı, ama yapı temiz kaldı.

9 özellik modülü (feature module) boyunca 50+ Swift kaynak dosyası
İngilizce ve İsveççe’de 90+ yerelleştirilmiş string
API endpoint üzerinden açığa çıkarılan 15 MCP aracı
RLS politikaları olan 4 Supabase tablosu
5 Swift Package Manager bağımlılığı
0 satır UIKit

Bu sayılar önemli; çünkü uygulamanın bir prototip değil, üretime hazır (production-grade) olduğunu gösteriyor. Gerçek bir MCP iOS uygulaması istedim ve onu yayınladım.

Bu makaleye ekleyebileceğim görseller

Bu yazıyı yayınlarsam, okuyuculara yardımcı olmak ve SEO’yu iyileştirmek için açıklayıcı alt metin (alt text) içeren ekran görüntüleri eklerdim.

iPhone’da MCP Connect ana ekranı
MCP iOS uygulamasında Tool Explorer
Swift Charts ile sunucu gecikme paneli
Dark Cinema tasarım sistemi bileşenleri

Önemli çıkarımlar

MCP iOS uygulamasını önce temiz bir tasarım sistemi etrafında kurdum.
Kodu sürdürülebilir tutmak için domain modellerini kalıcılıktan ayırdım.
API anahtarlarını yalnızca Keychain’de sakladım; Supabase’te değil.
MCP sunucumu `InMemoryTransport` ile Vercel’e köprüledim.
Mobilde iyi çalışan yerel bir SwiftUI uygulaması yayınladım.

MCP Connect, MCP iOS uygulaması fikrinin pratik, güvenli ve gerçek kullanım için hazır olduğunu gösteriyor. Mobil AI araçları geliştiriyorsanız, bu mimari size zaman kazandırabilir ve riski azaltabilir. audio signal levels explained ile ilgili bağlantılı yazıyı okuyun veya isterseniz bir sonraki adımda sunucu kodunu da parçalayarak açıklamam için yorum bırakın.