Bugün, MCP ile yoğun bir gün geçirdim. Generic MCP araç kutusunu genel bir pakete taşıdım ve MCP sunucularını bir grup kurumsal uygulama üzerinde kurdum. Benzer yapıda fakat farklı alanlarda çalıştım. İşe ek olarak, işlemelere yönelik e-postaların açılıp açılmadığını bildirmesini sağladım ve alt menü yönlendirmelerinin bir dizi uygulamada tutarlı çalışmasını sağladım. İşte günün günlüğü.
MCP araç kutusu ve bu desenin kullanıldığı üç sunucu
MCP araç kutusu ve bu desenin kullanıldığı üç sunucu
Ayrı olarak yazdığım öğretici parçanın linki: cleaniquecoders/laravel-mcp-kit. Bu, her MCP sunucusunda yeniden yazdığım işlem araçlarını içeren generic, opt-in araç kutusu sağladı. Her araç sadece destekleyici paketi mevcut olduğunda kayıtlıdır ve tüm araçlar gated ve uuid-only’dur. Detaylı yazım bugünkü odaklanmış gönderimde mevcut, bu yüzden kodu burada tekrarlamayacağım.
Bu paketinin neden var olduğu önemli bir ek: Bugün ayrıca tam MCP sunucularını özel kurumsal platform setlerine (bir kimlik/IAM sistemi, bir API-gateway yöneticisi ve bir kullanıcı portalı) entegre ettim. Her biri aynı şekle sahip: bir yetki kapısının arkasında sadece okuma-yazma araçları, birkaç yazma aracı ve sunucuyu açıp kapamak için Livewire admin kartı. Üçünü peş peşe inşa etmek, çıkarılması gereken genel yapıyı ortaya çıkardı. Benim uyguladığım kural: ajan okuma araçlarını serbest alır, yazma araçları sınırlıdır ve her yazma işlemi bir insan tarafından denetlenen bir çalışma kitabından geçer — yönlendir, gözlemle, teşhis et, öner. Tehlikeli fiiller az, denetlenmiş ve açıkça yetkilendirilmiş olmalıdır.
Bu çalışmadan çıkan birkaç genel güvenlik dersi, her MCP yapılandırmasında önemli:
- Kullanıcı oluşturma aracında şifreleri hash’le, asla düz metin olarak saklama. Geriye dönük bakıldığında bariz, fakat bir aracın “sadece” bir modeli yönlendirdiği durumlarda gözden kaçması kolay. MCP aracı, herhangi bir denetleyici gibi güvensiz bir giriş noktasıdır — girişini aynı şüpheyle değerlendirin.
- Denetim/listeleme araçlarında iç id’yi değil, kamu UUID’sini yayınla. Bir liste aracı sıralı birincil anahtar döndürdüğünde, satır sayıları sızar ve sıralama yapılır. Kamu id’si uuid’dir; iç id ise içte kalır.
- Kaynaklar için bir STDIO aktörü geri dönüşü ekle. Bir araç hem HTTP hem de STDIO ile çalışabiliyorsa, “mevcut kullanıcı kim” her iki bağlamda da çözülmelidir. HTTP isteği bağlamının her zaman mevcut olduğunu varsaymayın.
Kendini izleyen e-posta
Kendini izleyen e-posta
Diğer genel konu: cleaniquecoders/mail-history e-posta göndermelerde açılma ve tıklama takibi sağlamak için otomatik olarak pixel enjekte etmeyi ve her çıktıda evrensel bir X-Metadata-hash başlığı kullanmayı öğrendi.
Öğretici olan kısım, enjeksiyonun nerede gerçekleştiğidir. Uygulamanızdaki her Mailable‘ın takip pikselliğini ve bağlantıları yeniden yazmayı hatırlamasını istemezsiniz — bu tür kesen kaygılar, bir geliştirici unutursa çürümeye başlar. Bunun yerine, bir e-posta gönderme dinleyicisine bağlıdır: bir mesaj gönderildiğinde, dinleyici HTML gövdesini yeniden yazar ve açma pikselliğini ve izlenebilir bağlantıları sarmalar; ayrıca her mesajın sonraki tarih bağlantılı olmasını sağlayan bir metadata hash’i basar. Uygulama kodu habersiz kalır; izleme, bir pipeline özelliğidir, her bir mesajın değil.
İki önemli nokta var, çünkü bunlar “izleme çalışır” ve “izleme sessizce hiçbir şey yapmaz” arasındaki farkı getirir:
-
Mail::raw()açık/tıklama takibini geçersiz kılar. Düz mesajlar, beklediğiniz gibi HTML yeniden yazım yolunu atlar — her zamanki gibi bir pikseli enjekte edilecek bir gövde yoktur. Eğer açılmaları önemsiyorsanız, gerçek bir HTMLMailablegönderin. Ben de,Mail::rawkullanan bir “test e-postası” özelliğini düzelttim ve dolayısıyla hiç açılmamıştı; uygun bir HTML mail’e geçmek, Açıldı/Tıklandı durumlarının görünmesini sağladı. - Varsayılan olarak izleme etkin olması, bir karar ve kazara değil. Varsayılan olarak aktif hale getirdim. Varsayılanlar bir tutumdur — eğer özellik sadece biri bunu etkinleştirmeyi hatırladığı sürece çalışıyorsa, çoğu kurulum bunu asla elde edemez. Kullanışlı varsayılanı gönderin ve insanların çıkma ihtimalinin önünü açın.
İnjeksiyon dinleyicisini koruyacak türde bir testin Pest betiği:
it('bir html mail'e açma pikselliği ekler ve bağlantıları yeniden yazar', function () {
Event::fake([MessageSending::class]);
Mail::to()->send(new DefaultMail(html: bağlantı'));
// dinleyici, ilişkilendirilebilir bir hash basmalı
// ve gövdeyi yeniden yazmalı — sonuç mesajda,
// elinize aldığınız mailable üzerinde değil.
expect($lastSentBody)
->toContain() // enjekte edilen pixel rotası
->toContain(); // sarılmış bağlantı
});
İlkeler: giden mesajı değil, oluşturduğunuz Mailable‘ı test edin. Özelliğin amacı, mesajı siz uygulamanızla tamamladıktan sonra değiştirmektir; bu yüzden kendi girdiniz üzerinde doğrulama yapmak hiçbir şey ispatlamaz.
Davranan menüler ve yan çubuklar
Davranan menüler ve yan çubuklar
Günün büyük bir kısmı, hem genel yapılandırıcım (cleaniquecoders/kickoff) hem de birkaç özel kurumsal uygulama içerisinde, yönetici navigasyonu üzerineydi: iç içe bir Yönetim grubu ile sağa doğru açılan gruplama, uzun menü öğelerinin düzeni bozmasını engelleyen etiket kısaltmaları ve açılmış bir grubun altındaki çocuklar için ince bir dikey kılavuz hattı.
Çıkarmaya değer olan desen, menünün nasıl oluşturulduğudur. Tüm yan çubuk, her grup için (örneğin: Administration, UserManagement, AuditMonitoring, Settings) küçük invokable yapı sınıflarından toplanır; bunlar kendi öğelerini, rotasını ve gereken yetkilerini tanımlar. Bu yapı, navigasyonu açıklayıcı ve yetkilere duyarlı hale getirir: bir grup, mevcut kullanıcının erişebileceği öğeleri yalnızca gösterir ve bir bölümü eklemek için yalnızca bir sınıf eklemek yeterlidir. Böylece her zaman daha geniş bir Blade dosyası düzenlemeye ihtiyaç duyulmaz. Aynı nav beş uygulamada var olmalıysa, sınıf başına gruplama yapısı tek sürdürülebilir yöntemi sağlar — bileşenleri birleştirirsiniz, kopyalamazsınız.
Gerçekten zaman alan bazı çapraz uygulama sorunları:
- Bir çocuk rotası rota parametreleri desteği gerektirir. Bir “Mail Geçmişi” bağlantısı, çocuk öğe yardımcı programı rota parametrelerini geçiremediğinden yanlış bir rotaya işaret ediyordu. Kolayca atlanabilir, bir derin bağlantı 404 hatasına yol açar.
- Etiketlerin kısaltılması, bileşende değil, öğe başına yapılmalıdır. Kısaltmayı, tüm başlıkların aynı şekilde davranması için navlist bileşeninde merkezi bir şekilde yapın; bunu her öğe için yaparsanız, bir menü girişi her zaman diğerlerinden farklı olacaktır.
- Geliştirici/işletim araçlarını hem bir yetki hem de sürümle arka plana alın. Telescope veya MCP token yönetimi gibi şeyleri menüde görüntülemek harika — ancak sadece bunları görebilen kullanıcılar için ve yalnızca bunların gönderildiği sürümlerde. İki kapı, bir değil.
Telescope, varsayılan olarak dikkatlice
Telescope, varsayılan olarak dikkatlice
Küçük ama tekrar eden bir tema: Telescope’u varsayılan olarak etkinleştirmiş durumdayım, böylece taze bir uygulama gerçekte /telescope adresini sağlar; fazladan bir env değişkenine gerek kalmadan gösterim rotasını ayarladım. Nuansta — hiç etkinleştirilmemiş bir tanılama aracı, kaza eseri olmayı gerektirir ve hata anında kimsenin elinde olmaz. Varsayılan olarak etkinleştir; ancak kapalı bir halde tut ve kullanıcıların kapsamını ya da devre dışı bırakmasını sağla. Açık olmasını hatırlamak zorunda olduğunuz görülebilirlik, sabah 2’de elinizde olmayacak bir görülebilirliktir.
Çalışmayı kontrol eden beceri
Çalışmayı kontrol eden beceri
Son olarak, sessiz bir başarı: kickoff-patch ajan yeteneği (dahil nasrulhazim/agent-skills) bir güçlendirilmiş doğrulama adımına sahip oldu. yetenek bir yamanın bir inşa edilmiş uygulamaya uygulanması sırasında, aslında taze bir kurulumda kırılmayı sağlayacak boşlukları kontrol ediyor — çalışmayan paketler, asla tohumlanmayan izinler, ayarlanmayan env anahtarları, çalışmayan göçler ve stub-vs-proje sahipliği uyuşmazlıkları. Aynı zamanda yukarıdaki Mail::raw izleme sorununu da belirtiyor, böylece ders, sadece kafamda değil, araç gereçlerde de yer alıyor.
Günün tamamını bağlayan iplik, aslında güvenlik ağı otomatik yapma. Varsayılan olarak izleme, varsayılan olarak Telescope, taze bir uygulamanın düşme yollarını bilen bir doğrulama adımı. En iyi ders, tekrar öğrenmek zorunda kalmayacağınız bir şekilde kodladığınız dersdir.
Ayrıca daha derinlemesine incelemek isterseniz genel repolar: laravel-mcp-kit, mail-history, kickoff ve agent-skills.
Kaynak: Orijinal Makale


