البناء · فصل ٩

ابني سيرفر طقس

stdio logging · weather tools · Python SDK
🎯 الهدف: تبني سيرفر أدوات، وتفتكر إن stdio ما يتكتبش عليه غير رسائل البروتوكول.

هنبني سيرفر طقس بيعرض أداتين: تنبيهات، وتوقع. الداتا من خدمة الطقس الأمريكية. السيرفر يقدر يقدّم موارد وقوالب كمان، لكن التيوتوريال بيركّز على الأدوات. بيتوصل بأي كلاينت. الدوكس بتوصّله بـ Claude Desktop للتبسيط.

في Python استخدم موديول logging على stderr. في TypeScript استخدم console.error. في Go اللوج الافتراضي على stderr. في Rust استخدم eprintln. باقي اللغات نفس القاعدة: مكتبة لوج على ملفات أو stderr، ومتكتبش على المخرج القياسي. راجع دوكس الـ SDK للأمر الدقيق.

المسار بـ Python

محتاج Python 3.10 أو أحدث، و SDK بايثون 2 أو أعلى. أداة uv بتجهّز المشروع والبيئة. اسم الباكدج وأعلام التثبيت بتتغير، فراجع الدوكس قبل ما تنسخ الأمر.

الفكرة: كلاس السيرفر ياخد تلميحات النوع ونص التوثيق فوق الدالة ويطلّع تعريف الأداة لوحده. دالة مساعدة تبعت طلب للخدمة بهيدر عميل ومهلة، وترجع JSON أو فاضي لو حصل خطأ. الأداتين:

  • get_alerts تاخد رمز ولاية من حرفين.
  • get_forecast تاخد إحداثيات وترجع نشرة مختصرة.

التشغيل المحلي عن طريق أمر السيرفر في وضع stdio، وبعدين تضيفه في إعداد Claude Desktop بنفس شكل فصل السيرفر اللوكال: أمر البيئة الافتراضية، ومسار ملف السيرفر. اقفل التطبيق خالص وافتحه تاني.

نفس التيوتوريال موجود بلغات تانية في الدوكس: TypeScript و Java و Kotlin و C# و Ruby و Rust و Go. الفكرة واحدة. أوامر إنشاء المشروع بتتغير مع الأداة، فراجع الصفحة الرسمية للغتك.

جرّب واتصلح

من الشات اسأل عن تنبيهات ولاية، أو توقع مدينة. لو الأداة مش ظاهرة: إعادة تشغيل كاملة، وصياغة الإعداد، والمسار لمفسر البيئة الافتراضية مش المفسر العام. لو الرد فاضي، الخدمة الخارجية ممكن تكون رافضة الطلب من غير هيدر عميل. لو السيرفر يقع فورًا، غالبًا فيه طباعة على stdout.

خلّصت الفصل لما

🧠 اختبر نفسك
١) ليه print في بايثون خطر على سيرفر stdio؟
لأن stdout هو مجرى رسائل البروتوكول. أي نص تاني يبوّظ الـ JSON.
٢) الأداة اتكتبت والكلاينت مش شايفها. إيه أول حاجة؟
إعادة تشغيل كاملة للكلاينت بعد حفظ الإعداد، ومراجعة مسار المفسر.
٣) سيرفر HTTP ينفع يطبع على stdout؟
أيوه. المجرى ده مش شايل ردود البروتوكول في النقل ده.