
mcp-server-attestation v0.2.0
MCP सर्वरों के लिए Layer-2 सप्लाई-चेन हार्डनिंग — Ed25519-हस्ताक्षरित टूल मैनिफेस्ट, रनटाइम स्पॉन-एटेस्टेशन, डिफ़ॉल्ट-अस्वीकार आर्गुमेंट सैनिटाइज़र। मार्केटप्लेस-पॉइज़निंग + CVE-2025-69256 + CVE-2025-61591 से बचाव करता है।
StudioMeyer MCP Stack का हिस्सा — Mallorca में निर्मित 🌴 · ⭐ यदि आप इसका उपयोग करते हैं
mcp-server-attestation
Model Context Protocol सर्वरों के लिए Layer-2 सप्लाई-चेन हार्डनिंग। Ed25519-हस्ताक्षरित टूल मेनिफेस्ट, रनटाइम स्पॉन-अटेस्टेशन, डिफ़ॉल्ट-डेनी आर्गुमेंट सैनिटाइज़र।इसका सीधा जवाब है:
- OX Security मार्केटप्लेस-पॉइज़निंग, अप्रैल 2026 — 11 में से 9 MCP रजिस्ट्रियों ने दुर्भावनापूर्ण सर्वर स्वीकार किए। Anthropic की प्रकाशित स्थिति: "अपेक्षित व्यवहार"।
- CVE-2025-69256 —
child_process.exec()कमांड इंजेक्शन के ज़रिए Serverless Framework MCP RCE। - CVE-2025-61591 — स्पॉन हाईजैक के साथ OAuth-स्थापित दुर्भावनापूर्ण सर्वर के माध्यम से Cursor MCP RCE।
यह पैकेज वह प्रदान करता है जो Anthropic ने नहीं करना चुना: क्रिप्टोग्राफ़िक सत्यापन कि एक सर्वर कौन से टूल उजागर कर सकता है और उसे कौन से स्पॉन कॉल करने की अनुमति है। यह एक ड्रॉप-इन डिपेंडेंसी है, रनटाइम रिप्लेसमेंट नहीं।
हमारी ओर से एक नोट
हम पिछले दो वर्षों से अपने लिए टूल और सिस्टम बना रहे हैं। यह रिपॉजिटरी छोटी है और इस पर कुछ ही स्टार हैं — इसका कारण यह नया होना नहीं है। इसका कारण यह है कि हमने अभी-अभी यह तय किया है कि जो हमने बनाया है उसे साझा करें। यह कोई नया प्रयोग नहीं है, यह एक लंबी कहानी है जिसमें हाल ही में एक कमिट हुआ है।
हमें चीज़ें बनाना और उन्हें साझा करना पसंद है। हमें सोशल मीडिया की तरकीबें, ग्रोथ हैक्स, या स्टार और फॉलोअर्स के पीछे भागना पसंद नहीं है। इसलिए यह रिपॉजिटरी छोटी है। कोड असली है, उसका उपयोग होता है, इश्यू के जवाब दिए जाते हैं। आप खुद निर्णय लीजिए।
अगर यह आपके काम आता है, तो साझा करना, परीक्षण और प्रतिक्रिया हमारी मदद करते हैं। अगर इसमें सुधार की गुंजाइश है, तो एक इश्यू अधिक उपयोगी है। अगर आप इसके साथ कुछ बनाते हैं, तो हमें [email protected] पर बताएं। इससे सचमुच हमारा दिन बन जाता है।
Palma de Mallorca के एक छोटे स्टूडियो से।
पैकेज (npm वर्कस्पेस)
| पैकेज | उद्देश्य |
|---|---|
mcp-server-attestation (packages/lib) | लाइब्रेरी: Ed25519 साइन/वेरिफाई, मेनिफेस्ट स्कीमा, सैनिटाइज़र, स्पॉन अटेस्टर, TOFU ट्रस्ट स्टोर। |
mcp-attest-cli (packages/cli) | CLI mcp-attest: keygen, sign, verify, inspect, fingerprint, check-pin। |
mcp-attest-demo (packages/demo-server) | रेफ़रेंस MCP सर्वर (stdio, spec 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 नहीं, कोई डेमॉन नहीं।
अगर आप हर स्पॉन पर हस्ताक्षर को दोबारा सत्यापित करना चाहते हैं (एक अनसत्यापित या बदले गए मेनिफेस्ट के गेट तक पहुँचने के विरुद्ध डिफेंस-इन-डेप्थ), तो इसके बजाय सिंगल फेल-सेफ कॉल का उपयोग करें — यह सत्यापित करता है फिर अटेस्ट करता है:
import { attestSpawnVerified, type SignedManifest } from "mcp-server-attestation";
attestSpawnVerified(signed as SignedManifest, { command, args });
टूल (रेफ़रेंस सर्वर mcp-attest-demo)
| # | नाम | 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 |
एनोटेशन ईमानदार हैं: attest_sign_manifest और attest_keygen डिस्क पर फ़ाइलें लिखते हैं, इसलिए वे रीड-ओनली नहीं हैं, लेकिन वे मौजूदा डेटा को नष्ट नहीं करते, इसलिए destructiveHint false रहता है। प्रति-टूल क्षमता तालिका के लिए docs/THREAT-MODEL.md देखें।
CLI
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 के साथ बाहर निकलता है।
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 Rekor ट्रांसपेरेंसी लॉग के विरुद्ध क्रॉस-रेफरेंस करने के लिए
--sigstoreऑप्ट-इन करें। - डिफ़ॉल्ट-डेनी आर्गुमेंट सैनिटाइज़र।
shellSafeStringहर ASCII शेल मेटाकैरेक्टर, NUL, CR, LF, VT, FF, NEL, ज़ीरो-विड्थ कैरेक्टर, BOM, RTL/LTR ओवरराइड, Trojan-Source आइसोलेट्स और फुलविड्थ-लैटिन कन्फ्यूज़ेबल्स को ब्लॉक करता है। अलाउलिस्ट व्यवहार के लिए स्पष्टregex/enum/prefix/literalनियम किस्मों की आवश्यकता होती है। - ReDoS-सुरक्षित
regexनियम। एकregexनियम का पैटर्न लेखक द्वारा हस्ताक्षरित होता है, लेकिन आर्गुमेंट मान हमलावर-नियंत्रित होता है। सैनिटाइज़र स्थिर रूप से बैकट्रैकिंग-प्रवण पैटर्न (नेस्टेड असीमित क्वांटिफायर जैसे(a+)+) का पता लगाता है और उन्हें चलाने से मना कर देता है, इसलिए एक अकेला क्राफ्टेड आर्गुमेंट स्पॉन हॉट पाथ को फ्रीज़ नहीं कर सकता।regexनियमों परmaxLengthइनपुट कैप (डिफ़ॉल्ट 4096) भी होती है। - ट्रैवर्सल-सुरक्षित
prefixनियम।prefixनियम डिफ़ॉल्ट रूप से..पाथ कंपोनेंट को अस्वीकार करते हैं (denyTraversal: true, जिसमें%2e%2eएन्कोडेड रूप भी शामिल है), इसलिए/safe/../../etc/passwdब्लॉक हो जाता है, भले ही वहprefix: "/safe/"को संतुष्ट करता हो। - पहले सत्यापित करें, फिर अटेस्ट करें।
attestSpawnVerifiedएक फेल-सेफ कॉल में स्पॉन को अटेस्ट करने से पहले मेनिफेस्ट हस्ताक्षर की जाँच करता है —attestSpawnStrictके बजाय इसका उपयोग करें, जब तक कि आपने प्रति-स्पॉन Ed25519 वेरिफाई को वास्तविक हॉट लूप से बाहर माप न लिया हो। - कैनोनिकल 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 Directory में सबमिट किया गया।
- लाइब्रेरी अलग से
mcp-server-attestationके रूप में प्रकाशित की गई।
StudioMeyer के बारे में
StudioMeyer Palma de Mallorca में स्थित एक AI और डिज़ाइन स्टूडियो है, जो दुनिया भर के ग्राहकों के साथ काम करता है। हम छोटे और मध्यम व्यवसायों के लिए कस्टम वेबसाइट और AI इंफ्रास्ट्रक्चर बनाते हैं। प्रोडक्शन स्टैक Claude Agent SDK, MCP और n8n पर आधारित है, जिसमें अवलोकन के लिए Sentry, Langfuse और LangGraph और एक इन-हाउस गार्ड परत शामिल है।
लाइसेंस
MIT, कॉपीराइट 2026 Matthias Meyer (StudioMeyer)। LICENSE देखें।