अपना खुद का MCP सर्वर लिखना
Model Context Protocol किसी भी कम्पैटिबल ऐप को आपके टूल्स इस्तेमाल करने देता है। जानें कि एक सर्वर क्या एक्सपोज़ करता है, यह कैसे स्ट्रक्चर्ड होता है, और इसे लीस्ट प्रिविलेज (कम से कम अधिकार) पर कैसे रखा जाए।
60 सेकंड में
अपना खुद का MCP सर्वर लिखना
Model Context Protocol किसी भी कम्पैटिबल ऐप को आपके टूल्स इस्तेमाल करने देता है। जानें कि एक सर्वर क्या एक्सपोज़ करता है, यह कैसे स्ट्रक्चर्ड होता है, और इसे लीस्ट प्रिविलेज (कम…
एक सर्वर क्या एक्सपोज़ कर सकता है
| प्रिमिटिव (Primitive) | यह क्या है | आमतौर पर इसे इस्तेमाल करने का फ़ैसला कौन करता है | उदाहरण |
|---|---|---|---|
| Tools | फ़ंक्शन्स जिन्हें मॉडल कॉल कर सकता है, नाम, विवरण (description) और इनपुट स्कीमा के साथ। | ऐप के नियमों के दायरे में मॉडल। | get_bus_times(stop_id) |
| Resources | डेटा जिसे ऐप पढ़ सकता है और कॉन्टेक्स्ट में जोड़ सकता है, जिसे URI द्वारा पहचाना जाता है। | ऐप या यूज़र। | एक फ़ाइल, एक डेटाबेस रिकॉर्ड, एक पॉलिसी डॉक्यूमेंट। |
| Prompts | सर्वर द्वारा ऑफ़र किए जाने वाले दोबारा इस्तेमाल होने योग्य प्रॉम्प्ट टेम्पलेट्स। | यूज़र, अक्सर किसी मेनू से। | "मैनेजर के लिए इस टिकट का सारांश बनाएं"। |
एक छोटे सर्वर का स्ट्रक्चर
- 1
सर्वर बनाएं
इसे एक नाम दें। SDK प्रोटोकॉल मैसेजेस को आपके लिए संभालता है। - 2
टूल्स रजिस्टर करें
हर टूल: एक फ़ंक्शन, एक स्पष्ट विवरण और टाइप्ड पैरामीटर्स। SDK स्कीमा तैयार करता है। - 3
रिसोर्सेज़ और प्रॉम्प्ट्स रजिस्टर करें
सिर्फ़ तभी जब आपको उनकी ज़रूरत हो। कई सर्वर सिर्फ़ टूल्स के साथ शुरू होते हैं। - 4
इसे चलाएं
लोकल ऐप के लिए इसे stdio पर शुरू करें, या रिमोट ऐप के लिए HTTP पर। - 5
क्लाइंट कनेक्ट करें
सर्वर को MCP-सपोर्ट करने वाले ऐप की सेटिंग्स में जोड़ें और हर टूल का टेस्ट करें।
# Illustrative sketch. Install and API details: see https://modelcontextprotocol.io/
from mcp.server.fastmcp import FastMCP # name may differ in your SDK version
server = FastMCP("city-bus-times")
TIMES = {"STOP-101": ["08:05", "08:25", "08:45"], "STOP-202": ["09:10", "09:40"]}
@server.tool()
def get_bus_times(stop_id: str) -> str:
"""Next departures for ONE bus stop. Use when the user gives a stop id
like STOP-101. Read-only. Returns up to 3 times, or a clear error."""
if stop_id not in TIMES:
return "No stop " + stop_id + ". Stop ids look like STOP-101."
return ", ".join(TIMES[stop_id][:3])
@server.resource("stops://list")
def list_stops() -> str:
"""All stop ids this server knows."""
return "\n".join(sorted(TIMES))
if __name__ == "__main__":
server.run() # stdio by default in many versions; check the docsआपके सर्वर के लिए लीस्ट प्रिविलेज
- सिर्फ़ वही एक्सपोज़ करें जिसकी ज़रूरत है। अपनी पूरी API को रैप न करें। कुछ सीमित टूल्स के साथ शुरुआत करें।
- कम से कम क्रेडेंशियल्स का इस्तेमाल करें। यदि सर्वर किसी डेटाबेस को कॉल करता है, तो रीड टूल्स के लिए इसे सिर्फ़ रीड-ओनली अकाउंट दें। सीक्रेट्स को एन्वायरमेंट वेरिएबल्स या सीक्रेट्स मैनेजर में रखें, टूल के विवरण या रिज़ल्ट्स में कभी नहीं।
- हर इनपुट की जांच करें। आर्ग्युमेंट्स उस मॉडल से आते हैं जिसने शायद कोई दुर्भावनापूर्ण (malicious) टेक्स्ट पढ़ा हो। किसी भी पब्लिक API की तरह वैलिडेट करें: टाइप्स, रेंज, स्वीकृत आईडी और यूज़र की परमिशन।
- फ़ाइल सिस्टम और नेटवर्क को सीमित करें। फ़ाइल टूल को केवल एक ही फ़ोल्डर दिखना चाहिए। फ़ेच टूल को केवल अनुमति वाले होस्ट्स तक ही पहुंचना चाहिए।
- छोटे, साफ़-सुथरे रिज़ल्ट्स लौटाएं। सीक्रेट्स, इंटरनल स्टैक ट्रेसेज़ या दूसरे यूज़र्स का डेटा न लौटाएं।
- विवरणों का वर्ज़न रखें और रिव्यू करें। टूल का विवरण बदलने से मॉडल का व्यवहार बदल जाता है। इसे कोड में बदलाव की तरह ही समझें।
और देखें और पढ़ें
लैब
लीस्ट-प्रिविलेज नोट्स के साथ एक छोटे रीड-ओनली MCP सर्वर का डिज़ाइन (और वैकल्पिक रूप से एक काम करने वाला वर्ज़न)।
समस्या
कॉलेज के नोटिस बोर्ड के लिए एक MCP सर्वर डिज़ाइन करें। पहले कागज़ पर लिखने वाला काम करें; कोडिंग वाला हिस्सा वैकल्पिक है।
- दो टूल्स और एक रिसोर्स की लिस्ट बनाएं। हर टूल के लिए: नाम, "कब उपयोग करें" के साथ विवरण, और टाइप्ड पैरामीटर्स। दोनों टूल्स सिर्फ़ रीड-ओनली होने चाहिए।
- एक लीस्ट-प्रिविलेज टेबल लिखें: सर्वर किस क्रेडेंशियल के साथ किस डेटा तक पहुँच सकता है, और वह क्या नहीं कर सकता है।
- तीन इनपुट चेक्स और तीन एरर मैसेजेस लिखें जिन पर मॉडल काम कर सके।
- वैकल्पिक: फ़ेक डेटा के साथ इसे बनाने के लिए modelcontextprotocol.io पर दिए गए Python क्विकस्टार्ट को फ़ॉलो करें, और प्रोजेक्ट के इंस्पेक्टर टूल या MCP-सपोर्ट करने वाले ऐप से इसका टेस्ट करें।
Server name: college-notices
Tool 1: name | description (use when / do not use for) | parameters | read or write
Tool 2: ...
Resource: uri | what it returns
Least privilege:
data it can reach:
credential used:
can NOT do:
Input checks:
Error messages:आपका काम तब पूरा होगा जब
कठिन सवाल
उत्तर देखने से पहले ख़ुद जवाब देने की कोशिश करें। अगर आप इनके जवाब दे सकते हैं, तो आप पाठ समझ गए हैं।
Q1बाद में, कॉलेज एक <code>post_notice</code> राइट टूल जोड़ना चाहता है। इसे रिलीज़ करने से पहले आप इसमें क्या जोड़ेंगे?दिखाएं
एक अलग, अधिक सीमित क्रेडेंशियल जो केवल नोटिस बना सकता है; पोस्ट करने से पहले सटीक टेक्स्ट के साथ किसी व्यक्ति को दिखाया जाने वाला कन्फ़र्मेशन स्टेप; लंबाई और कंटेंट की जांच; एक आइडम्पोटेंसी (idempotency) की ताकि दोबारा कोशिश करने पर दो बार पोस्ट न हो जाए; किसने पूछा और क्या पोस्ट किया गया इसका लॉग; और नोटिस हटाने का एक आसान तरीका। राइट टूल को एक अलग सर्वर में रखने पर विचार करें ताकि रीड-ओनली यूज़र्स इसे कभी लोड ही न करें।
Q2टूल का विवरण बदलना सुरक्षा के नज़रिए से एक बड़ा बदलाव क्यों है, भले ही कोड में कोई बदलाव न हुआ हो?दिखाएं
मॉडल क्या करना है, यह कुछ हद तक विवरणों (descriptions) के आधार पर तय करता है। बदला हुआ विवरण मॉडल से नई स्थितियों में किसी टूल को कॉल करवा सकता है, अलग डेटा भेजवा सकता है, या छिपे हुए निर्देशों का पालन करवा सकता है। थर्ड-पार्टी सर्वरों के साथ "rug pull" हमले इसी तरह काम करते हैं। इसलिए विवरणों को रिव्यू किया जाना चाहिए, उनका वर्ज़न रखा जाना चाहिए और थर्ड-पार्टी सर्वरों के लिए उन्हें पिन किया जाना चाहिए।
अक्सर पूछे जाने वाले सवाल
क्या अपने एजेंट को टूल्स देने के लिए मुझे MCP की ज़रूरत है?
नहीं। यदि एक ही प्रोग्राम में एक अकेला एजेंट टूल्स का उपयोग करता है, तो आपके अपने लूप में साधारण फ़ंक्शन कॉलिंग ज़्यादा आसान है। MCP तब मदद करता है जब आप चाहते हैं कि वही टूल्स कई एआई ऐप्स में काम करें, या चाहते हैं कि दूसरे लोग बिना कस्टम इंटीग्रेशन कोड लिखे आपके टूल्स का उपयोग कर सकें।
टूल और रिसोर्स में क्या अंतर है?
टूल एक एक्शन है जिसे मॉडल आर्ग्युमेंट्स के साथ कॉल करने का फ़ैसला लेता है। रिसोर्स वह डेटा है जिसे ऐप या यूज़र कॉन्टेक्स्ट में जोड़ने का फ़ैसला करता है, जिसे URI द्वारा पहचाना जाता है। अगर मॉडल को यह तय करना है कि कोई चीज़ कब फ़ेच करनी है, तो उसे टूल बनाएं।
बिना एआई ऐप के मैं MCP सर्वर की टेस्टिंग कैसे करूं?
MCP प्रोजेक्ट इसके लिए डेवलपर टूल्स प्रदान करता है, जैसे कि एक इंस्पेक्टर जो आपको सर्वर से कनेक्ट करने, उसके टूल्स को देखने और उन्हें खुद अपने हाथ से कॉल करने की सुविधा देता है। मौजूदा टूल्स के लिए आधिकारिक साइट देखें। साथ ही हर टूल के पीछे काम करने वाले फ़ंक्शन्स के लिए सामान्य यूनिट टेस्ट भी लिखें।
क्या कोई रिमोट MCP सर्वर मेरी फ़ाइलें देख सकता है?
सिर्फ़ वही जो क्लाइंट उसे भेजता है। लेकिन सर्वर के टूल रिज़ल्ट्स और विवरण मॉडल के कॉन्टेक्स्ट में जाते हैं, इसलिए कोई दुर्भावनापूर्ण सर्वर मॉडल को प्रभावित करने की कोशिश कर सकता है। केवल उन्हीं सर्वर्स को कनेक्ट करें जिन पर आप भरोसा करते हैं, और हर एक को उतनी ही कम एक्सेस दें जितनी ज़रूरत हो।
पाठ का टेस्ट
5 सवाल। पास होने और इस पाठ को पूरा करने के लिए 3 सही होने चाहिए (60%)।