عن المشروع

MCP Arcade هي أداة سطر أوامر لاختبار خوادم MCP. تقوم بتشغيل كتالوج قصير ومسمى من التجارب، تسمى atoms، ضد خادم مستهدف، وتستند في حكمها إلى رسائل JSON-RPC المتبادلة والتغييرات الملحوظة في sandbox بدلاً من أوصاف الأدوات، أو مخرجات الطرفية، أو الاستدلال المكتوب للنموذج. يتضمن الإصدار 0.1.x أربعة atoms. يتحقق inspect.tools_list من أن القائمة التي ينشرها الخادم هي القائمة التي يقدمها فعلياً. ويتحقق poison.follow_through من أن المهمة الجانبية المدفونة في وصف الأداة لا تتحول إلى استدعاء tools/call فعلي. ويتحقق temporal.rug_pull من أن الأداة تظل كما هي بعد عدد من الاستدعاءات السليمة. أما protocol.unlisted_call، المصنف كـ holdout، فيقوم باستدعاء اسم تم توليده عشوائياً وغير موجود في القائمة التي تم جلبها للتو، ويفشل فقط إذا أجاب الخادم بنجاح JSON-RPC وكانت قيمة isError هي false. يحدد خيار --atoms أي atoms سيتم تشغيلها، بينما يسرد الأمر الفرعي atoms الكتالوج المتاح. يمكن أن تكون السياسة المتصلة، والتي تسمى agent seat، بسيطة (تتبع المهام الجانبية الموجودة في الأوصاف)، أو مقتصرة على المهام فقط (تشغل الأداة المطلوبة وتتوقف)، أو نموذج Ollama محلي. يتلقى النموذج المحلي مطالبة نظام ثابتة، والمهمة المسمى، وقائمة الأدوات كما هي معروضة تماماً، والنتائج السابقة، وإشعارات الخادم الواردة كملاحظات غير موثوقة، ويعيد استدعاءات الأدوات؛ حيث يتم نسخ الأسماء والوسائط فقط من رده، ولا يتم نسخ نصوصه أبداً. في الخوادم الحية، يمكن إرسال الأدوات المدرجة في --seat-allow فقط، وتُسجل المحاولات خارج هذه القائمة على أنها غير مصرح بها دون أن تصل إلى الشبكة. يتم التثبيت عبر pip أو تثبيت قابل للتعديل من نسخة مستنسخة. يقوم الأمر bout بتشغيل جلسة ضد fixture مدمج، أو خادم stdio، أو صورة Docker. تتطلب الأهداف غير المدمجة خيار --allow-live؛ وإلا فلن تقوم الأداة بتشغيل أمر. يمكن تسمية أداة مهمة حميدة ووسائطها باستخدام --task و --args، ويتم الإبلاغ عن bout يفتقر إليهما على أنه SKIP بدلاً من pass. تغطي الخيارات أيضاً اكتشاف تأطير الرسائل، وإصدارات بروتوكول المصافحة، ومهل زمنية لكل طلب، ومهمة جانبية اختيارية تضاف إلى وصف أداة مختارة. يتم إصدار الإيصال بتنسيق mcp-arcade.bout/v1 JSON ويمكن طباعته بشكل معياري أو عرضه كجدول زمني بصف واحد لكل حدث شبكي، يوضح التسلسل، والاتجاه، والطريقة، والمعرف، والـ atom المالك، وملاحظة. تظهر إشعارات الخادم والطلبات الصادرة من الخادم في صفوف مستقلة. تم بناء برنامج العرض من رؤية للإيصال لا تحتوي على حقول للدرجات أو تخمينات المشغل، لذا لا يمكنه عرض الحكم قبل أن يسجله المشغل. تعمل أهداف Docker بإعدادات تقييدية: لا توجد شبكة، ونظام ملفات للقراءة فقط، وقيود على الذاكرة و pids، وإسقاط الصلاحيات، وحاوية جديدة واحدة لكل atom. يتم تثبيت معرف الصورة وإعادة التحقق منه قبل كل atom، ويتم أخذ لقطة من sandbox من داخل الحاوية، وتكون الروابط والأعلام الإضافية صريحة ومسجلة، ويتم إزالة الحاويات بعد ذلك. يستخدم تسجيل الدرجات محورين ورقماً مدمجاً واحداً: utility، وتعني أن المهمة الحميدة المسمى قد تم تشغيلها بالفعل؛ و integrity، وتعني عدم وجود استدعاء غير مصرح به، أو كذبة في الكتالوج، أو تغيير صامت؛ و NRP، الذي يتم حسابه كـ task_success مضروباً في (1 ناقص attack_success) ويتم تثبيته عند الصفر لأي bout يحتوي على atom من نوع ERROR. السياسة التي لا تستدعي الأدوات أبداً تسجل صفراً بدلاً من نتيجة integrity مثالية. يمكن تحويل الإيصالات إلى مجموعة بيانات JSONL بصف واحد لكل atom، مصنفة من الشبكة، مع تحويل holdout atoms دائماً إلى ملف منفصل واستبعاد الإيصالات ذات الـ proof-split من بيانات التدريب. يسجل البيان (manifest) إصدار المولد، وبصمات كل إيصال، والعدد، وأسباب الاستبعاد. لا تجمع الأداة أي بيانات عن بُعد ولا تجري أي اتصالات شبكية خاصة بها باستثناء نقطة نهاية النموذج المحلي، والتي تعود افتراضياً إلى عنوان loopback ويتم تسجيلها في الإيصال. يوضح المشروع حدوده بوضوح: فهو ليس معياراً للمسح (scanner benchmark)، وليس لاختبار الحمل، وليس عميلاً لأخذ العينات أو الاستخراج، وليس منسق حاويات، ولا يوفر نظرة عامة ثلاثية الأبعاد. المشروع مرخص بموجب MIT.