
A lightweight mcp to prevent poisoning CVE (CVE-2025-54136), researchers hijacking Claude Code/Copilot/Gemini via prompt injection, and hundreds of MCP servers exposed with zero auth, this mcp protects the individual developer's laptop, where most MCP servers actually run.
MCP सर्वरों के लिए सुरक्षा गेटवे — हर टूल कॉल दरवाजे पर जाँचा जाता है।
CI npm License: Apache-2.0 PRs का स्वागत है
mcp-doorman एक ड्रॉप-इन प्रॉक्सी है जो आपके AI एजेंट (Claude Desktop, Claude Code, Cursor, VS Code, कोई भी MCP क्लाइंट) और इसके द्वारा उपयोग किए जाने वाले MCP सर्वरों के बीच बैठता है। एक कमांड, शून्य इंफ्रास्ट्रक्चर, और हर tools/list और tools/call एक गार्ड पाइपलाइन से गुज़रता है:
हर कोई एक npx some-random-mcp-server दूर है अपने API कुंजियाँ और अपने मॉडल के संदर्भ विंडो में एक सीधी रेखा एक अप्रमाणित प्रक्रिया को सौंपने से। दस्तावेजित आक्रमण वर्ग वास्तविक हैं, काल्पनिक नहीं:
एंटरप्राइज़ MCP गेटवे Kubernetes क्लस्टर वाली प्लेटफ़ॉर्म टीमों के लिए मौजूद हैं। कुछ भी हल्का-वजन व्यक्तिगत डेवलपर के लैपटॉप की रक्षा नहीं करता — वह जगह जहाँ 99% MCP सर्वर वास्तव में चलते हैं। यही वह अंतर है जिसे यह प्रोजेक्ट भरता है।
# 1. एक कॉन्फ़िग बनाएँ
npx -y mcp-doorman init
# 2. doorman.config.json संपादित करें — इसमें अपने वास्तविक सर्वर डालें
# 3. वर्तमान टूल परिभाषाएँ पिन करें (पहले उपयोग पर भरोसा करें)
npx -y mcp-doorman pin --config doorman.config.json
फिर अपने क्लाइंट को सर्वरों के बजाय गेटवे की ओर इंगित करें। Claude Desktop / Claude Code / Cursor:
// पहले — हर सर्वर सीधे मॉडल से बात करता है
{
"mcpServers": {
"github": { "command": "npx", "args": ["-y", "@modelcontextprotocol/server-github"] },
"filesystem": { "command": "npx", "args": ["-y", "@modelcontextprotocol/server-filesystem", "/repos"] }
}
}
// बाद में — एक डोरमैन सबकी रक्षा करता है
{
"mcpServers": {
"doorman": {
"command": "npx",
"args": ["-y", "mcp-doorman", "run", "--config", "/absolute/path/to/doorman.config.json"]
}
}
}
टूल github__create_issue, filesystem__read_file, आदि के रूप में नेमस्पेस्ड दिखाई देते हैं, साथ ही दो बिल्ट-इन: doorman__status और doorman__recent_events (अपने एजेंट से पूछें "डोरमैन ने हाल ही में क्या ब्लॉक किया?")।
विंडोज नोट: यदि कोई सर्वर प्रविष्टि सीधे
npxका उपयोग करती है, तो इसे cmd के माध्यम से स्पॉन करें:"command": "cmd", "args": ["/c", "npx", "-y", "..."]।
git clone https://github.com/Sushank05/mcp-doorman && cd mcp-doorman
npm install
npm run demo
डेमो गेटवे को एक जानबूझकर दुर्व्यवहार करने वाले सर्वर (examples/demo-server.mjs) से जोड़ता है जो नकली क्रेडेंशियल लीक करता है, एक प्रॉम्प्ट-इंजेक्शन पेलोड प्रदान करता है, और एक विनाशकारी टूल प्रस्तुत करता है — और दिखाता है कि प्रत्येक गार्ड इसे पकड़ रहा है।
flowchart LR
A["MCP client\n(Claude Desktop, Cursor, ...)"] -- stdio --> D
subgraph D [mcp-doorman]
direction TB
P[policy] --> R[rate limit] --> AP[approval] --> RD[redaction] --> I[injection scan] --> AU[(audit log)]
end
D -- stdio --> S1[github server]
D -- stdio --> S2[filesystem server]
D -- streamable HTTP --> S3[remote server]
गेटवे आपके क्लाइंट की ओर एक MCP सर्वर है और प्रत्येक अपस्ट्रीम (stdio चाइल्ड प्रक्रियाएँ या streamable-HTTP एंडपॉइंट) की ओर एक MCP क्लाइंट है, उन्हें एक कनेक्शन के पीछे एकत्रित करता है। यह आधिकारिक TypeScript SDK पर बनाया गया है।
सब कुछ एक JSON फ़ाइल में रहता है। प्रत्येक विकल्प के साथ पूर्ण उदाहरण:
{
"servers": {
"github": {
"command": "npx",
"args": ["-y", "@modelcontextprotocol/server-github"],
"env": { "GITHUB_PERSONAL_ACCESS_TOKEN": "${GITHUB_TOKEN}" } // ${VAR} = गेटवे env से पढ़ें
},
"remote": { "url": "https://mcp.example.com/mcp", "headers": { "Authorization": "Bearer ${MCP_TOKEN}" } }
},
"policy": {
"defaultAction": "allow", // "allow" | "deny" | "approve"
"rules": [ // पहला मैच जीतता है, ऊपर से नीचे मूल्यांकन
{ "match": "*__delete*", "action": "deny", "reason": "कोई विनाशकारी टूल नहीं" },
{ "match": ["github__create_*", "*__send_*"], "action": "approve" },
{ "match": "filesystem__*", "action": "allow" }
]
},
"redaction": {
"enabled": true,
"disable": [], // बंद करने के लिए बिल्ट-इन नियम नाम
"enableOptIn": ["email"], // ऑप्ट-इन: "email", "us-ssn", "ipv4"
"custom": [{ "name": "acme-id", "pattern": "ACME-[0-9]{6}" }],
"redactArguments": false // मॉडल-प्रदत्त तर्कों को भी साफ़ करें
},
"injection": {
"action": "flag", // "flag" (मॉडल को चेतावनी) | "block" | "off"
"scanToolDescriptions": true, // tools/list पर टूल-पॉइज़निंग जाँच
"custom": []
},
"pinning": {
"enabled": true,
"onNewTool": "pin", // "pin" (TOFU) | "block" (जब तक `mcp-doorman pin`)
"onChangedTool": "block" // "block" | "warn"
},
"rateLimit": { "perMinute": 120, "perTool": { "*__send_*": 5 } },
"approval": { "fallback": "deny", "timeoutMs": 120000 }, // फ़ॉलबैक जब क्लाइंट में elicitation न हो
"audit": { "enabled": true, "includeArguments": true, "includeResults": false },
"logLevel": "info"
}
पिन स्थिति और ऑडिट लॉग डिफ़ॉल्ट रूप से कॉन्फ़िग फ़ाइल के बगल में <config-name>.pins.json / <config-name>.audit.jsonl पर सहेजे जाते हैं।
| कमांड | यह क्या करता है |
|---|---|
mcp-doorman run --config <path> | गेटवे को stdio पर शुरू करें (डिफ़ॉल्ट कमांड) |
mcp-doorman pin --config <path> | सभी अपस्ट्रीम से कनेक्ट करें और उनकी वर्तमान टूल परिभाषाओं को पिन (भरोसा) करें |
mcp-doorman init | समझदार डिफ़ॉल्ट के साथ एक स्टार्टर कॉन्फ़िग लिखें |
सुरक्षा उपकरण जो अधिक बेचता है वह किसी से बेहतर नहीं है। यह भाग पढ़ें।
deny/approve नीतियों का उपयोग करें; स्क्रीनिंग गहराई में रक्षा है।approval.fallback (डिफ़ॉल्ट रूप से अस्वीकार) पर वापस आ जाते हैं।resources/* और prompts/* प्रॉक्सीिंग (वर्तमान में केवल टूल)doorman-rules-finance, doorman-rules-healthcare…)mcp-doorman audit सबकमांड: JSONL लॉग को सुंदर-प्रिंट और क्वेरी करेंऊपर से कुछ भी लें, या एक [अच्छा पहला मुद्दा](https://github.com/YOUR_GITHUB_USERNAME/mcp-doorman/labels/good%20first%20issue) से शुरू करें। नए पता लगाने के नियम सबसे आसान योगदान हैं: एक regex + दो परीक्षण। CONTRIBUTING.md और docs/detection-rules.md देखें।
npm install
npm test # 69 परीक्षण: यूनिट + पूर्ण stdio e2e
npm run build
npm run demo # गार्ड को लाइव फायर होते देखें
Apache-2.0 — स्पष्ट पेटेंट अनुदान के साथ, किसी भी उपयोग के लिए मुफ़्त।
| हमला | यह कैसे काम करता है |
|---|
| टूल पॉइज़निंग | टूल के विवरण में छिपे दुर्भावनापूर्ण निर्देश, अधिकांश क्लाइंट UI में अदृश्य |
| रग पुल | सर्वर पहले दिन निर्दोष टूल प्रस्तुत करता है, आपके स्वीकृत करने के बाद परिभाषाएँ बदल देता है |
| अप्रत्यक्ष प्रॉम्प्ट इंजेक्शन | एक वैध टूल द्वारा लाया गया एक वेबपेज/इश्यू/ईमेल मॉडल को लक्षित करने वाले निर्देश रखता है |
| गुप्त डेटा निष्कासन | एक टूल परिणाम में लीक हुआ क्रेडेंशियल + एक इंजेक्टेड निर्देश = आपकी कुंजी किसी और के सर्वर पर |
| भगोड़े लूप | एक भ्रमित या हाईजैक एजेंट बड़े पैमाने पर डिलीट, मास-मेल, मास-स्क्रैप करता है |