اليومياتmcp-server
خادم MCP لقيادة المولّد من مساعد ذكي
ست أدوات على /api/mcp — list_families وdescribe_family وbuild_panel وexport_dxf وnest_panels وcalibrate_deduction — ليتمكن مساعد ذكي من تسعير واجهة وقراءة التشخيصات وجلب ملف DXF دون فتح الاستوديو. سطر واحد لربطه بـ Claude Code.
عرض سعر لواجهة يبدأ عندنا برسالة بريد: «48 كاسيت هرمي 800 × 600، نتوء 60، كم لوحًا؟». الإجابة تعني فتح الاستوديو، وضبط أربعة معاملات، وقراءة المقاسات، وتشغيل التوزيع، ونسخ النتيجة. منذ هذا الأسبوع، يستطيع مساعد ذكي فعل ذلك مكاننا، بالحسابات نفسها، لأن المولّد هو أيضًا خادم MCP.
ما هو /api/mcp
بروتوكول سياق النموذج (MCP) هو بروتوكول JSON-RPC تستخدمه المساعدات الذكية (Claude وغيره) لاستدعاء الأدوات. نقطة دخولنا هي https://acm.hmlssender.com/api/mcp بنقل «Streamable HTTP» بلا حالة: طلب POST واحد لكل رسالة، ورد JSON واحد، بلا جلسة ولا تدفق. طلب GET يعيد بطاقة مقروءة — الاسم، إصدار المحرك، قائمة الأدوات، وضع المصادقة. بلا أي اعتمادية: الجزء المفيد من البروتوكول (initialize، ping، tools/list، tools/call، الإشعارات) يتسع في نحو مئة سطر ويعمل في الاختبارات تحت Node.
الخادم للقراءة فقط: لا يلمس المشاريع ولا الحسابات أبدًا. إذا كان المتغير MCP_API_TOKEN معرّفًا، تشترط المسارات Authorization: Bearer <token>؛ وإلا فهي مفتوحة. حواجز الأمان: 120 رسالة في الدقيقة لكل عنوان، وحجم الطلب محدود بـ 1 ميغابايت، ودفعات من 20 رسالة على الأكثر، ومفتاح في لوحة الإدارة يجيب بـ 503 mcp_disabled. كل استدعاء أداة يُسجَّل (الأداة، المدة، النجاح) لنعرف ما يُستخدم.
الأدوات الست
list_families— عائلات الكتالوج الـ21: المعرّف، الاسم، الفئة، المستوى، عدد المعاملات.describe_family— لعائلة واحدة: كل معامل مع مداه وخطوته ووحدته وقيمته الافتراضية، والإعدادات المسبقة، وقيود التصنيع.build_panel— يبني اللوح بملفي الآلة والمادة الافتراضيين (سماكة 3 أو 4 أو 6 مم) ويعيد المقاسات (المفرود، المساحة، طول الأخدود والمحيط، الطيات، الثقوب)، والتشخيصات بعنوان وشرح بالإنجليزية، وexportable.export_dxf— ملف DXF متعدد الطبقات بمنظور التصنيع (الظهر)، R12 افتراضيًا أو R2000، مع علامة ASCII علىREPERE. يُرفض إذا لم يكن اللوح قابلًا للتصدير: «صحّح تشخيصات build_panel».nest_panels— يوزّع N نسخة على الألواح (1220 × 2440 افتراضيًا، أو أي مقاس): عدد الألواح، نسبة الهدر، تكلفة المادة.calibrate_deduction— الخصم الحقيقي من عيّنة مقاسة:r = r0 + (measured − (k+1)·L) / k.
المعاملات الغائبة تأخذ قيمتها الافتراضية؛ والخارجة عن المدى تُعاد إليه، وتظهر الملاحظة في التشخيصات. معرّف عائلة مجهول يعيد «عائلة مجهولة: استخدم list_families»، لا كومة أخطاء.
استدعاء واحد كما هو
httpPOST /api/mcp
{
"jsonrpc": "2.0", "id": 1, "method": "tools/call",
"params": {
"name": "build_panel",
"arguments": { "familyId": "pyramid", "params": { "reliefMm": 60 }, "thicknessMm": 4 }
}
}وما يجيب به المحرك حين لا يوجد قاطع للميل المطلوب في الملف الافتراضي:
json{
"exportable": false,
"diagnostics": [
{ "code": "CUTTER_UNAVAILABLE", "severity": "error",
"title": "Cutter not available",
"message": "… angle au sommet requis 118.1°, absent du profil machine.
Fraise la plus proche : 135° (écart +16.9°)." }
]
}النقطة المهمة: يتلقى المساعد بالضبط ما تتلقاه شاشة الاستوديو. المحرك نفسه، الملفات نفسها، القاعدة نفسها «لا تصدير مع خطأ». لا يمكنه الحصول على ملف DXF لم نكن لنحصل عليه بأنفسنا.
ربطه بـ Claude Code
bashclaude mcp add --transport http acm https://acm.hmlssender.com/api/mcp
# مع رمز وصول:
claude mcp add --transport http acm https://acm.hmlssender.com/api/mcp \
--header "Authorization: Bearer <token>"ثم في جلسة: «اعرض عائلات النتوء من المستوى الاحترافي، ابنِ هرمًا 800 × 600 بنتوء 60 مم في سماكة 4 مم، أخبرني هل يُصدَّر، ووزّع 48 نسخة على 1500 × 3200». يسلسل المساعد list_families ثم build_panel ثم nest_panels، ويقرأ التشخيصات قبل أن يستنتج. رسالة instructions المعادة عند التهيئة تخبره بترتيب استخدامها.
ما نفعله به في الورشة
استخدامان حتى الآن. التسعير السريع: عائلة، أبعاد، كمية، وعدد الألواح مع نسبة الهدر في ثلاثين ثانية داخل سلسلة بريد عرض السعر. والتحقق الدفعي: نص برمجي يعيد بناء كل عائلة بقيمها الافتراضية وإعداداتها المسبقة ويقارن exportable والمقاسات من إصدار محرك إلى التالي. الأول حلّ محل الجدول أصلًا؛ والثاني وجد تراجعًا في الخصم قبل أن يصل إلى لوح.
اقرأ بعد ذلك: قراءة ملف DXF لكاسيت: الطبقات، R12 مقابل R2000.