Postgres Tabanlı MCP Sunucusu: 20 Satır Kod ile Yapay Zeka Aracı Oluşturma Siber Güvenlik

Postgres Tabanlı MCP Sunucusu: 20 Satır Kod ile Yapay Zeka Aracı Oluşturma

Model Context Protocol (MCP) ile bir yapay zeka ajanına araç sağlamak için Postgres tabanlı bir MCP sunucusunu Neon Functions üzerinde ~20 satır kodla

Yapay zeka ajanları, karmaşık görevleri yerine getirmek için araçlara ihtiyaç duyar. İşte tam bu noktada Model Context Protocol (MCP) devreye girer. MCP, bir yapay zeka ajanının harici sistemlerle etkileşime geçmesini sağlayan bir protokoldür. Bir MCP sunucusu, belirli araçları tanımlar ve bu araçların giriş şemalarını duyurur. Ajan, ihtiyacı olan aracı çağırır ve sunucu da sonucu döndürür. Gerçek hayattaki birçok MCP sunucusu, aslında bir veritabanı etrafında ince bir katman görevi görür: kayıtları arama, yeni satır oluşturma, alan güncelleme gibi işlemler. Yani sunucu, büyük ölçüde JSON-RPC ile SQL arasında bir çevirmendir.

Bu durum akla şu soruyu getiriyor: Bir MCP sunucusu sürekli olarak Postgres ile konuşuyorsa, neden çoğu zaman Postgres'ten çok uzakta çalışıyor? Tipik kurulumda MCP sunucusu bir makinede, veritabanı ise başka bir makinede bulunur. Bu, her araç çağrısında veriye ulaşmak için bir ağ gidiş-dönüşü yapılması anlamına gelir. Bu gecikme, özellikle sunucu ve veritabanı farklı bölgelerdeyse ciddi performans kaybına yol açar.

Neon Functions bu sorunu ortadan kaldırıyor. MCP sunucusunu, aynı veritabanı dalı (branch) üzerinde, aynı bölgede bir fonksiyon olarak dağıtmanıza olanak tanır. Böylece sunucudan Postgres'e yapılan her sorgu, yerel bir atlama haline gelir. Bu yazıda, Postgres destekli bir MCP sunucusu oluşturacak, bunu bir Neon veritabanı dalına dağıtacak, gerçek bir MCP istemcisi bağlayacak ve gidiş-dönüş sürelerini inceleyeceğiz. Tüm proje yaklaşık yirmi satır anlamlı kod içeriyor.

Nasıl Önlem Alınmalı?

MCP sunucusunun çekirdeği oldukça küçüktür: Bir Drizzle şeması tanımlayın, sorgu çalıştıran bir işleyiciye sahip bir araç kaydedin ve MCP sunucusunu akışkan HTTP taşıması (streamable HTTP) ile /mcp yolunda açığa çıkarın. İşte bu kadar. Neon Functions ile her bir veritabanı dalı kendi fonksiyon URL'sine sahip olur. Bu sayede her önizleme veya test dalı, kendi veri kopyası üzerinde izole bir MCP uç noktasına sahip olabilir.

Hadi kodlara geçelim. Öncelikle, Hono, Drizzle ORM, pg (Node.js Postgres istemcisi), Zod, MCP SDK ve @hono/mcp paketlerini yükleyin. Ardından, bir Drizzle şeması tanımlayın. Örnek olarak bir kişi rehberi (contacts) tablosu oluşturalım: id, name, email, company, notes ve created_at alanları. Şimdi MCP sunucusunu oluşturalım: Bir McpServer örneği oluşturup 'search_contacts' adında bir araç kaydedin. Bu araç, isteğe bağlı bir 'query' parametresi alır ve veritabanında bu sorguyla eşleşen kişileri arar. Son olarak, Hono uygulamasını oluşturup /mcp yoluna gelen tüm istekleri MCP taşımasına yönlendirin. İşte bu kadar!

Bu yapıyı Neon Functions'a dağıtmak için bir neon.ts yapılandırma dosyası oluşturun ve fonksiyonu tanımlayın. Neon CLI ile projeyi başlatın, veritabanı dalını oluşturun, şemayı ittirin ve fonksiyonu dağıtın. Dağıtım sonunda size bir fonksiyon URL'si verilecek. Bu URL, MCP sunucunuzun adresi olacak. Artık herhangi bir MCP istemcisi (mcporter, Claude, Cursor vb.) bu URL'ye bağlanarak araçları kullanabilir.

Bu yaklaşımın en büyük avantajı, veritabanı sorgularının gecikmesini minimize etmesidir. Neon Functions sayesinde MCP sunucusu ve Postgres aynı bölgede, hatta aynı dal üzerinde çalıştığı için her araç çağrısında milisaniye mertebesinde bir gidiş-dönüş süresi elde edilir. Ayrıca her dalın kendi MCP uç noktası olması, geliştirme ve test süreçlerinde izolasyon sağlar. Bu yöntem, özellikle sık veritabanı sorgusu yapan yapay zeka ajanları için idealdir.

Sistem Güvenliği

Sonuç olarak, Postgres tabanlı bir MCP sunucusu oluşturmak hem basit hem de etkilidir. Neon Functions'ın sunduğu yakınlık sayesinde ağ gecikmesi sorunu ortadan kalkar. Siz de kendi MCP sunucunuzu kurarak yapay zeka ajanlarınıza güçlü veritabanı araçları kazandırabilirsiniz. Kodların tamamına GitHub reposundan ulaşabilirsiniz.

Kaynak: dev.to

Paylaş: