أَغْنِنَا بِحَلَالِكَ عَنْ حَرَامِكَ

لا روبوت محادثةٍ مستضاف · لا حساب · لا مفتاح

مساعدك، موجَّهٌ إلى كيلك

تبيع بعض المنصّات ذكاءً مستضافًا يصيغ لك الاستراتيجيات، مقيسًا باشتراك. أمّا إجابة كيل فأصغرُ من ذلك ولا تكلّف شيئًا: يُسلِّم كيل خادمَ MCP للقراءة فقط، فتوجّه مساعدك أنت إلى نسخة كيل العاملة على جهازك أنت، وبمفاتيحك أنت. لا يجد المحرّك وجهةً يرسل إليها رسالةً، فهو لا يرسل شيئًا — جانبُ كيل من التبادل لا يغادر جهازك أبدًا.

الحدُّ الصادق

لا يستضيف كيل مساعدًا، ولا يرى محادثاتك، ولا يُرحِّل شيئًا. لا سحابةَ لكيل تُخاطبها، ولا حسابَ يُقاس عليه الاستهلاك، ولا مفتاحَ تُلصقه في موقع — لا شيءَ لتسجيل الدخول إليه. فالخادمُ عمليةٌ محليّة تتحدّث عبر stdio إلى عميلٍ على الجهاز نفسه.

وتنبيهٌ صادقٌ يُقال لا يُلَمَّح: ما يفعله مزوِّدُ مساعدك نفسِه بالرسائل التي يتلقّاها هو اتفاقُك أنت مع ذلك المزوِّد. ليس كيل طرفًا فيه ولا يستطيع رؤيتَه. نصفُ كيل محليٌّ؛ ونصفُ المساعد هو ما اخترتَه حين اخترتَ عميلك.

ولا شيءَ تدفعه لكيل مقابل هذه الصفحة. الصفحةُ تعليمات.

صفحةُ الخادم في مستودع المحرّك

ما خادمُ MCP، في جملةٍ واحدة

‏MCP (بروتوكول سياق النموذج) معيارٌ مفتوح يتيح للمساعد الذكي استدعاء أدواتٍ يكشفها برنامجٌ ما: يسأل المساعد، فيجيب البرنامج مما يستطيع رؤيته.

يتحدّث خادمُ كيل به عبر stdio — رسالةُ JSON-RPC 2.0 واحدةٌ في كلِّ سطرٍ داخلًا، وردٌّ واحدٌ في كلِّ سطرٍ خارجًا حتى نهاية المدخل — مكتوبًا يدويًّا فوق المكتبة القياسية: بلا حزمة MCP، ولا pydantic، ولا asyncio، بلا تبعيةٍ جديدة. وحين يسأل العميلُ مَن يخاطب، يجيب الخادم: keel-read-only. الاسمُ هو الفكرةُ كلُّها.

وجِّه عميلًا إليه

الكَتلَتان أدناه هما نصُّ وثائق المحرّك نفسِها، منسوختان حرفيًّا من صفحة الخادم — عدِّل المسارات بما يناسب نشرَك.

شغِّل الخادم

uv run keel --db keel.db --config config.yaml mcp

سجِّله لدى عميلك

{
  "mcpServers": {
    "keel": {
      "command": "keel",
      "args": ["--db", "keel.db", "--config", "config.yaml", "mcp"]
    }
  }
}

تعليماتُ المحرّك سطرٌ واحد: وجِّه أيَّ عميل MCP يعمل عبر stdio إلى الأمر — فـClaude Desktop وCursor وCodex وVS Code وZed كلُّها تستهلك الشكلَ نفسَه mcpServers. وأين يحفظ كلُّ عميلٍ إعداده فهو وثائقُ العميل نفسِه؛ أمّا ما يخصُّ كيل فهو الأمر والسياجُ حوله.

تحقّق في المستودع: docs/mcp-server.md · يُجلب المرجعُ الكامل للخادم من المحرّك وقت البناء ويُعرض في الوثائق — هذه الصفحة تلخّص، وتلك الصفحة هي المستند.

ماذا تتيح الأدواتُ الثماني للمساعد

ثماني أدوات، كلٌّ منها تفوّض إلى الفواصل الخدميّة نفسِها التي تناديها واجهةُ المشغّل — فلا يمكن أن يُعرَض على المساعد وعلى الطرفية حسابان مختلفان لنشرٍ واحد. وكلُّ القوائم محدودةُ الطول؛ والمالُ يصل نصًّا، فلا يُقرَّب مرّتين بفاصلة JSON العائمة.

  • doctor — النتائج نفسُها التي يحسبها keel doctor — حداثة الاشتراك، وحالات السكك، وهامش الحصّة، والرفوضُ الحديثة، وصحة البيانات، وقَبوليّة التحجيم — وكلٌّ منها مع أمر سطر الأوامر الذي يحلّه.
  • capabilities — جردُ القدرات صفوفًا: كلُّ فعلٍ يوسّع ما يستطيع كيل فعله دون سؤالٍ مجدّدًا، والبوابةُ التي تغطّيه.
  • profiles — ملفاتُ إعدادات النشر صفوفًا منظّمة — قائمةُ الأصول، وسقوفُ الإنفاق، وميزانيةُ الشراء الدوري، والفترات. والملفُ الذي لا يُحمَّل يُدرَج مع خطئه.
  • orders — صفوفٌ من سجلّ تدقيق الأوامر، مُرشَّحةً بالنمط أو المنتج أو الحالة، الأحدثُ آخرًا، وبحدٍّ أقصى.
  • veto_log — أحداثُ رفض السكك المُحلَّلة من سجلّ JSONL للمحرّك منذ لحظةٍ زمنية، مع مخالفات السكة في كلِّ حدث.
  • purification — تقريرُ تطهير الدخول §65.9 — ما يجبُ أداؤه لكلِّ أصل، والوحداتُ من مصادر ملوَّثة، والقيودُ المنتظرة تصنيفًا بشريًّا. للتقرير فقط، كأمر سطر الأوامر.
  • trials — سجلُّ تجارب البحث: أعدادُ الصفوف والقرارات، وأخطاءُ التحقّق من سلسلة التلبيد، وأحدثُ الصفوف. للتجارب فقط — فللمال سجلُّه الخاص.
  • reports — مصادرُ البحث: عدِّ المستندات، أو اقرأ مستندًا واحدًا محدودًا — اسمًا مجرّدًا، لا مسارًا في نظام الملفات أبدًا.

تحقّق في المستودع: keel/mcp/tools.py

ما لا يستطيع فعله — عن قصد

هذا هو النصفُ المهم. لا يستطيع الخادم توثيقَ أصل، ولا ترقيةَ قاعدة، ولا تسليحَ الاستقلالية، ولا إصدارَ أمرٍ أو إيقافَه أو تحريرَه — لا سياسةً بل لأنّ سطحَ الكتابة غيرَ موجود أصلًا. وصفحةُ المحرّك نفسِها تسمّي السياج بستّةِ جدران:

  • معجمُ أفعال الكتابة — يُفحَص اسمُ كلِّ أداة ووصفُها مقابل arm وattest وpromote وkill وplace وسائرِ أفعال الكتابة. ولا يجوز أن يُعلن وصفٌ عن كتابة، لأنّ الوصفَ هو ما يقرؤه النموذج قبل اختيار الأداة.
  • لا فعلَ خاضعًا للبوابة يمكن بلوغُه بالاسم — لا شيء في الخادم يشير إلى مداخل module.function في سجلّ القدرات.
  • فحصُ AST يرفض كلَّ نداءٍ كتابيٍّ — والقائمةُ البيضاء فارغةٌ ومثبَّتةٌ فارغة. وثمّة استثناءٌ واحد: PRAGMA query_only = ON، وهو نفسُه إنفاذُ القراءة-only على مستوى المحرّك.
  • بوابةُ التأكيد التفاعلي لا تظهر في الحزمة أصلًا — فلا يجوز لعمليةٍ موصولةٍ بأنبوب أن تستعير المراسمَ الموجودة لإنسانٍ عند طرفية.
  • تثبيتُ الوثائق — أداةٌ موثَّقةٌ لا وجود لها، أو أداةٌ مكشوفةٌ تخفيها الوثائق، كلاهما يُفشل الـCI.
  • سطحُ استيرادٍ مغلق — لا تستورد الحزمة المنفِّذَ ولا الوكيل؛ فمساراتُ التداول تبدأ غيرَ متاحة، لا غيرَ مستعملةٍ فحسب.

الحارسُ اختبارٌ — tests/mcp/test_readonly.py — سُلِّم قبل أن توجد keel/mcp/ أصلًا، فوُلد الخادم داخل السياج لا نُقل إليه لاحقًا. وصفحةُ المحرّك صادقةٌ في حدّ ذلك: الفحصُ الساكن لا يُغلق الإرسالَ الديناميكي.

وفي زمن التشغيل يفتح كلُّ اتصالٍ بـ PRAGMA query_only = ON — فكتابةُ الصفوف مستحيلةٌ على مستوى المحرّك، بحكم البناء لا بحكم السياسة. وما لن يُكشف أبدًا مسمّىً أيضًا: بياناتُ الاعتماد، ومحتوى .env، وكلُّ ما في سلسلة مفاتيح النظام.

تحقّق في المستودع: tests/mcp/test_readonly.py

الملاءمةُ الصادقة: المساعدُ يقترح، والبوابةُ تقرّر

تقول وثيقةُ تصميم تغذية التحليل في كيل النمطَ في خمس كلمات — «المُحلِّل يقترح، والبوابة تقرّر»: تقترح التغذيةُ أصولًا للتوطين البشري، وتقرّر بوابةُ كيل الحتمية، ولا يلمس جديدٌ القبولَ ولا التحجيمَ ولا إصدارَ الأوامر. ويرث خادمُ MCP التباينَ نفسَه. فالمساعدُ الذي يقرأ تقاريرك يستطيع أن يشرح ماذا فعل كيلُك ولماذا أطلقت سكةٌ رفضَها؛ ولا يصلُ ما يقوله إلى أمرٍ أبدًا.

ذلك الحدُّ هو الميزة. فروبوتُ محادثةٍ يستطيع صياغةَ استراتيجيةٍ وترقيتَها يتجاوز سلّم مرشَّحة ← تجريبية ← حيّة وفحصَ الإفراط في المُلاءمة في جملةٍ واحدة. وإجابةُ كيل ليست روبوتًا أشدَّ أدبًا؛ بل خادمٌ لا يستطيع، يحرسه اختبارٌ يفشل إن تعلّم يومًا كيف.

keel#579 · docs/mcp-server.md

المساعدون يقترحون. وبواباتُ كيل ما زالت تقرّر.

تُرجمت هذه الصفحة عن المراجعة الإنجليزية 2026-08-28.1.