العودة إلى التحديثات
New releaseAug 20, 2026

mcp-server-attestation v0.2.0

تعزيز سلسلة التوريد من الطبقة الثانية لخوادم MCP — بيانات الأداة الموقعة بـ Ed25519، إثبات الاستدعاء في وقت التشغيل، منقي الوسائط برفض افتراضي. يدافع ضد تسميم السوق + CVE-2025-69256 + CVE-2025-61591.

مشاركة

جزء من مجموعة أدوات StudioMeyer MCP — بُنِي في مايوركا 🌴 · ⭐ إذا استخدمته

mcp-server-attestation

npm version npm downloads License Last commit GitHub stars

تقوية سلسلة التوريد من المستوى الثاني لخوادم بروتوكول سياق النموذج (MCP). بيانات أدوات موقعة بـ Ed25519، توثيق وقت التشغيل للـ spawn، مصفف وسائط رفض افتراضي.

رد مباشر على:

  • تسمم سوق OX Security، أبريل 2026 — 9 من أصل 11 سجلًا لـ MCP قبلوا خوادم ضارة. موقف Anthropic المنشور: "سلوك متوقع".
  • CVE-2025-69256 — تنفيذ أوامر عن بعد في Serverless Framework MCP عبر حقن أوامر child_process.exec().
  • CVE-2025-61591 — تنفيذ أوامر عن بعد في Cursor MCP عبر خادم ضار مثبت عبر OAuth مع اختطاف spawn.

توفر هذه الحزمة ما اختارت Anthropic ألا توفره: التحقق المشفر من أي الأدوات يُسمح للخادم بعرضها وأي استدعاءات spawn يُسمح له بفعلها. إنها تبعية جاهزة للاستخدام (drop-in)، وليست بديلًا لوقت التشغيل.

ملاحظة منا

لقد بنينا أدوات وأنظمة لأنفسنا خلال العامين الماضيين. حقيقة أن هذا المستودع صغير وله نجوم قليلة ليست لأنه جديد. بل لأننا قررنا للتو مشاركة ما بنيناه. إنها ليست تجربة جديدة، إنها قصة طويلة مع إيداع حديث.

نحن نحب بناء الأشياء ومشاركتها. لا نحب تكتيكات وسائل التواصل الاجتماعي، أو حيل النمو، أو مطاردة النجوم والمتابعين. لذا هذا المستودع صغير. الكود حقيقي، يُستخدم، والأسئلة تُجاب. احكم بنفسك.

إذا ساعدك، فإن المشاركة والاختبار والتعليقات تساعدنا. إذا كان يمكن أن يكون أفضل، فالتقرير (issue) أكثر فائدة. إذا بنيت شيئًا به، أخبرنا على [email protected]. ذلك يسعد يومنا حقًا.

من استوديو صغير في بالما دي مايوركا.

الحزم (npm workspaces)

الحزمةالغرض
mcp-server-attestation (packages/lib)المكتبة: التوقيع/التحقق بـ Ed25519، مخطط البيان (manifest schema)، المصفف، مصدق spawn، مخزن الثقة TOFU.
mcp-attest-cli (packages/cli)واجهة الأوامر mcp-attest: keygen، sign، verify، inspect، fingerprint، check-pin.
mcp-attest-demo (packages/demo-server)خادم MCP مرجعي (stdio، مواصفات 2025-06-18) يعرض 5 أدوات توضح المكتبة.

التثبيت

npm install mcp-server-attestation
# CLI:
npm install -g mcp-attest-cli
# Reference MCP server:
npx mcp-attest-demo

يتطلب Node 20+. لا تبعيات تشفير خارجية — يستخدم أوليات node:crypto Ed25519.

بداية سريعة بخمسة أسطر

import { verifyManifestStrict, attestSpawnStrict, type SignedManifest } from "mcp-server-attestation";
import signed from "./signed/manifest.json" assert { type: "json" };

// 1. At startup: prove the manifest you ship is the manifest you signed.
verifyManifestStrict(signed);

// 2. Before every child_process.spawn:
attestSpawnStrict(signed as SignedManifest, { command, args });

هذا هو التكامل بأكمله. استدعاء دالتين، لا SaaS، لا خفيّ.

إذا كنت تفضل إعادة التحقق من التوقيع عند كل spawn (دفاع متعمق ضد بيان غير موثوق أو مستبدل يصل إلى البوابة)، استخدم استدعاء الأمان الواحد بدلاً من ذلك — فهو يتحقق ثم يوثق:

import { attestSpawnVerified, type SignedManifest } from "mcp-server-attestation";
attestSpawnVerified(signed as SignedManifest, { command, args });

الأدوات (الخادم المرجعي mcp-attest-demo)

#الاسمreadOnlyHintdestructiveHint
1attest_verify_manifesttruefalse
2attest_inspect_spawntruefalse
3attest_generate_manifest_templatetruefalse
4attest_sign_manifestfalsefalse
5attest_keygenfalsefalse

التعليقات صادقة: attest_sign_manifest و attest_keygen يكتبان ملفات على القرص لذا فهما ليسا للقراءة فقط، لكنهما لا يدمران البيانات الموجودة لذا يظل destructiveHint false. انظر docs/THREAT-MODEL.md لجدول القدرات حسب الأداة.

واجهة الأوامر

mcp-attest keygen --out-dir ./keys --name prod
mcp-attest sign --manifest manifest.json --private-key keys/prod.key --out signed.json
mcp-attest verify --signed signed.json --pin                  # TOFU pin
mcp-attest verify --signed signed.json --sigstore             # opt-in Rekor cross-ref
mcp-attest inspect --signed signed.json --command /usr/bin/echo --arg "hello"
mcp-attest fingerprint --public-key keys/prod.pub
mcp-attest check-pin --server my-server --signed signed.json

verify يخرج برمز 2 عند توقيع سيئ، ورمز 3 عند عدم تطابق الدبوس (pin).

توافق مواصفات MCP

إصدار المواصفاتالحالة
2024-11-05قابل للتحليل في البيان، ليس هدف الخادم المرجعي
2025-03-26قابل للتحليل في البيان، ليس هدف الخادم المرجعي
2025-06-18الهدف الكامل

المكتبة مستقلة عن النقل. الخادم المرجعي يعمل بـ stdio فقط.

نموذج الأمان

  • الثقة عند أول استخدام (Trust-on-First-Use) هي الافتراضي. في المرة الأولى التي تتحقق فيها من خادم، يتم تثبيت مفتاحه العام في ~/.mcp-attest/trust.json (تجاوز: MCP_ATTEST_TRUST_FILE). عمليات التحقق اللاحقة ترفض أي مفتاح جديد لنفس اسم الخادم مع خطأ TRUST_PIN_MISMATCH. هذا يصدّ ناقل التحديث الضار المشابه لـ Cursor.
  • لا توجد قائمة مفاتيح موثوقة مدمجة. هذه الحزمة لا تعمل كحارس بوابة. إذا كنت تريد ضمانًا أقوى، اختر --sigstore للتحقق المتبادل من بصمة المفتاح العام مقابل سجل شفافية Sigstore Rekor.
  • مصفف وسائط رفض افتراضي. shellSafeString يمنع كل الأحرف الخاصة بقذيفة ASCII، NUL، CR، LF، VT، FF، NEL، أحرف العرض الصفري، BOM، تجاوزات RTL/LTR، معزولات Trojan-Source، والمتشابكات اللاتينية كاملة العرض. السلوك المسموح يتطلب أنواع القواعد الصريحة regex / enum / prefix / literal.
  • قواعد regex آمنة من هجمات ReDoS. نمط قاعدة regex موقع من المؤلف، لكن قيمة الوسيطة يتحكم فيها المهاجم. يكتشف المصفف بشكل ثابت الأنماط المعرضة للتراجع (مثل المعاملات غير المحدودة المتداخلة (a+)+) ويرفض تشغيلها، لذا لا يمكن لوسيطة واحدة مصممة بعناية تجميد مسار spawn الساخن. تحمل قواعد regex أيضًا حدًا أقصى للإدخال maxLength (الافتراضي 4096).
  • قواعد prefix آمنة من الاجتياز. ترفض قواعد prefix مكونات المسار .. افتراضيًا (denyTraversal: true، بما في ذلك الشكل المشفر %2e%2e)، لذا يتم حظر /safe/../../etc/passwd حتى لو استوفى prefix: "/safe/".
  • تحقق ثم توثيق. تقوم attestSpawnVerified بالتحقق من توقيع البيان قبل توثيق spawn في استدعاء واحد آمن — استخدمها بدلاً من attestSpawnStrict إلا إذا قمت بقياس زمن التحقق Ed25519 لكل spawn خارج حلقة ساخنة حقًا.
  • JSON المتعارف عليه (Canonical JSON) هو السطح الموقع. لا يمكن لإعادة التسلسل تغيير البايتات الموقعة.

ما لا تفعله هذه الحزمة (خارج النطاق):

  • عزل أو حاويات عملية الخادم.
  • تقوية تدفق OAuth (بناء منفصل mcp-oauth-shield).
  • التحكم في الخروج الشبكي.
  • تصحيح الخوادم الحالية تلقائيًا.

الاختبارات

npm install
npm run typecheck
npm test

تتضمن مجموعة الاختبار مخلّفات إعادة تشغيل CVE (packages/lib/tests/fixtures/cve-2025-69256-payloads.json، cve-2025-61591-payloads.json). البناء هو فحص تراجعي: يجب حظر كل حمولة.

التوزيع

  • نشر npm عبر GitHub Actions OIDC مع --provenance.
  • الخادم المرجعي مُقدم إلى mcp.so ودليل FastMCP.
  • المكتبة منشورة بشكل منفصل كـ mcp-server-attestation.

حول StudioMeyer

StudioMeyer هو استوديو AI وتصميم مقره في بالما دي مايوركا، يعمل مع عملاء حول العالم. نبني مواقع ويب مخصصة وبنية تحتية للذكاء الاصطناعي للشركات الصغيرة والمتوسطة. كومة الإنتاج على Claude Agent SDK و MCP و n8n، مع Sentry و Langfuse و LangGraph للمراقبة وطبقة حماية داخلية.

الترخيص

MIT، حقوق النشر 2026 Matthias Meyer (StudioMeyer). انظر LICENSE.

الفئات