יומן פיתוח: MCP, מעקב אימייל ומבנה תפריטים
ביליתי את היום בבניית שרתי MCP, מעקב אימייל אוטומטי ותפריטי מנהל (admin) ניתנים להרחבה.
להלן הלקחים המרכזיים מהעבודה.
בטיחות שרתי MCP
שחררתי ארגז כלים גנרי ל-MCP ופרסמתי שרתים במספר אפליקציות ארגוניות. כשבונים סוכנים (agents) שיכולים לתקשר עם המערכות שלכם, פעלו לפי הכללים הבאים:
- תנו לסוכנים כלי קריאה בחופשיות.
- תנו כלי כתיבה במינון נמוך.
- כפו על כל פעולת כתיבה מעבר דרך runbook המאויש על ידי אדם.
- בצעו hashing לסיסמאות בכלי ה-create-user שלכם. לעולם אל תשמרו טקסט גלוי (plaintext).
- השתמשו ב-UUIDs ציבוריים עבור יומני ביקורת (audit logs). לעולם אל תחשפו מזהי מסד נתונים פנימיים.
- השתמשו ב-fallback עבור הקשר משתמש (user context). סוכן עשוי להשתמש ב-HTTP או ב-STDIO. ודאו שהקוד שלכם מטפל בשניהם.
מעקב אימייל ללא עבודה ידנית
בניתי מערכת שעוקבת באופן אוטומטי אחר פתיחות ולחיצות באימיילים. אל תגרמו למפתחים להוסיף tracking pixels לכל אימייל. במקום זאת, השתמשו ב-mail-sending listener.
- ה-listener קוטע (intercepts) את ההודעה.
- הוא מזריק את ה-tracking pixel לתוך ה-HTML.
- הוא עוטף את כל הקישורים לצורך מעקב לחיצות.
- הוא מוסיף metadata hash לצורך מתאם (correlation) קל.
שתי הערות חשובות:
- הימנעו מ-
Mail::raw(). הוא מדלג על נתיב כתיבת ה-HTML מחדש. השתמשו ב-HTML Mailables תקינים כדי להבטיח שהמעקב יעבוד. - הגדירו את המעקב כ-"on" כברירת מחדל. אם משתמשים יצטרכו להפעיל אותו, הם ישכחו.
תפריטי מנהל (Admin Menus) ניתנים להרחבה
כשאתם מנהלים תפריטים במספר אפליקציות, אל תשתמשו בקובץ אחד ענק. השתמשו במחלקות בנאי (builder classes) קטנות עבור כל קבוצה.
- צרו מחלקה אחת לכל קבוצה (למשל, Settings, User Management).
- כל מחלקה מצהירה על הפריטים שלה ועל ההרשאות הנדרשות.
- זה שומר על הניווט שלכם דקלרטיבי (declarative).
- קצצו תוויות ארוכות בתוך הקומפוננטה, ולא ברמת הפריט הבודד.
- הגבילו גישה לכלים באמצעות שתי בדיקות: הרשאות משתמש וגרסת האפליקציה הספציפית.
התמונה הגדולה יותר
המטרה היא להפוך את רשת הביטחון לאוטומטית.
אם כלי אבחון הוא שימושי, הפעילו אותו כברירת מחדל. אם תצטרכו לזכור להפעיל אותו, הוא לא יהיה שם כשמערכת תקרוס ב-2 לפנות בוקר. הטמיעו את הלקחים שלכם בתוך הכלים שלכם כדי שלא תצטרכו ללמוד אותם מחדש.