
أخفف خادم MCP يعتمد على stdio لعمليات نظام الملفات المحلي — قراءة، كتابة، تحرير، بحث، تنفيذ للمساعدين الذكاء الاصطناعي. محسّن خصيصًا لـ Chatbox: bat-bypass للتنفيذ (CVE-2026-6130)، ترميز b64 لإزالة مشكلات الهروب، وmulti-pattern regex للاستهداف الدقيق لكتل الأكواد.
خوادم MCP بدون تبعيات لعمليات الملفات المحلية. 13 أداة لنظام الملفات + 3 أدوات تعريفية للاكتشاف التدريجي — بدون SDKs، بدون أطر عمل، بدون حاجة لـ npm install.
بروتوكول MCP: 2024-11-05 · النقل: stdio + Streamable HTTP · بيئة التشغيل: Node.js ≥ 22.0.0
local-mcp.mjs — 595 سطرًا، 13 أداة، نقطة الدخول
lib/mcp-core.mjs — 229 سطرًا، نقل stdio + HTTP، 9 طرق MCP
lib/config.mjs — 31 سطرًا، إعداد متغيرات البيئة MCP_WORKSPACE/DATA مع التحقق
الإجمالي: ~855 سطرًا، بدون أي تبعيات وقت التشغيل.
| الأداة | الوصف | التعليق التوضيحي |
|---|---|---|
read | قراءة ملف مع أرقام الأسطر، اختياري head/tail للاقتطاع | readOnlyHint |
search | البحث عن الملفات حسب الاسم (glob) ثم المحتوى (grep) | readOnlyHint |
ls | عرض قائمة مضغوطة للدليل مع إحصائيات كسولة | readOnlyHint |
exec | تنفيذ أوامر مع دفق البيانات مع دعم الإدخال القياسي ومهلة زمنية | destructiveHint |
diff | مقارنة ملفين أو نصين (Myers O(ND)) | readOnlyHint |
copy | نسخ ملف أو دليل | destructiveHint |
move | نقل أو إعادة تسمية ملف/دليل | destructiveHint |
batch | تشغيل عمليات متعددة بالتسلسل؛ تراجع ذري، مراجع $prev | destructiveHint |
file | موحد: قراءة، كتابة، تحرير، إلحاق، حذف، معلومات، mkdir، نقل | — |
block | قراءة/استبدال/إدراج/حذف كتل التعليمات البرمجية حسب النطاق أو اسم الدالة | — |
bookmark | أسماء مستعارة ثابتة للمسارات (إضافة/الحصول/عرض/حذف) | — |
grep | تنسيق مضغوط file:line:content مع توازي تكيفي | readOnlyHint |
watch | مراقبة ملف/دليل للتغييرات؛ بحد أقصى 20 مراقبًا متزامنًا | — |
| الأداة | الوصف |
|---|---|
search_tools | البحث في الأدوات المتاحة بكلمة مفتاحية — يوفر ~90% من الرموز المميزة مقارنة بعرض الكل |
describe_tool | الحصول على مخطط الإدخال الكامل لأداة معينة (يتم تحميله عند الطلب) |
call_tool | تنفيذ أي أداة بالاسم مع الوسائط |
بدلاً من إرسال جميع مخططات الأدوات الـ 13 (~3,000 رمز مميز) في كل طلب، يقلل الاكتشاف التدريجي باستخدام هذه الأدوات التعريفية الثلاثة إلى ~50 رمزًا مميزًا — توفير ~90% من الرموز المميزة.
| # | التحسين | التأثير |
|---|---|---|
| A | قراءة دفق head/tail | streamHead() يتجنب قراءة الملفات بأكملها. سجلات 500 ميجابايت: 3 ثوانٍ → 5 مللي ثانية، الذاكرة: 500 ميجابايت → بضعة كيلوبايت |
| B | إحصائيات كسولة في ls | يستدعي statSync فقط عند sort=size. دليل 1000 ملف: 50 مللي ثانية → 2 مللي ثانية |
| C | توازي تكيفي في grep | os.availableParallelism() (بحد أقصى 16، حد أدنى 4) بدلاً من 16 عاملًا مثبتة |
| D | إزالة LRU من الذاكرة المؤقتة | LRU بناءً على ترتيب الإدراج في الخريطة — لم يعد يتم إزالة الملفات الصغيرة الساخنة بواسطة الملفات الكبيرة الباردة |
| E | حماية حجم grep | MAX_GREP_TOTAL_MB=100 + MAX_GREP_FILES=1000 تمنع تجاوز الذاكرة |
| F | إشعار التقدم | تمرير _meta.progressToken لمواصفات MCP 2025 (TODO: أحداث للتنفيذ الطويل) |
| المجال | التفاصيل |
|---|---|
| ذاكرة التخزين المؤقت للقراءة | إزالة مع مراعاة الحجم (بحد أقصى 50 عنصرًا، 10 ميجابايت) + انتهاء الصلاحية بعد 5 ثوانٍ |
| Myers diff | خوارزمية O(ND)، تستخدم في edit، block، و diff |
| تسجيل البحث | تطابق الاسم أولاً (بدون I/O)، ثم إحصائيات لأفضل 50 مرشحًا فقط |
| تنسيق المخرجات | grep: file:line:content، ls: أعمدة مضغوطة، read: أرقام الأسطر + تلميح الاقتطاع |
| البروتوكول | توزيع O(1) باستخدام خريطة، اختصار المعالجة المتزامنة |
# تثبيت صفري — بدون تبعيات
node local-mcp.mjs
# مع التهيئة
MCP_WORKSPACE=D:/projects node local-mcp.mjs
{
"mcpServers": {
"local-mcp": {
"command": "node",
"args": ["D:/path/to/local-mcp.mjs"],
"env": {
"MCP_WORKSPACE": "D:/projects"
}
}
}
}
node local-mcp.mjs --http
node local-mcp.mjs --http --port 3456
يدعم طلبات JSON-RPC 2.0 POST، دفق SSE (Accept: text/event-stream)، CORS، و GET /tools.
node local-mcp.mjs --help # عرض الاستخدام + متغيرات البيئة
node local-mcp.mjs --list-tools # طباعة الأدوات المتاحة والخروج
node local-mcp.mjs --http # بدء وضع HTTP
node local-mcp.mjs --http --port 3456
| المتغير | القيمة الافتراضية | الوصف |
|---|---|---|
MCP_WORKSPACE | process.cwd() | جذر دليل العمل (حد أمان) |
MCP_DATA | {WORKSPACE}/.mcp-data | دليل البيانات (المراجع، الملفات المؤقتة) |
MCP_DIR | {WORKSPACE} | الدليل الافتراضي لأوامر tree/ls |
MCP_PORT | 3100 | منفذ خادم HTTP (عند استخدام --http) |
MCP_READONLY | false | اضبط على true لمنع جميع عمليات الكتابة |
MCP_EXCLUDE | — | أدلة إضافية مفصولة بفواصل لاستبعادها من البحث |
MCP_WORKSPACE والدلائل الفرعية__proto__/constructor/prototype).gitignore والدلائل المستثناة الشائعة (node_modules، .git، إلخ.)بدون أي تبعيات وقت التشغيل. يستخدم فقط الوحدات المدمجة في Node.js:
| الوحدة | الغرض |
|---|---|
fs | نظام الملفات + glob (Node 22) |
child_process | تنفيذ الأوامر مع دفق البيانات |
http | نقل HTTP (بدون حاجة لـ Express) |
path | حل المسارات |
os | availableParallelism() للتوازي التكيفي |
readline | معالجة الأسطر المتدفقة |
availableParallelism()streamHead — تم تعريف done خارج رد الاتصال الخاص بـ Promise# تشغيل الاختبارات
node --test test/*.test.mjs
# إضافة أداة
# 1. حدد المخطط + المعالج في local-mcp.mjs
# 2. سجل باستخدام server.tool()
# 3. أضف اختبارات
MIT