
दूरस्थ MCP सर्वरों के सुरक्षा परीक्षण के लिए HTTP प्रॉक्सी ब्रिज, जो मानक HTTP टूल्स को JSON-RPC संदेश भेजने और सत्र प्रबंधित करने की अनुमति देता है।
यह प्रोजेक्ट एक HTTP सर्वर लागू करता है जो HTTP/1.1 अनुरोधों और एक दूरस्थ MCP सर्वर के बीच ब्रिज के रूप में कार्य करता है, जो mcp पायथन लाइब्रेरी (GitHub) का उपयोग करता है।
इस पहल का मुख्य उद्देश्य दूरस्थ परिवहन तंत्रों (HTTP+SSE या Streamable HTTP) का उपयोग करके दूरस्थ MCP सर्वरों का परीक्षण करने के लिए HTTP सुरक्षा उपकरणों का उपयोग करने में सक्षम होना है।
यह देखा गया है कि समवर्ती थ्रेड्स का उपयोग करते हुए समान id वाले JSON-RPC-V2 संदेश भेजने पर, प्रतिक्रियाएँ विलीन हो सकती हैं। अपने मूल्यांकन में टूल का उपयोग करते समय कृपया इसे ध्यान में रखें। जब तक हम इस समस्या का समाधान नहीं कर लेते, सुनिश्चित करें कि आप एकल थ्रेड का उपयोग करके परीक्षण कर रहे हैं।
आरंभ करने के लिए, रिपॉजिटरी को क्लोन करें और आवश्यक निर्भरताएँ स्थापित करें:
git clone <repository-url>
cd http-mcp-bridge
pip install -r requirements.txt
HTTP सर्वर चलाने के लिए, निम्नलिखित कमांड निष्पादित करें:
python3 main.py --remote-url="http://127.0.0.1:8787/mcp"
HTTP सर्वर डिफ़ॉल्ट इंटरफ़ेस और पोर्ट (http://127.0.0.1:8000) पर सुन रहा होगा, और MCP कनेक्शन प्रदान किए गए दूरस्थ URL के साथ स्थापित होगा। दिए गए URL पर समर्थित परिवहन तंत्र लागू करने वाला एक दूरस्थ MCP सर्वर मौजूद होना चाहिए। HTTP सर्वर स्वचालित रूप से सही परिवहन तंत्र, Streamable HTTP या HTTP+SSE, का पता लगाता था, लेकिन यह कुछ उत्पादन वातावरणों में समस्याएँ पैदा कर रहा था, इसलिए इसे अब अक्षम कर दिया गया है। यह डिफ़ॉल्ट रूप से Streamable HTTP परिवहन तंत्र का उपयोग करता था। हम HTTP+SSE के उपयोग को अनिवार्य करने के लिए एक फ्लैग बनाएँगे, लेकिन तब तक, आप बस कोड संपादित करके उस परिवहन तंत्र को सक्षम कर सकते हैं।
आप फिर सर्वर पर HTTP अनुरोध भेज सकते हैं, जो उन्हें SSE/Streamable HTTP क्लाइंट्स तक पहुँचाएगा।
पायथन SDK में लागू तंत्र संबंधित परिवहन तंत्र का उपयोग करके एंडपॉइंट के साथ संचार करने के लिए एक रीड चैनल और एक राइट चैनल स्थापित करता है। यह HTTP से MCP ब्रिज HTTP अनुरोधों को राइट चैनल पर अग्रेषित करता है, और रीड चैनल में प्रतिक्रिया की प्रतीक्षा करता है (यदि लागू हो)। प्राप्त होने पर, उस प्रतिक्रिया को HTTP अनुरोध की प्रतिक्रिया के रूप में अग्रेषित किया जाता है।
HTTP अनुरोध timeout पैरामीटर का समर्थन करते हैं, जो त्रुटि संदेश लौटाने से पहले ब्रिज द्वारा रीड चैनल में प्रतिक्रिया की प्रतीक्षा करने के लिए अधिकतम सेकंड की संख्या सीमित करता है। यदि timeout शून्य है, तो HTTP से MCP ब्रिज बिल्कुल प्रतीक्षा नहीं करता है।
चूँकि HTTP से MCP ब्रिज MCP सर्वर के साथ कई सत्रों का समर्थन करता है, पहला कदम एक सत्र id प्राप्त करना है, जिसका उपयोग आगे के अनुरोधों में किया जाएगा।
अनुरोध:
GET /mcp/messages HTTP/1.1
Host: 127.0.0.1:8000
Accept-Encoding: gzip, deflate, br
Connection: keep-alive
User-Agent: python-httpx/0.28.1
Content-Type: application/json
Cache-Control: no-store
Content-Length: 0
प्रतिक्रिया:
HTTP/1.1 400 Bad Request
date: Fri, 02 May 2025 15:40:32 GMT
server: uvicorn
content-length: 87
content-type: application/json
{"detail":"Invalid session id. Try /mcp/messages/7fc2cce5-3b0b-4d63-9df6-e703c1df091c"}
यह सत्र id MCP क्लाइंट और सर्वर के बीच स्थापित सत्र id से भिन्न और स्वतंत्र है। बाद वाले को mcp लाइब्रेरी द्वारा आंतरिक रूप से संभाला जाता है।
एक पिंग विधि है जिसे यह सत्यापित करने के लिए लागू किया जा सकता है कि MCP सेवा मौजूद है और चुना गया परिवहन तंत्र सही है।
अनुरोध:
POST /mcp/messages/7fc2cce5-3b0b-4d63-9df6-e703c1df091c HTTP/1.1
Host: 127.0.0.1:8000
Accept-Encoding: gzip, deflate, br
Connection: keep-alive
User-Agent: python-httpx/0.28.1
Content-Type: application/json
Cache-Control: no-store
Authorization: Bearer [REDACTED]
Content-Length: 40
{"method":"ping","jsonrpc":"2.0","id":2}
प्रतिक्रिया:
[{"jsonrpc":"2.0","id":2,"result":{}}]
MCP संचार में पहला कदम आरंभीकरण हैंडशेक है, जहाँ दोनों पीयर अपनी उपलब्ध क्षमताओं को साझा करते हैं।
अनुरोध:
POST /mcp/messages/7fc2cce5-3b0b-4d63-9df6-e703c1df091c HTTP/1.1
Host: 127.0.0.1:8000
Accept-Encoding: gzip, deflate, br
Connection: keep-alive
User-Agent: python-httpx/0.28.1
Content-Type: application/json
Cache-Control: no-store
Authorization: Bearer [REDACTED]
Content-Length: 213
{"method": "initialize", "params": {"protocolVersion": "2024-11-05", "capabilities": {"sampling": {}, "roots": {"listChanged": true}}, "clientInfo": {"name": "mcp", "version": "0.1.0"}}, "jsonrpc": "2.0", "id": 0}
प्रतिक्रिया:
[{"jsonrpc":"2.0","id":0,"result":{"protocolVersion":"2024-11-05","capabilities":{"tools":{}},"serverInfo":{"name":"Demo","version":"1.0.0"}}}]
हैंडशेक को इस संदेश का उपयोग करके बंद करने की आवश्यकता है, जिसकी कोई प्रतिक्रिया नहीं होती है, इसलिए हम इस समय timeout=0 का उपयोग कर सकते हैं। हमें एक टाइमआउट त्रुटि संदेश प्राप्त होगा, लेकिन यह अपेक्षित है।
अनुरोध:
POST /mcp/messages/7fc2cce5-3b0b-4d63-9df6-e703c1df091c?timeout=0 HTTP/1.1
Host: 127.0.0.1:8000
Accept-Encoding: gzip, deflate, br
Connection: keep-alive
User-Agent: python-httpx/0.28.1
Content-Type: application/json
Cache-Control: no-store
Authorization: Bearer [REDACTED]
Content-Length: 54
{"method":"notifications/initialized","jsonrpc":"2.0"}
प्रतिक्रिया:
{"message":"Timeout waiting for messages"}
एक बार हैंडशेक पूरा हो जाने के बाद, हम उपलब्ध विधियों को लागू कर सकते हैं, जैसे कि tools/list (टूल सूचीबद्ध करना)।
अनुरोध:
POST /mcp/messages/7fc2cce5-3b0b-4d63-9df6-e703c1df091c HTTP/1.1
Host: 127.0.0.1:8000
Accept-Encoding: gzip, deflate, br
Connection: keep-alive
User-Agent: python-httpx/0.28.1
Content-Type: application/json
Cache-Control: no-store
Content-Length: 46
{"method":"tools/list","jsonrpc":"2.0","id":1}
प्रतिक्रिया:
[{"jsonrpc":"2.0","id":1,"result":{"tools":[{"name":"add","inputSchema":{"type":"object","properties":{"a":{"type":"number"},"b":{"type":"number"}},"required":["a","b"],"additionalProperties":false,"$schema":"http://json-schema.org/draft-07/schema#"}}]}}]
अंत में, हम टूल लागू कर सकते हैं या अन्य क्षमताओं का उपयोग कर सकते हैं।
अनुरोध:
POST /mcp/messages/7fc2cce5-3b0b-4d63-9df6-e703c1df091c HTTP/1.1
Host: 127.0.0.1:8000
Accept-Encoding: gzip, deflate, br
Connection: keep-alive
User-Agent: python-httpx/0.28.1
Content-Type: application/json
Cache-Control: no-store
Content-Length: 100
{"method":"tools/call","params":{"name":"add","arguments":{"a":1, "b":2 }},"jsonrpc":"2.0","id":2}
प्रतिक्रिया:
[{"jsonrpc":"2.0","id":2,"result":{"content":[{"type":"text","text":"3"}]}}]
योगदान का स्वागत है! किसी भी संवर्द्धन या बग फिक्स के लिए कृपया एक issue खोलें या pull request सबमिट करें।
यह प्रोजेक्ट MIT लाइसेंस के अंतर्गत लाइसेंस प्राप्त है। अधिक विवरण के लिए LICENSE फ़ाइल देखें।