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