🎙️ حلقة 27304:23 • ١٤ مايو ٢٠٢٦
خادم MCP في TypeScript: OAuth 2.1 + Streamable
استمع إلى هذه الحلقة
مناقشة مولدة بالذكاء الاصطناعي بواسطة Alex و Jamie
عن هذه الحلقة
أليكس وجيمي بيشرحوا MCP Server في TypeScript: OAuth 2.1 + St… — إيه اللي نزل، وليه ده مهم، وإزاي المهندسين يقدروا يستخدموه النهاردة. حلقات جديدة كل أسبوع.
النص المكتوب
[Alex]: أهلاً بكم من جديد في حلقة أخرى من البودكاست الذكي لـ نيرد ليفل تك! أنا Alex، ومعي Jamie الشغوفة دائماً بالمعرفة، ومستعدان للغوص في حديث تقني متطور. [Jamie]: أهلاً بالجميع! موضوع اليوم ممتع للغاية—ومعقد بعض الشيء! سنتحدث عن بناء خادم MCP للإنتاج باستخدام TypeScript، يتميز بـ OAuth 2.1، ونقل HTTP قابل للبث (Streamable)، وأكثر من ذلك بكثير. Alex، أتمنى أن تكون قد شربت قهوتك لأن الأمر يبدو مكثفاً! [Alex]: أوه، بكل تأكيد يا Jamie! إنه الكثير، لكن لا تقلقي—سنقوم بتبسيط الأمر. نحن نقوم أساساً بإعداد خادم يتعامل مع المهام بتفويض آمن وقدرات في الوقت الفعلي. لنبدأ بما يعنيه MCP فعلياً—Model Context Protocol. الأمر كله يتعلق بالاتصالات المدركة للسياق بين الأنظمة. [Jamie]: صحيح، مثلما تحتاج التطبيقات المختلفة للتحدث مع بعضها البعض بشكل آمن وفعال، أليس كذلك؟ [Alex]: بالضبط! الآن، دعونا نضيف OAuth 2.1 إلى المزيج. إنه بروتوكول للتفويض، يضمن أن الكيانات الصحيحة لديها حق الوصول إلى الموارد الصحيحة دون الكشف عن كلمات مرور المستخدمين. [Jamie]: إذاً، الأمر يشبه الحارس في النادي الذي يفحص هويتك قبل السماح لك بالدخول؟ [Alex]: [يضحك] تشبيه مثالي يا Jamie! الآن، تخيلي أن لديكِ قائمة مهام في هذا النادي. مع OAuth 2.1، لا يمكننا فقط التأكد من يمكنه الدخول، ولكن أيضاً من يمكنه قراءة القائمة، أو إضافة مهمة، أو تحديد واحدة كمكتملة. [Alex]: المصطلح الكبير التالي لليوم هو Streamable HTTP. هذه طريقة نقل تسمح لخادم MCP الخاص بنا بالتواصل في الوقت الفعلي، وهو أمر رائع للمهام التي تحتاج إلى تحديثات فورية. [Jamie]: تحديثات في الوقت الفعلي—إذاً الأمر يشبه معرفة اللحظة التي يرد فيها صديقك على رسالتك النصية! [Alex]: أصبتِ! الآن، يتطلب تنفيذ هذا بعض البرمجة الجادة. نبدأ بإعداد خادم Express، ثم ندمج منطق MCP الخاص بنا مع OAuth للأمان، ونتعامل مع البيانات في الوقت الفعلي باستخدام Streamable HTTP. [Jamie]: توقف لحظة، لقد ذكرت Express. هذا بمثابة الأساس، صح؟ [Alex]: نعم! إنه يتعامل مع طلبات الخادم ويوجهها بشكل مناسب. فكري فيه كإطار العمل الأساسي الذي يساعدنا في إدارة التفاعلات القادمة إلى خادمنا. [Jamie]: فهمت. وكل هذا يتم بلغة TypeScript، والتي حسب ما أفهم، تساعد في اكتشاف الأخطاء مبكراً بفضل نظام الأنواع الخاص بها، أليس كذلك؟ [Alex]: أنتِ تتعلمين بسرعة! TypeScript هي JavaScript بقدرات خارقة—تلك الأنواع تساعدنا حقاً في إدارة قواعد الأكواد الكبيرة بأمان. [Jamie]: حسناً، لننتكلم عن النطاقات (Scopes). هذا يشبه وجود مستويات مختلفة من الوصول، صحيح؟ [Alex]: صحيح مرة أخرى! في مثال المهام الخاص بنا، يمكن لبعض المستخدمين قراءة المهام، بينما يمكن للآخرين كتابتها أيضاً. كل إجراء يتطلب "نطاقاً" محدداً من التفويض. [Jamie]: هذا منطقي. يشبه امتلاك بطاقة دخول في العمل تسمح لكِ فقط بدخول غرف معينة. [Alex]: بالضبط. وكل هذا يجب أن يكون آمناً للغاية، ولهذا السبب نستخدم أدوات مثل `jose` للتحقق من صحة الرموز (Tokens)، مما يضمن أن كل رمز وصول صالح ولديه الأذونات الصحيحة. [Jamie]: الأمان أمر ضخم، خاصة مع كل الاختراقات المخيفة التي نسمع عنها. [Alex]: بالفعل. ولإضافة طبقة إضافية من الأمان، نقوم بتنفيذ حماية من إعادة ربط نظام أسماء النطاقات (DNS-rebinding) والقائمة البيضاء لرأس المضيف (Host-header allowlisting) لمنع أنواع معينة من الهجمات السيبرانية. [Jamie]: كل هذا في حوالي 300 سطر من TypeScript عبر خمسة ملفات؟ يبدو هذا رائعاً لدرجة يصعب تصديقها! [Alex]: إنها قوة أطر العمل الحديثة وممارسات البرمجة الفعالة. بالإضافة إلى ذلك، نتأكد من أن كل شيء قابل للمراقبة وتصحيح الأخطاء باستخدام التسجيل المنظم (Structured logging). [Jamie]: لقد كانت هذه جولة سريعة ومكثفة يا Alex! من OAuth إلى HTTP في الوقت الفعلي والأمان—أشعر وكأنني أتممت للتو معسكراً تدريبياً مصغراً في إعداد الخوادم! [Alex]: لقد أبليتِ بلاءً حسناً يا Jamie! وإلى مستمعينا، نأمل أن تسلط هذه الحلقة الضوء على مدى قوة وتعقيد خوادم الويب الحديثة، خاصة عند التعامل مع المهام بأمان وكفاءة. [تبدأ موسيقى الخاتمة في الظهور] [Jamie]: شكراً لكم جميعاً على المتابعة! إذا استمتعتم بهذه الحلقة، لا تنسوا الاشتراك وترك تقييم لنا. حتى المرة القادمة، حافظوا على أمان خوادمكم وسلاسة مهامكم! [Alex]: برمجة سعيدة للجميع! [تتلاشى موسيقى الخاتمة]