वापस ब्लॉग पर

MCP सर्वर उदाहरण: एक वेब शोध कार्यप्रवाह तैयार करें

Daniel Kim
Daniel Kim

Lead Scraping Automation Engineer

29-Sep-2026

TL;DR:

  • MCP सर्वर उदाहरण तब उपयोगी होते हैं जब उनके भूमिकाएँ स्पष्ट होती हैं। एक वेब-डेटा सर्वर स्रोत प्राप्त करता है, जबकि एक फ़ाइल प्रणाली सर्वर अनुमोदित स्थानीय वस्तुओं को संभालता है।
  • उपकरण खोज जुड़ी सतह की सत्यापित करती है। पुराने कॉन्फ़िगरेशन से एक उपकरण संख्या की नकल करने के बजाय वास्तविक नामों और स्कीमा का निरीक्षण करें।
  • नेमस्पेसिंग होस्ट सीमा पर है। एक नेमस्पेस वाले एप्लिकेशन क्रिया को मार्गदर्शित करते समय सर्वर के मूल उपकरण नाम को बरकरार रखें।
  • एक स्कोप्ड निर्देशिका वस्तु कार्यप्रवाह को सीमित करती है। एक शोध कार्य के लिए एक साक्ष्य फ़ोल्डर की आवश्यकता होती है, इसलिए पूरे होम निर्देशिका को उजागर न करें।
  • एक उपकरण परिणाम साक्ष्य है, निर्देश नहीं। पुनः प्राप्त पृष्ठ और फ़ाइलें नई क्रियाओं को अधिकृत नहीं कर सकती हैं या शोध क्षेत्र का विस्तार नहीं कर सकती हैं।

परिचय: प्रत्येक सर्वर को एक निर्दिष्ट कार्य दें

एक शोध कार्यप्रवाह विभिन्न संसाधन सीमाओं को पार करता है। खोज उम्मीदवारों को खोजती है, पृष्ठ पहुंच साक्ष्य प्राप्त करती है, और स्थानीय संग्रहण उत्तर को समर्थन देने के लिए उपयोग की गई सामग्री को बनाए रखता है। प्रत्येक सीमा के लिए एक सर्वर को कनेक्ट करना केवल तब उपयोगी होता है जब होस्ट अपनी जिम्मेदारियों को स्पष्ट रखता है।

MCP उपकरणों को खोजने और कॉल करने के लिए एक सामान्य इंटरफ़ेस प्रदान करता है। यह स्वतः यह निर्णय नहीं करता कि कौन सा उपकरण उपयुक्त है, चाहे स्रोत एक दावा का समर्थन करता हो, या एक फ़ाइल कहाँ लिखी जा सकती है। ये निर्णय एप्लिकेशन और इसकी अनुमति का हिस्सा बने रहते हैं।

नीचे के उदाहरण Scrapeless MCP को एक स्कोप्ड फ़ाइल प्रणाली सर्वर के साथ मिलाते हैं। वे Scrapeless MCP उपयोग मामलों को एक कार्यान्वयन पैटर्न में विस्तारित करते हैं जो उपकरण मार्गदर्शन और साक्ष्य हस्तांतरण को स्पष्ट बनाता है।

इनमें से सर्वर उदाहरणों के साथ आप क्या कर सकते हैं

एक छोटे से सेट में ध्यानपूर्वक स्कोप किए गए उपकरण कई विशिष्ट शोध कार्यों का समर्थन कर सकते हैं।

उदाहरण वेब-डेटा भूमिका स्थानीय वस्तु भूमिका पूर्णता की शर्त
अनुसंधान संक्षिप्त अनुमोदित स्रोतों को खोजें और पढ़ें स्रोत अंश बनाए रखें प्रत्येक निष्कर्ष का समर्थन करने वाला साक्ष्य हो
प्रलेखन तुलना चयनित संदर्भ पृष्ठ प्राप्त करें सहेजे गए संस्करणों की तुलना करें बदले हुए दावे स्रोत पाठ की ओर इंगित करते हैं
कैटलाग जांच अनुमत सार्वजनिक सूचियों को पढ़ें मान्य पंक्तियाँ सहेजें आवश्यक फ़ील्ड और पहचान की जाँच पास करें
उद्धरण सुधार उद्धृत पृष्ठ पर फिर से जाएँ प्रस्तावित साक्ष्य बंडल को अपडेट करें स्रोत अभी भी उद्धृत दावे का समर्थन करता है
केवल ब्राउज़र पृष्ठ प्रस्तुत सामग्री का निरीक्षण करें प्रासंगिक अवलोकन को बनाए रखें इच्छित पृष्ठ स्थिति की पुष्टि की गई है

एक डेटाबेस उपकरण एक बाद की सीमा हो सकती है, लेकिन इसे मान्य रिकॉर्ड स्वीकार करने चाहिए न कि पृष्ठ से सामान्य पाठ। यहाँ दिए गए उदाहरण स्थानीय साक्ष्य हैंडलिंग पर रुक जाते हैं, इसलिए एक डेटाबेस लेखा-जोखा अनुशासन में चुपचाप शामिल नहीं होता है।

वेब-डेटा लेयर के लिए Scrapeless MCP का उपयोग क्यों करें?

Scrapeless MCP खोज, पृष्ठ-प्रवेश, और ब्राउज़र उपकरणों को एक साझा MCP सतह के माध्यम से उजागर करता है। एक संगत होस्ट उपकरणों को खोज सकता है और हर पृष्ठ क्रिया के लिए एक अलग एकीकरण बनाए बिना एक अनुमोदित संचालन चुन सकता है।

Scrapeless MCP कनेक्शन सेटिंग्स दस्तावेज़ स्थानीय stdio और होस्ट किए गए स्ट्रीमबल HTTP विकल्पों को दस्तावेज करता है। यह उदाहरण stdio का उपयोग करता है ताकि सर्वर प्रक्रियाएँ और उनकी जीवनकाल दृश्य हों। Scrapeless एजेंट ब्राउज़र तब ब्राउज़र कार्यान्वयन सतह है जब शोध वास्तव में प्रस्तुत इंटरैक्शन की आवश्यकता होती है।

MCP उपकरण खोज अनुबंध नामों और इनपुट स्कीमाओं को शामिल करता है। कनेक्टेड सर्वर से उन मूल्यों को पढ़ें। एक wrappers अपने उपकरण सतह को आधारभूत सेवा से स्वतंत्र रूप से बदल सकता है।

पूर्वापेक्षाएँ: खोज को सेवा पहुंच से अलग करें

एक वर्तमान Node.js वातावरण का उपयोग करें जो पैकेज द्वारा समर्थित है और एक नया कार्यशील निर्देशिका। उदाहरण के लिए एक प्रमाणित साक्ष्य निर्देशिका की भी आवश्यकता है जिसमें एक वास्तविक पाठ कैप्चर नाम source.txt हो, जो वहां एक अनुमोदित सार्वजनिक स्रोत से रखा गया हो। यह सत्यापित करने के लिए कोई लेखन उपकरण की आवश्यकता नहीं है कि फ़ाइल प्रणाली सर्वर उस फ़ाइल को पढ़ सकता है।

प्रमाणित Scrapeless संचालन के लिए एक मान्य SCRAPELESS_KEY की आवश्यकता होती है। एक मॉडल प्रोवाइडर कुंजी एक मॉडल-संचालित शोध लूप के लिए अलग से आवश्यक होती है। उन दूरस्थ संचालन का प्रमाणन बिना प्रमाण पत्र के लंबित लाइव सत्यापन में बना रहता है; स्थानीय उपकरण स्कीमाओं की खोज सेवा प्रमाणीकरण को साबित नहीं करती है।

फ़ाइल प्रणाली सर्वर एक संदर्भ कार्यान्वयन है जिसमें अनुमति प्राप्त निर्देशिकाओं के अंदर पढ़ने और लिखने की क्षमताएँ हैं। नीचे दिया गया होस्ट रजिस्ट्रेशन जानबूझकर केवल एक संकीर्ण उपसमुच्चय उजागर करता है। होस्ट फ़िल्टरिंग उपयोगी है लेकिन यह ऑपरेटिंग-सिस्टम आइसोलेशन और सर्वर-साइड एक्सेस नियंत्रण का स्थानापन्न नहीं है।

दो सर्वरों को जोड़ें और उनके उपकरणों का निरीक्षण करें

निम्नलिखित सेटअप पिन किए गए पैकेज स्थापित करता है और एक साक्ष्य निर्देशिका बनाता है। क्लाइंट चलाने से पहले अपने स्वीकृत स्रोत कैप्चर को उस निर्देशिका में डालें।

bash Copy
npm install @modelcontextprotocol/sdk@1.30.1 \
  @modelcontextprotocol/server-filesystem@2026.8.31 \
  scrapeless-mcp-server@0.6.3
mkdir -p evidence

अगली स्क्रिप्ट को inspect_servers.mjs के रूप में सहेजें और इसे node_modules और evidence समाहित निर्देशिका से चलाएँ। यह दोनों सर्वरों से जुड़ता है, चयनित उपकरणों को मान्य करता है, एक एप्लिकेशन रजिस्ट्र्री बनाता है, और स्वीकृत स्थानीय कैप्चर को पढ़ता है। यह कोई Scrapeless सेवा कॉल नहीं करता है।

नोट: स्थानीय Scrapeless प्रक्रिया शुरू करने के लिए एक गैर-खाली SCRAPELESS_KEY की आवश्यकता होती है। सामान्य उपयोग के लिए अपनी असली कुंजी कॉन्फ़िगर करें। स्थानीय मेटाडेटा खोज को स्पष्ट गैर-प्रमाणन प्रारंभिक मान के साथ अलग से प्रयोग किया गया था; यह जांच वेब पुनर्प्राप्ति को प्रमाणित नहीं करती है। प्रमाणित वेब कॉल और एक मॉडल-चालित अनुसंधान चाल ज़िंदा सत्यापन के लिए लंबित हैं।

javascript Copy
import { Client } from '@modelcontextprotocol/sdk/client/index.js';
import { StdioClientTransport } from '@modelcontextprotocol/sdk/client/stdio.js';
import { resolve } from 'node:path';

if (!process.env.SCRAPELESS_KEY) {
  throw new Error('Configure SCRAPELESS_KEY before starting');
}
const directory = resolve('evidence');
const specs = [
  ['web', 'node_modules/scrapeless-mcp-server/build/index.js', []],
  ['files', 'node_modules/@modelcontextprotocol/server-filesystem/dist/index.js',
    [directory]]
];
const clients = new Map();
const registry = new Map();
const permitted = {
  web: new Set(['google_search', 'scrape_markdown']),
  files: new Set(['read_text_file', 'list_allowed_directories'])
};
try {
  for (const [prefix, entry, args] of specs) {
    const client = new Client({ name: 'research-host', version: '1.0.0' });
    clients.set(prefix, client);
    const transport = new StdioClientTransport({
      command: process.execPath, args: [resolve(entry), ...args],
      env: { ...process.env }, stderr: 'pipe'
    });
    await client.connect(transport);
    let cursor;
    const discovered = [];
    do {
      const page = await client.listTools(cursor ? { cursor } : {});
      discovered.push(...page.tools);
      cursor = page.nextCursor;
    } while (cursor);
    for (const name of permitted[prefix]) {
      const tool = discovered.find(item => item.name === name);
      if (!tool) throw new Error(`Required tool missing: ${prefix}:${name}`);
      registry.set(`${prefix}:${name}`, { client, name, schema: tool.inputSchema });
    }
    console.log(JSON.stringify({ server: prefix, discovered: discovered.length }));
  }
  const host = Object.freeze({
    tools: [...registry.keys()],
    async call(key, arguments_) {
      const route = registry.get(key);
      if (!route) throw new Error('Tool not permitted');
      return route.client.callTool({ name: route.name, arguments: arguments_ });
    }
  });
  const result = await host.call('files:read_text_file', {
    path: resolve(directory, 'source.txt')
  });
  if (result.isError) throw new Error('Filesystem read failed');
  const text = result.content.filter(part => part.type === 'text')
    .map(part => part.text).join('\n');
  if (!text.trim()) throw new Error('Evidence capture is empty');
  console.log(JSON.stringify({ exposed_tools: host.tools,
    local_capture_characters: text.length }));
} finally {
  for (const client of clients.values()) await client.close();
}

web:google_search और files:read_text_file नाम एप्लिकेशन-स्वामित्व वाले रूटिंग कुंजियाँ हैं। दूरस्थ कॉल अभी भी मूल सर्वर उपकरण नाम का उपयोग करता है। यह भेद नोट करता है कि एक प्रोटोकॉल या SDK स्वचालित रूप से एक नामस्थान नहीं जोड़ता है।

फ़ाइल सिस्टम प्रक्रिया केवल चयनित साक्ष्य निर्देशिका को अपनी प्रारंभिक सीमा के रूप में प्राप्त करती है। MCP जड़ों प्रासंगिक फ़ाइल सिस्टम सीमाओं का वर्णन करती हैं, लेकिन जड़ें स्वयं एक सुरक्षा सैंडबॉक्स नहीं हैं। सर्वर की निर्देशिका लागू करने और मेज़बान के उपलब्ध उपकरणों को अलग से मान्य करें।

Scrapeless के साथ स्क्रैपिंग शुरू करें

Scrapeless के साथ अपनी वेब स्क्रैपिंग और स्वचालन कार्यप्रवाह को शक्ति दें!
आज ही साइन अप करें और $5 का मुफ्त क्रेडिट प्राप्त करें — क्रेडिट कार्ड की आवश्यकता नहीं।

अभी अपने मुफ्त क्रेडिट का दावा करें Scrapeless डैशबोर्ड में।

उदाहरण 1: एक शोध स्रोत खोजें और पढ़ें

एक खोज-और-पढ़ने की कार्यप्रवाह खोज का उपयोग करती है ताकि उम्मीदवारों को ढूंढा जा सके और स्रोत पुनर्प्राप्त किया जा सके जो उत्तर का समर्थन करेगा। इसे एक खोज स्निप्पेट को आधारभूत पृष्ठ के लिए प्रतिस्थापन के रूप में नहीं मानना चाहिए।

एक प्रोटोकॉल के बारे में कार्य के लिए, उम्मीदवारों को प्रासंगिक मानक संगठन तक सीमित करें। अपने तर्कों को बनाने से पहले खोजे गए google_search स्कीमा का निरीक्षण करें, फिर चयनित सार्वजनिक URL के लिए scrape_markdown का उपयोग करें। वर्तमान उपकरण सतह में खोज के लिए q और पृष्ठ पढ़ने के लिए url शामिल हैं; एप्लिकेशन प्रतिबंध भी यह सीमित करना चाहिए कि कौन से स्रोत चयनित किए जा सकते हैं।

यह उदाहरण खोज के बाद प्रमाणित अगले चरण का वर्णन करता है। एक मान्य सेवा प्रमाण-पत्र के बिना, सत्यापित स्थानीय वायरिंग पर रोकें और अनुरोधित वेब परिणाम को अनसुलझा रखें।

उदाहरण 2: संदर्भ खोए बिना दस्तावेज़ की तुलना करें

एक दस्तावेज़ तुलना के लिए अलग-अलग स्रोत कैप्चर और स्पष्ट संस्करण या संग्रह समय की आवश्यकता होती है। अंतर सारांश बनाने से पहले संबंधित पाठ और स्रोत पते को सहेजें।

फ़ाइल सिस्टम सर्वर स्वीकृत कैप्चर को पढ़ सकता है ताकि मेज़बान उनकी तुलना कर सके। एक पुरानी फ़ाइल पढ़ने से यह स्थापित नहीं होता है कि इसकी सामग्री वर्तमान है, और एक बदले हुए पैरा का अर्थ यह नहीं है कि उत्पाद की क्षमता बदली है। जब वह भेद महत्वपूर्ण हो, तो प्रासंगिक कार्यान्वयन या रिलीज़ स्रोत को मान्य करें।

एक उत्पत्ति मॉडल डेटा को उन गतिविधियों और एजेंटों से अलग करता है जिन्होंने इसे उत्पन्न किया। इस सिद्धांत को लागू करें कि स्रोत कैसे प्राप्त किया गया और एक व्युत्पन्न बयान कैसे बनाया गया।

उदाहरण 3: केवल गायब स्थिति के लिए एक ब्राउज़र जोड़ें

जब एक स्वीकृत स्रोत को प्रस्तुत सामग्री या एक विशिष्ट इंटरैक्शन की आवश्यकता होती है जिसे पृष्ठ-पाठ पढ़ नहीं सकता, तो एक ब्राउज़र कदम उपयुक्त होता है। इसे उस कार्यप्रवाह से बाहर रख दें जिसके स्रोत पहले से ही सीधे दस्तावेज़ के रूप में उपलब्ध हैं।

होस्ट की अनुमति सूची में जोड़ने से पहले वर्तमान ब्राउज़र उपकरणों का पता लगाएँ। आवश्यक सत्र संचालन को जानबूझकर चुनें, बाद की क्रियाओं को सत्र पहचानकर्ता से संबद्ध रखें, और जब कार्य समाप्त हो जाए तो सत्र बंद करें। ऊपर संकीर्ण रजिस्ट्र्री ब्राउज़र क्रियाओं को उजागर नहीं करती है; इसे बढ़ाना एक स्पष्ट एप्लिकेशन परिवर्तन है।

एक पृष्ठ में ऐसा पाठ हो सकता है जो एजेंट से कॉन्फ़िगरेशन बदलने या फ़ाइल लिखने के लिए कहता है। उस पाठ को स्रोत सामग्री के रूप में मानें। केवल उपयोगकर्ता का कार्य और एप्लिकेशन की अनुमतियाँ क्रियाओं को अधिकृत कर सकती हैं।

आप वास्तव में इसका उपयोग कैसे करते हैं: अनुसंधान होस्ट को प्रॉम्प्ट करें

एक अच्छा प्रॉम्प्ट उपकरण चयन से पहले सीमा और साक्ष्य आवश्यकताओं को परिभाषित करता है। उदाहरण के लिए:

“यह बताएं कि क्या चयनित प्रोटोकॉल विश्वसनीय वितरण को परिभाषित करता है। केवल स्वीकृत मानक क्षेत्र का उपयोग करें, संबंधित स्रोत पाठ पढ़ें, और समर्थन करने वाले अंशों के साथ एक संक्षिप्त उत्तर लौटाएं। प्रस्तावित कलाकृतियों को अनुसंधान फ़ोल्डर के भीतर रखें। Unsupported दावों को अनसुलझा के रूप में रिपोर्ट करें।”
होस्ट की योजना को उपकरणों की खोज करनी चाहिए, एक अनुमति वाली स्रोत का पता लगाना चाहिए, उसे प्राप्त करना चाहिए, साक्ष्य का मूल्यांकन करना चाहिए, और उत्तर तैयार करना चाहिए। एक मॉडल केवल उपलब्ध उपकरण नीति के भीतर कार्य चुनता है। ऊपर स्थानीय होस्ट ऑब्जेक्ट रूटिंग का प्रदर्शन करता है; यह एक पूर्ण भाषा-आधारित एजेंट लूप नहीं है।

आपको क्या मिलता है और यह क्या प्रमाणित करता है

खोज स्क्रिप्ट प्रत्येक जुड़े सर्वर द्वारा विज्ञापित उपकरणों की संख्या, होस्ट द्वारा प्रदर्शित संकीर्ण सूची, और वास्तविक स्थानीय कैप्चर की वर्ण संख्या की रिपोर्ट करती है। ये आउटपुट स्थानीय हस्ताक्षर, राउटिंग निर्माण, और एक स्कोप्ड फ़ाइल पढ़ने को प्रमाणित करते हैं।

वे एक सफल खोज, एक ब्राउज़र सत्र, एक मॉडल उत्तर, या एक डेटाबेस लिखने को प्रमाणित नहीं करते हैं। एक पूर्ण अनुसंधान कलाकृति को अतिरिक्त रूप से एक स्रोत URL, पुनर्प्राप्ति संदर्भ, प्रासंगिक अंश, और एक समीक्षा की गई निष्कर्ष की आवश्यकता होती है। इन क्षेत्रों को अनुप्रयोग से संबंधित रखना चाहिए, न कि यह संकेत देना चाहिए कि हर MCP सर्वर एक ही साक्ष्य स्कीमा लौटाता है।

चयनित वेब-डेटा संचालन के लिए Scrapeless pricing की समीक्षा करें, और किसी भी मॉडल उपयोग को अलग से ट्रैक करें। एक स्थानीय सर्वर प्रक्रिया और एक दूरस्थ उपकरण कॉल में विभिन्न लागत सीमाएँ हो सकती हैं।

निष्कर्ष: साक्ष्य सीमाओं के चारों ओर उपकरण संकलित करें

अनुसंधान कार्य को पूरा करने के लिए सबसे छोटे सर्वर सेट से शुरू करें। खोज और राउटिंग की पुष्टि करें, केवल आवश्यक क्रियाएँ प्रदर्शित करें, और प्रत्येक निष्कर्ष के निर्माण के लिए उपयोग किए जाने वाले स्रोतों को संरक्षित करें। जब कार्यप्रवाह को वास्तव में उनकी आवश्यकता होती है, तो ब्राउज़र या संग्रह क्षमताएँ जोड़ें, फिर उन नई सीमाओं का स्वतंत्र रूप से परीक्षण करें।

क्या आप अपने वेब डेटा कार्यप्रवाह को बनाने के लिए तैयार हैं?

व्यावहारिक संग्रह कार्यप्रवाहों पर चर्चा कर रहे डेवलपर्स में शामिल हों: Discord · Telegram.

app.scrapeless.com पर एक खाता बनाएं और एक अधिकृत कार्य के साथ शुरू करें जिसका परिणाम आप मान्य कर सकते हैं।

सामान्य प्रश्न

प्रश्न: वेब अनुसंधान के लिए MCP सर्वर का उदाहरण क्या है?

एक वेब-डेटा सर्वर जो स्कोप्ड फ़ाइल सिस्टम सर्वर के साथ है, एक व्यावहारिक उदाहरण है। पहला स्रोत प्राप्त करता है; दूसरा अनुमोदित स्थानीय कलाकृतियों को संभालता है।

प्रश्न: क्या tools/list यह पुष्टि करता है कि एक सेवा क्रेडेंशियल काम करता है?

उपकरण खोज विज्ञापित उपकरण सतह की पुष्टि करती है। दूरस्थ संचालन के लिए प्रमाणीकरण को वास्तविक अधिकृत सेवा कॉल द्वारा जांचा जाना चाहिए।

प्रश्न: क्या MCP स्वचालित रूप से उपकरण नामों का नामकरण करता है?

MCP सर्वर उपकरण नामों को उजागर करता है, जबकि होस्ट अनुप्रयोग-विशिष्ट नामकरण जोड़ सकता है। सर्वर को वापस कॉल करते समय मूल नाम को संरक्षित करें।

प्रश्न: क्या एक फ़ाइल सिस्टम रूट एक पूर्ण सैंडबॉक्स है?

एक रूट एक पूर्ण सुरक्षा सैंडबॉक्स नहीं है। निर्देशिका प्रवर्तन, प्रक्रिया अनुमतियाँ, और होस्ट के उजागर उपकरणों को भी इच्छित स्कोप से मेल खाना चाहिए।

प्रश्न: क्या ये उपकरण बिना एक एआई मॉडल के चल सकते हैं?

एक निर्धारक कार्यक्रम MCP उपकरणों का पता लगा सकता है और उन्हें बिना एक मॉडल के कॉल कर सकता है। एक मॉडल केवल तब आवश्यक है जब अनुप्रयोग जानबूझकर इसे तर्क या क्रिया चयन का प्रतिनिधित्व करता है।

प्रश्न: क्या पृष्ठ सामग्री एक फ़ाइल लेखन को अधिकृत कर सकती है?

पुनः प्राप्त पृष्ठ सामग्री क्रिया अनुमतियों को नहीं दे सकती। इसे अविश्वसनीय साक्ष्य के रूप में मानें और किसी भी लेखन के लिए उपयोगकर्ता के कार्य और अनुप्रयोग नीति का पालन करें।

स्क्रैपलेस में, हम केवल सार्वजनिक रूप से उपलब्ध डेटा का उपयोग करते हैं, जबकि लागू कानूनों, विनियमों और वेबसाइट गोपनीयता नीतियों का सख्ती से अनुपालन करते हैं। इस ब्लॉग में सामग्री केवल प्रदर्शन उद्देश्यों के लिए है और इसमें कोई अवैध या उल्लंघन करने वाली गतिविधियों को शामिल नहीं किया गया है। हम इस ब्लॉग या तृतीय-पक्ष लिंक से जानकारी के उपयोग के लिए सभी देयता को कोई गारंटी नहीं देते हैं और सभी देयता का खुलासा करते हैं। किसी भी स्क्रैपिंग गतिविधियों में संलग्न होने से पहले, अपने कानूनी सलाहकार से परामर्श करें और लक्ष्य वेबसाइट की सेवा की शर्तों की समीक्षा करें या आवश्यक अनुमतियाँ प्राप्त करें।

सबसे लोकप्रिय लेख

सूची