انتقل إلى المحتوى الرئيسي انتقل إلى الملاحة انتقل إلى التذييل

إعداد خادم MCP

ربط وكلاء الذكاء الاصطناعي بالبنية التحتية لـ Rediacc باستخدام خادم Model Context Protocol (MCP).

نظرة عامة

يقوم أمر rdc mcp serve بتشغيل خادم MCP (Model Context Protocol) محلي يمكن لوكلاء الذكاء الاصطناعي استخدامه لإدارة البنية التحتية الخاصة بك. يستخدم الخادم نقل stdio، ويقوم وكيل الذكاء الاصطناعي بتشغيله كعملية فرعية ويتواصل عبر JSON-RPC.

المتطلبات الأساسية: تثبيت rdc وتكوينه مع جهاز واحد على الأقل.

Claude Code

أضف إلى ملف .mcp.json الخاص بمشروعك:

{
  "mcpServers": {
    "rdc": {
      "command": "rdc",
      "args": ["mcp", "serve"]
    }
  }
}

أو مع تكوين مُسمّى:

{
  "mcpServers": {
    "rdc": {
      "command": "rdc",
      "args": ["mcp", "serve", "--config", "production"]
    }
  }
}

Cursor

افتح الإعدادات → خوادم MCP → إضافة خادم:

  • الاسم: rdc
  • الأمر: rdc mcp serve
  • النقل: stdio

الأدوات المتاحة

أدوات القراءة (آمنة، بدون آثار جانبية)

الأداةالوصف
machine_queryالحصول على معلومات النظام والحاويات والخدمات واستخدام الموارد لجهاز معين
machine_containersعرض حاويات Docker مع الحالة والصحة واستخدام الموارد والتصنيفات ونطاق التوجيه التلقائي
machine_servicesعرض خدمات systemd المُدارة بواسطة Rediacc (الاسم والحالة والحالة الفرعية وعدد إعادة التشغيل والذاكرة والمستودع المالك)
machine_reposعرض المستودعات المنشورة (الاسم وGUID والحجم وحالة التثبيت وحالة Docker وعدد الحاويات واستخدام القرص وتاريخ التعديل ووجود Rediaccfile)
machine_healthتشغيل فحص صحة على جهاز ما (النظام والحاويات والخدمات والتخزين)
machine_listعرض جميع الأجهزة المُكوَّنة
config_repositoriesعرض المستودعات المُكوَّنة مع تعيينات الاسم إلى GUID
config_show_infraعرض تكوين البنية التحتية لجهاز معين (النطاق الأساسي وعناوين IP العامة وTLS ومنطقة Cloudflare)
config_providersعرض موفري الخدمات السحابية المُكوَّنين لتوفير الأجهزة
agent_capabilitiesعرض جميع أوامر rdc CLI المتاحة مع وسائطها وخياراتها
repo_secret_listعرض أسماء الأسرار وأوضاع التسليم لمستودع معين (دون القيم أو البصمات). آمن للقراءة.
repo_secret_getالحصول على بصمة SHA-256 للسر وضع تسليمه. لا تُعاد القيمة النصية أبدا بحكم التصميم. استخدمه للتحقق من وجود سر أو تدويره.

أدوات الكتابة (تدميرية)

الأداةالوصف
repo_createإنشاء مستودع مشفر جديد على جهاز ما
repo_upنشر/تحديث مستودع (يشغّل Rediaccfile up ويبدأ الحاويات). استخدم mount للنشر الأول أو بعد السحب
repo_downإيقاف حاويات المستودع. لا يُفكّك التثبيت افتراضيا. استخدم unmount لإغلاق حاوية LUKS أيضا
repo_deleteحذف مستودع (يدمر الحاويات والأحجام والصورة المشفرة). تُحفظ بيانات الاعتماد للاسترداد
repo_forkإنشاء نسخة CoW مع GUID و networkId جديدين (نسخة مستقلة تماما، يدعم النسخ أثناء التشغيل)
backup_pushدفع نسخة احتياطية للمستودع إلى التخزين أو جهاز آخر (نفس GUID، للنسخ الاحتياطي/الترحيل لا للنسخ CoW)
backup_pullسحب نسخة احتياطية للمستودع من التخزين أو جهاز ما. بعد السحب، انشر باستخدام repo_up مع mount=true
machine_provisionتوفير جهاز جديد لدى موفر خدمة سحابية باستخدام OpenTofu
machine_deprovisionتدمير جهاز موفَّر سحابيا وإزالته من التكوين
config_add_providerإضافة تكوين موفر خدمة سحابية لتوفير الأجهزة
config_remove_providerإزالة تكوين موفر خدمة سحابية
term_execتنفيذ أمر على جهاز بعيد عبر SSH

أمثلة على سير العمل

التحقق من حالة الجهاز:

“ما حالة جهاز الإنتاج الخاص بي؟”

يستدعي الوكيل machine_query ← يُرجع معلومات النظام والحاويات العاملة والخدمات واستخدام الموارد.

نشر تطبيق:

“انشر gitlab على جهاز الاختبار الخاص بي”

يستدعي الوكيل repo_up مع name: "gitlab" و machine: "staging" ← ينشر المستودع ويُرجع النجاح/الفشل.

تصحيح خدمة معطلة:

“خدمة nextcloud بطيئة، اكتشف ما المشكلة”

يستدعي الوكيل machine_healthmachine_containersterm_exec لقراءة السجلات ← يحدد المشكلة ويقترح حلاً.

خيارات التكوين

الخيارالافتراضيالوصف
--config <name>(التكوين الافتراضي)التكوين المُسمّى لاستخدامه في جميع الأوامر
--timeout <ms>120000مهلة الأمر الافتراضية بالمللي ثانية

الأمان

يُطبّق خادم MCP طبقتين من الحماية:

وضع النسخ فقط (الافتراضي)

افتراضيا، يعمل الخادم في وضع النسخ فقط: لا تستطيع أدوات الكتابة (repo_up، repo_down، repo_delete، backup_push، backup_pull، term_exec) إلا التعامل مع مستودعات النسخ (forks). لا يمكن للوكلاء المساس بالمستودعات الأصلية (grand). هذا بحكم التصميم.

أسرار المستودعات متاحة عبر CLI فقط بحكم التصميم. أداتا repo_secret_set و repo_secret_unset مستبعدتان عمدا من أدوات MCP. تستلزم عمليات الكتابة شرطا مسبقا --current <previous-value> (أو --rotate-secret للإقرار بتدوير غير مُتحقق منه)، وهذا الإجراء يستوجب إشراف بشري مباشر. على الوكلاء الذين يريدون اقتراح تدوير سر أن يستدعوا repo_secret_get للتحقق من البصمة، ثم يُمرروا أمر CLI الموجّه للمشغّل إلى المستخدم عبر الحقل next.options[].run في غلاف أخطاء JSON. راجع أمان وكلاء الذكاء الاصطناعي للاطلاع على النمط الكامل، والمستودعات § الأسرار لتعليمات الاستخدام.

لمنح وكيل صلاحية تعديل المستودعات الأصلية، صدّر REDIACC_ALLOW_GRAND_REPO في طرفيتك قبل بدء الوكيل الذي يستضيف خادم MCP:

export REDIACC_ALLOW_GRAND_REPO='gitlab'   # مستودع واحد
# أو 'repo1,repo2,repo3' (المسافات البيضاء حول المُدخَلات تُتجاهل)، أو '*' لجميع المستودعات
claude   # أو cursor أو gemini إلخ

يُتحقق التجاوز من سلسلة السلف: يُعتبر فقط عندما كان موجوداً بالفعل في بيئة عملية الوكيل نفسه، مما يعني أنك صدّرته قبل بدء الوكيل (وخادم MCP الذي أنشأه). لا يستطيع الوكيل منح نفسه الوصول بضبط المتغير في منتصف الجلسة. لا توجد علامة خادم لهذا بقصد: علامة في وسائط خادم MCP لا تحمل إثباتاً عن من وضعها، بينما فحص السلف يفعل. الوصول على مستوى الآلة (مثل term connect -m <machine> دون مستودع) لا يزال يتطلب *؛ قائمة أسماء المستودعات لا تفتح هذا الوصول.

مفاتيح SSH لكل مستودع والصندوق المحمي من جانب الخادم

لكل مستودع زوج مفاتيح SSH خاص به. يُنشر المفتاح العام في authorized_keys بادئةً command= تُجبر جميع جلسات SSH على المرور عبر renet sandbox-gateway <repo-name>، وهو ForceCommand من جانب الخادم لا يمكن لأي عميل تجاوزه، بما في ذلك VS Code.

آلية العمل:

  1. ينشئ rdc repo create أو rdc repo fork زوج مفاتيح ed25519 فريدا لكل مستودع
  2. يُنشر المفتاح العام على الخادم البعيد مع command="renet sandbox-gateway <name>"
  3. تمر كل اتصالات SSH التي تستخدم هذا المفتاح عبر البوابة التي تطبّق:
    • Landlock LSM، قيود نظام الملفات على مستوى النواة مقيّدة بمسار تثبيت المستودع
    • OverlayFS home overlay، تُسجَّل الكتابات إلى $HOME لكل مستودع بشكل منفصل، بينما تمر القراءات إلى المجلد الرئيسي الفعلي
    • TMPDIR خاص بالمستودع في <datastore>/.interim/sandbox/<name>/tmp/
    • وصول Docker عبر مقبس Docker المعزول الخاص بالمستودع
    • تخفيض الصلاحيات إلى المستخدم الموحد (rediacc)
  4. يُحمَّل ملف .envrc الخاص بالمستودع تلقائيا لإعداد Docker والبيئة

مسموح بالقراءة والكتابة: مسار تثبيت المستودع، مساحة عمل الصندوق المحمي الخاصة بالمستودع، المجلد الرئيسي (عبر overlay)، مقبس Docker مسموح بالقراءة فقط: مسارات النظام (/usr، /bin، /etc، /proc، /sys) محظور: مسارات تثبيت المستودعات الأخرى، ملفات النظام خارج القائمة المسموح بها

تكامل VS Code: يحصل كل مستودع على تثبيت خادم VS Code خاص به في <datastore>/.interim/sandbox/<name>/.vscode-server/. يمكن فتح مستودعات متعددة في آن واحد ببيئات صندوق محمي مستقلة، دون مشاركة الخادم بين المستودعات.

هذا يمنع الانتقال الجانبي. حتى لو استطاع وكيل الحصول على وصول صدفة إلى نسخة ما، فلن يستطيع قراءة أو تعديل مستودعات أخرى على نفس الجهاز. تستخدم الاتصالات SSH على مستوى الجهاز (دون مستودع) مفتاح الفريق وليست مقيّدة بصندوق محمي.

البنية المعمارية

خادم MCP عديم الحالة. كل استدعاء أداة يُشغّل rdc كعملية فرعية معزولة مع علامات --output json --yes --quiet. هذا يعني:

  • لا تسرب للحالة بين استدعاءات الأدوات
  • يستخدم تكوين rdc الحالي ومفاتيح SSH الخاصة بك
  • الأخطاء في أمر واحد لا تؤثر على الأوامر الأخرى