مشروع مفتوح المصدر · MCP + tmux

اجعل Claude يتحكّم في
سيرفر لينكس بالكامل

خادم MCP صغير يحوّل أي VPS إلى وكيل (Agent) يتحكّم به Claude مباشرة من المحادثة — بديل خفيف لأنظمة الوكلاء الثقيلة، بدون تشغيل أي نموذج ذكاء اصطناعي على الجهاز. الجهاز يشغّل ١٥٠ سطر فقط، و«العقل» هو Claude.

claude → mcp.malkhatib.cloud
# Claude ينفّذ أمرًا على السيرفر مباشرة
claude → run_command("whoami; uname -sr; uptime")

[exit code: 0]
mcpagent
Linux 6.8.0-111-generic
10:31:07 up 27 min, load average: 0.02, 0.03, 0.01

✓ متصل · الحالة محفوظة بين الأوامر · كل أمر مُسجّل
// الفكرة باختصار

بدل تشغيل وكيل ثقيل… Claude نفسه هو الوكيل

الطريقة التقليدية تتطلب تشغيل نظام وكلاء كامل على السيرفر (نموذج + حلقة تفكير + ذاكرة + إعدادات). هنا نقلب المعادلة: السيرفر يشغّل خادم MCP بسيط يفتح طرفية (terminal) عبر tmux، و Claude يتصل بها ويتحكّم بالجهاز كأنه مسؤول نظام حقيقي — يثبّت برامج، يشغّل خدمات، يقرأ السجلّات، ويصلح المشاكل.

🧠

Claude هو المحرّك

لا نموذج محلي ولا حلقة تشغيل على الجهاز. التفكير يحدث في Claude، والسيرفر ينفّذ فقط.

🗔

طرفية حقيقية ومستمرة

عبر tmux تبقى الحالة محفوظة: مجلد العمل، المتغيّرات، جلسات SSH — تمامًا كجلسة طرفية واحدة.

👁️

شفّاف وقابل للمراقبة

تقدر تفتح نفس الجلسة بـ tmux attach وتشاهد Claude يكتب الأوامر مباشرة أمامك.

// المتطلبات

ماذا تحتاج قبل البدء؟

أربعة أشياء فقط. لا حاجة لكرت شاشة أو جهاز قوي — أي VPS صغير يكفي.

01
🖥️

سيرفر VPS بعنوان IP عام

أوبونتو أو ديبيان، نظيف. حتى أصغر باقة (1 جيجا رام) تكفي تمامًا لتشغيل الخادم.

02
🌐

نطاق فرعي (Subdomain)

سجل DNS من نوع A أو CNAME يشير إلى السيرفر — يحتاجه Caddy لإصدار شهادة TLS تلقائيًا.

03

اشتراك Claude مدفوع

باقة Pro أو Max أو Team / Enterprise — لأن إضافة الموصّلات المخصّصة (Custom Connectors) متاحة فيها.

04
📦

tmux + Python

لا تحتاج تثبيتها يدويًا — سكربت التثبيت يتكفّل بكل شيء (tmux و Python و Caddy والجدار الناري).

// المكوّنات

ماذا يتضمّن المشروع؟

خادم MCP يعرض ٦ أدوات يستخدمها Claude، مع طبقة أمان وتشفير جاهزة.

🔒

HTTPS تلقائي عبر Caddy

شهادة Let's Encrypt حقيقية بدون أي إعداد يدوي.

👤

مستخدم بصلاحيات محدودة

الخادم يعمل بمستخدم mcpagent وليس root — لتقليل المخاطر.

قائمة منع للأوامر الخطِرة

حاجز يمنع الأخطاء الشائعة مثل rm -rf / و mkfs.

📜

سجلّ تدقيق كامل

كل أمر ينفّذه Claude يُسجَّل — تتابعه مباشرة بـ tail -f.

الأدوات الست (MCP Tools)
run_command
تنفيذ أمر في جلسة tmux مستمرة، ويرجع المخرجات + كود الخروج (Exit Code).
send_keys
إرسال ضغطات مفاتيح للبرامج التفاعلية (vim، إدخال كلمة مرور، REPL…).
capture_pane
قراءة ما يظهر حاليًا على شاشة الجلسة.
list_sessions
عرض كل جلسات tmux النشطة.
new_session
إنشاء جلسة tmux جديدة باسم محدّد.
kill_session
إنهاء جلسة tmux.
// كيف يعمل

رحلة الأمر من Claude إلى الطرفية

الطلب يخرج من سحابة Anthropic (وليس من جهازك)، يمرّ عبر Caddy للتشفير، ثم خادم MCP ينفّذه داخل جلسة tmux ويعيد النتيجة.

Claude
التطبيق / المتصفح / الجوال — أنت تكتب الطلب
طلب الأداة
☁️
سحابة Anthropic
الاتصال يخرج من سحابة Anthropic عبر الإنترنت العام
HTTPS
🔒
Caddy
يستقبل على 443، يفكّ التشفير ويمرّر للخادم المحلي
127.0.0.1:8080
⚙️
خادم MCP (FastMCP)
يستقبل طلب الأداة وينفّذها — مع فحص قائمة المنع والتسجيل
tmux send-keys
🗔
جلسة tmux → طرفية لينكس
الأمر يُنفّذ، تُلتقط المخرجات وكود الخروج، وتعود إلى Claude
// التثبيت

الإعداد في أمر واحد

جهّز سجل DNS أولًا، ثم شغّل سكربت واحد على السيرفر. كل شيء يُثبَّت ويُضبط تلقائيًا.

وجّه النطاق إلى السيرفر

أنشئ سجل A (أو CNAME) يشير لعنوان السيرفر قبل التشغيل، حتى يتمكّن Caddy من إصدار الشهادة.

DNS record
agent.example.com   A   <your-vps-ip>

استنسخ المستودع وشغّل السكربت

أمر واحد يثبّت tmux و Python و Caddy، ينشئ المستخدم والخدمة، ويضبط الجدار الناري.

bash · على السيرفر
git clone https://github.com/makhatib/linuxMCP.git
cd linuxMCP
sudo ./deploy.sh agent.example.com you@example.com

أضف الموصّل في Claude

من الإعدادات: Settings → Connectors → Add custom connector ثم الصق الرابط. الاتصال بدون مصادقة (authless).

MCP endpoint
https://agent.example.com/mcp

جاهز — جرّب أمرًا

اطلب من Claude أي مهمة على السيرفر: «تحقّق من المساحة وثبّت nginx وشغّله». وستراه يعمل مباشرة.

⚠️

ملاحظة Cloudflare: إذا كان النطاق يمرّ عبر بروكسي Cloudflare (السحابة البرتقالية)، فقد يقطع استجابة الأوامر. الحل: اجعل السجل DNS only (سحابة رمادية) ليصل Claude إلى Caddy مباشرة.

// الاستخدام

شغّله… وشاهده مباشرة

أفضل لقطة في الفيديو: شاشة مقسومة — الطرفية على جهة و Claude على الجهة الأخرى.

شاهد الجلسة مباشرة
# افتح نفس جلسة Claude وراقبه يكتب
sudo -u mcpagent tmux attach -t claude
تابع سجلّ التدقيق
# كل أمر ينفّذه Claude يظهر هنا
tail -f /opt/linux-mcp/audit.log
💡

أمثلة لما يقدر Claude يفعله

• فحص حالة النظام والموارد (CPU، الذاكرة، القرص)
• تثبيت وإعداد خدمات (nginx، Docker، قواعد بيانات)
• قراءة وتحليل السجلّات لتشخيص الأعطال
• كتابة وتشغيل سكربتات Bash أو Python
• متابعة العمليات والاتصال بأجهزة أخرى عبر SSH

// خيارات في deploy.sh
الإعدادالافتراضيالوظيفة
GRANT_SUDOfalseعند true يسمح لـ Claude بصلاحيات الجذر (تثبيت الحزم وإدارة الخدمات).
ANTHROPIC_IPSفارغحصر المنفذ 443 على نطاقات IP محدّدة لزيادة الأمان.
// الأمان

تعامل معه كطرفية مكشوفة للإنترنت

قائمة المنع حاجز ضد الأخطاء وليست جدار حماية. الأمان الحقيقي يأتي من العزل.

🧱

اعزل الجهاز

استخدم VPS مخصّصًا قابلًا للحذف، وأبقِ GRANT_SUDO=false ما لم تحتجه.

📍

قيّد الوصول

فعّل قائمة IP المسموحة على الجدار الناري، وأبقِ منفذ SSH بمفتاح فقط.

🗑️

احذفه بعد العرض

لا تترك طرفية عامة بدون مصادقة تعمل. احذف السيرفر أو دوّره بعد الانتهاء.

// حلّ المشاكل

أخطاء شائعة وحلولها

المشاكل التي قد تواجهها أثناء الإعداد — وحلّها المباشر.

المشكلةالسبب والحل
421 Misdirectedالخادم لا يثق بالنطاق. تأكد أن الخدمة تعمل مع MCP_ALLOWED_HOST (يضبطه السكربت تلقائيًا).
couldn't registerاحذف الموصّل وأضفه من جديد — المحاولات الفاشلة المتكرّرة قد تصنّفه كموصّل OAuth.
التغييرات لا تظهرأعد تشغيل الخدمة: systemctl restart linux-mcp.
الأمر ينجح لكن Claude يخطئغالبًا بروكسي Cloudflare يبتلع الاستجابة — اجعل سجل DNS رماديًا (DNS only).
FastMCP tmux Caddy Python 3 systemd Streamable HTTP