
تعزيز سلسلة التوريد من الطبقة الثانية لخوادم MCP — بيانات الأداة الموقعة بـ Ed25519، إثبات الاستدعاء في وقت التشغيل، منقي الوسائط برفض افتراضي. يدافع ضد تسميم السوق + CVE-2025-69256 + CVE-2025-61591.
جزء من مجموعة أدوات StudioMeyer MCP — بُنِي في مايوركا 🌴 · ⭐ إذا استخدمته
رد مباشر على:
child_process.exec().توفر هذه الحزمة ما اختارت Anthropic ألا توفره: التحقق المشفر من أي الأدوات يُسمح للخادم بعرضها وأي استدعاءات spawn يُسمح له بفعلها. إنها تبعية جاهزة للاستخدام (drop-in)، وليست بديلًا لوقت التشغيل.
لقد بنينا أدوات وأنظمة لأنفسنا خلال العامين الماضيين. حقيقة أن هذا المستودع صغير وله نجوم قليلة ليست لأنه جديد. بل لأننا قررنا للتو مشاركة ما بنيناه. إنها ليست تجربة جديدة، إنها قصة طويلة مع إيداع حديث.
نحن نحب بناء الأشياء ومشاركتها. لا نحب تكتيكات وسائل التواصل الاجتماعي، أو حيل النمو، أو مطاردة النجوم والمتابعين. لذا هذا المستودع صغير. الكود حقيقي، يُستخدم، والأسئلة تُجاب. احكم بنفسك.
إذا ساعدك، فإن المشاركة والاختبار والتعليقات تساعدنا. إذا كان يمكن أن يكون أفضل، فالتقرير (issue) أكثر فائدة. إذا بنيت شيئًا به، أخبرنا على [email protected]. ذلك يسعد يومنا حقًا.
من استوديو صغير في بالما دي مايوركا.
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)التعليقات صادقة: 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).
| إصدار المواصفات | الحالة |
|---|---|
| 2024-11-05 | قابل للتحليل في البيان، ليس هدف الخادم المرجعي |
| 2025-03-26 | قابل للتحليل في البيان، ليس هدف الخادم المرجعي |
| 2025-06-18 | الهدف الكامل |
المكتبة مستقلة عن النقل. الخادم المرجعي يعمل بـ stdio فقط.
~/.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 موقع من المؤلف، لكن قيمة الوسيطة يتحكم فيها المهاجم. يكتشف المصفف بشكل ثابت الأنماط المعرضة للتراجع (مثل المعاملات غير المحدودة المتداخلة ) ويرفض تشغيلها، لذا لا يمكن لوسيطة واحدة مصممة بعناية تجميد مسار spawn الساخن. تحمل قواعد أيضًا حدًا أقصى للإدخال (الافتراضي 4096).ما لا تفعله هذه الحزمة (خارج النطاق):
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). البناء هو فحص تراجعي: يجب حظر كل حمولة.
--provenance.mcp-server-attestation.StudioMeyer هو استوديو AI وتصميم مقره في بالما دي مايوركا، يعمل مع عملاء حول العالم. نبني مواقع ويب مخصصة وبنية تحتية للذكاء الاصطناعي للشركات الصغيرة والمتوسطة. كومة الإنتاج على Claude Agent SDK و MCP و n8n، مع Sentry و Langfuse و LangGraph للمراقبة وطبقة حماية داخلية.
MIT، حقوق النشر 2026 Matthias Meyer (StudioMeyer). انظر LICENSE.
| الحزمة | الغرض |
|---|
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 أدوات توضح المكتبة. |
| # | الاسم | readOnlyHint | destructiveHint |
|---|
| 1 | attest_verify_manifest | true | false |
| 2 | attest_inspect_spawn | true | false |
| 3 | attest_generate_manifest_template | true | false |
| 4 | attest_sign_manifest | false | false |
| 5 | attest_keygen | false | false |
(a+)+regexmaxLengthprefix آمنة من الاجتياز. ترفض قواعد prefix مكونات المسار .. افتراضيًا (denyTraversal: true، بما في ذلك الشكل المشفر %2e%2e)، لذا يتم حظر /safe/../../etc/passwd حتى لو استوفى prefix: "/safe/".attestSpawnVerified بالتحقق من توقيع البيان قبل توثيق spawn في استدعاء واحد آمن — استخدمها بدلاً من attestSpawnStrict إلا إذا قمت بقياس زمن التحقق Ed25519 لكل spawn خارج حلقة ساخنة حقًا.