क्रूएआई + स्क्रेपलेस: अपने एजेंट क्रू को लाइव वेब डेटा दें
Lead Scraping Automation Engineer
A CrewAI क्रू तब तक ही उपयोगी है जब तक उसके एजेंटों के पास पहुँचने के लिए उपकरण हों। एक रिसर्च एजेंट को केवल एक भाषा मॉडल दिया जाए और वह आत्मविश्वास से एक पृष्ठ का वर्णन करेगा जिसे उसने कभी नहीं खोला।
उस क्रू को Scrapeless MCP सर्वर से जोड़ने से इनपुट पक्ष ठीक हो जाता है: एजेंट ब्राउज़र नियंत्रण, पृष्ठ स्क्रैपिंग, गूगल सर्च और गूगल ट्रेंड्स को सामान्य CrewAI उपकरणों के रूप में प्राप्त करते हैं, जबकि रेंडरिंग, प्रॉक्सी रूटिंग और एंटी-डिटेक्शन सर्वर पर रहते हैं। यह गाइड कनेक्शन को अंत से अंत तक चलाता है और उपकरणों की सूची, तर्क स्कीमाएँ, और एक वास्तविक कॉल का परिणाम दिखाता है।
इस सेटअप से आपके क्रू को क्या मिलता है
आपके एजेंटों को एक कनेक्शन से 21 कॉल करने योग्य उपकरण मिलते हैं। Scrapeless MCP सर्वर इन उपकरणों को Streamable HTTP के माध्यम से उजागर करता है, और crewai-tools प्रत्येक को एक मानक CrewAI BaseTool में बदल देता है जिसे कोई भी एजेंट पकड़ सकता है।
उपकरण तीन समूहों में बाँटे जाते हैं:
- पृष्ठ पुनः प्राप्ति —
scrape_markdown,scrape_html, औरscrape_screenshotएक URL को लाते हैं और इसे उस रूप में लौटाते हैं जो आपने माँगा था। - लाइव ब्राउज़र नियंत्रण — सोलह
browser_*उपकरण जो एक सत्र बनाते हैं और फिर क्लिक, टाइप, स्क्रॉल, नेविगेट, प्रतीक्षा, और उसके अंदर स्नैपशॉट लेते हैं। - सर्च सरफेस —
google_searchऔरgoogle_trends।
चूंकि काम सर्वर-साइड होता है, क्रू प्रक्रिया छोटी रहती है। कोई स्थानीय ब्राउज़र स्थापित करने की आवश्यकता नहीं, कोई प्रॉक्सी पूल प्रबंधित करने की आवश्यकता नहीं, और न ही कोई ड्राइवर संस्करण को क्रोम रिलीज़ के साथ समन्वय में रखने की आवश्यकता है।
Scrapeless MCP सर्वर क्यों
मॉडल कॉन्टेक्स्ट प्रोटोकॉल विशेषता यह परिभाषित करता है कि एक क्लाइंट सर्वर पर उपकरणों की खोज और कार्यान्वयन कैसे करता है, जो एक कनेक्शन को हाथ से लिखे गए लिपी से अधिक मूल्यवान बनाता है: उपकरणों की सूची, तर्क स्कीमाएँ, और परिणाम लिफाफा सभी सर्वर से आते हैं बजाय इसके कि आपके प्रोजेक्ट में हार्ड-कॉड किए गए हों। कॉल्स JSON-RPC 2.0 संदेशों के रूप में चलते हैं, इसलिए अनुरोध और प्रतिक्रिया प्रारूप एक प्रकाशित मानक होता है न कि विक्रेता की प्रथा।
Scrapeless एक होस्टेड एंडपॉइंट प्रकाशित करता है, इसलिए कोई सर्वर चलाने की आवश्यकता नहीं है। परिवहन Streamable HTTP है, प्रोटोकॉल का HTTP तंत्र, और प्रमाणीकरण एकल हेडर है। एक CrewAI एजेंट को जो कुछ भी चाहिए वह एक शब्दकोष में है। वही कुंजी Scrapeless स्क्रैपिंग ब्राउज़र का भी समर्थन करती है, जो क्लाउड ब्राउज़र है जिसे browser_* उपकरण संचालित करते हैं, और प्रत्येक उपकरण के लिए पैरामीटर संदर्भ Scrapeless दस्तावेज़ीकरण में रहता है।
पूर्वापेक्षाएँ
- पायथन 3.10 या बाद का।
crewaiऔरcrewai-toolsवर्तमान में>=3.10,<3.14घोषित करते हैं। - डैशबोर्ड से एक Scrapeless API कुंजी।
- जिस LLM पर आपका क्रू चलता है उसके लिए एक मॉडल प्रदाता कुंजी। CrewAI डिफ़ॉल्ट रूप से OpenAI पर आधारित है और
OPENAI_API_KEYपढ़ता है।
नोट: नीचे दिए गए उदाहरण Scrapeless कुंजी के साथ निष्पादित किए गए थे लेकिन बिना मॉडल-प्रदाता कुंजी के। MCP कनेक्शन, उपकरण खोज, तर्क स्कीमाएँ, उपकरण कार्यान्वयन, और एजेंट अटैचमेंट सभी लाइव चले। अंतिम
crew.kickoff()कॉल एक पूर्वापेक्षा गैप है — इसे एक मॉडल कुंजी की आवश्यकता है, और लेख उस चरण को चिह्नित करता है न कि आविष्कृत आउटपुट दिखाने के लिए।
इंस्टॉल करें
bash
pip install "crewai==1.15.4" "crewai-tools[mcp]==1.15.4"
[mcp] अतिरिक्त mcp क्लाइंट लाइब्रेरी और mcpadapt को खींचता है, जो वह परत है जो MCP उपकरण परिभाषाओं को ढाँचा-स्वदेशी उपकरणों में परिवर्तित करती है।
यदि आपके वातावरण में पहले से ही एक OpenTelemetry स्टैक है, तो उन दोनों पैकेजों को एक साथ स्थापित करें जैसा किshown है न कि एक समय में एक। crewai opentelemetry-sdk~=1.42 को पिन करता है, और एक आंशिक रूप से अपग्रेडेड निर्यातक सेट एक आयात त्रुटि का कारण बनता है इससे पहले कि आपका कोई कोड चले।
अपने शेल में कुंजी सेट करें:
bash
export SCRAPELESS_API_KEY="your_api_key_here"
Streamable HTTP के माध्यम से कनेक्ट करें
MCPServerAdapter एक शब्दकोष लेता है जो सर्वर का वर्णन करता है। headers प्रविष्टि Scrapeless API कुंजी ले जाती है:
python
import os
from crewai_tools import MCPServerAdapter
server_params = {
"url": "https://api.scrapeless.com/mcp",
"transport": "streamable-http",
"headers": {"x-api-token": os.environ["SCRAPELESS_API_KEY"]},
}
with MCPServerAdapter(server_params) as tools:
names = sorted(t.name for t in tools)
print(f"tool count: {len(names)}")
for n in names:
print(" -", n)
इसे चलाने से यह सूची मिलती है जो सर्वर वास्तव में प्रदान करता है:
text
tool count: 21
- browser_click
- browser_close
- browser_create
- browser_get_html
- browser_get_text
- browser_go_back
- browser_go_forward
- browser_goto
- browser_press_key
- browser_screenshot
- browser_scroll
- browser_scroll_to
- browser_snapshot
- browser_type
- browser_wait
- browser_wait_for
- google_search
- google_trends
- scrape_html
- scrape_markdown
- scrape_screenshot
दो विवरण ध्यान देने लायक हैं। नाम सीधे हैं - कोई सर्वर प्रीफिक्स या डॉटेड नामस्थान नहीं है, इसलिए scrape_markdown वह सटीक स्ट्रिंग है जिसे एक एजेंट कॉल करेगा। और संदर्भ प्रबंधक मायने रखता है: यह प्रवेश पर सत्र खोलता है और निकास पर इसे बंद करता है, यही कारण है कि एडेप्टर को एक with ब्लॉक के रूप में लिखा गया है न कि एक सामान्य कंस्ट्रक्टर के रूप में।
एक एजेंट को केवल वही उपकरण दें जिनकी उसे आवश्यकता है
हर एजेंट को सभी 21 उपकरण देने से मॉडल का कार्य कठिन होता है, आसान नहीं। MCPServerAdapter सर्वर शब्दकोश के बाद उपकरण के नामों को स्वीकार करता है और केवल वही लौटाता है:
python
import os
from crewai_tools import MCPServerAdapter
server_params = {
"url": "https://api.scrapeless.com/mcp",
"transport": "streamable-http",
"headers": {"x-api-token": os.environ["SCRAPELESS_API_KEY"]},
}
with MCPServerAdapter(server_params, "scrape_markdown", "google_search") as tools:
print("filtered tools:", [t.name for t in tools])
for t in tools:
schema = getattr(t, "args_schema", None)
fields = list(schema.model_fields) if schema else "n/a"
print(f" {t.name} args: {fields}")
text
filtered tools: ['scrape_markdown', 'google_search']
scrape_markdown args: ['url']
google_search args: ['q', 'hl', 'gl']
आर्गुमेंट स्कीमा सर्वर से आते हैं, इसलिए वे असली अनुबंध होते हैं: scrape_markdown एकल url लेता है, और google_search एक क्वेरी और भाषा और देश कोड लेता है। एक रिसर्च एजेंट जिसे केवल पृष्ठ पढ़ने और खोजें चलाने की आवश्यकता है, उसे ठीक दो उपकरण मिलते हैं और कोई ब्राउज़र-सेशन सतह नहीं है जिसे वह गलत तरीके से उपयोग कर सके।
क्या आप इसे अपनी क्रू में जोड़ने के लिए तैयार हैं? एक मुफ्त Scrapeless खाता बनाएं और अपने डैशबोर्ड से कुंजी के साथ कनेक्ट करें।
उपकरणों को क्रू से जोड़ें
उपकरण सीधे एजेंट कंस्ट्रक्टर में जाते हैं, और एजेंट अपनी कार्य के साथ क्रू में जाता है:
python
import os
from crewai import Agent, Task, Crew
from crewai_tools import MCPServerAdapter
server_params = {
"url": "https://api.scrapeless.com/mcp",
"transport": "streamable-http",
"headers": {"x-api-token": os.environ["SCRAPELESS_API_KEY"]},
}
with MCPServerAdapter(server_params, "scrape_markdown", "google_search") as tools:
analyst = Agent(
role="Web Research Analyst",
goal="Turn public pages into clean markdown for downstream analysis.",
backstory="Works with public web sources and hands back structured notes.",
tools=tools,
verbose=False,
)
print("agent tools:", [t.name for t in analyst.tools])
task = Task(
description="Fetch https://quotes.toscrape.com/js/ and summarise the authors present.",
expected_output="A list of author names found on the page.",
agent=analyst,
)
crew = Crew(agents=[analyst], tasks=[task], verbose=False)
print("crew agents:", len(crew.agents), "| crew tasks:", len(crew.tasks))
text
agent tools: ['scrape_markdown', 'google_search']
crew agents: 1 | crew tasks: 1
एजेंट दोनों सर्वर-प्रदान किए गए उपकरणों को रखता है और क्रू को इकट्ठा कर दिया गया है। इस बिंदु तक सब कुछ केवल Scrapeless कुंजी पर काम करता है।
नोट:
crew.kickoff()वह एकमात्र चरण है जिसके लिए मॉडल-प्रदाता कुंजी की आवश्यकता है। बिनाOPENAI_API_KEYसेट किए, CrewAIValueError: OPENAI_API_KEY is requiredको पहले मॉडल कॉल से पहले उठाएगा, इसलिए रन को वह पंक्ति दिखाई देगी जिसे आप जोड़ते हैं न कि कैप्चर किए गए आउटपुट के रूप में।
python
result = crew.kickoff()
print(result)
एक उपकरण कॉल क्या लौटाता है
एक उपकरण को सीधे कॉल करना लौटाए गए आकार को बिना मॉडल टोकन खर्च किए देखने का सबसे तेज़ तरीका है। scrape_markdown URL लेता है और मार्कडाउन वापस करता है:
python
import os
from crewai_tools import MCPServerAdapter
server_params = {
"url": "https://api.scrapeless.com/mcp",
"transport": "streamable-http",
"headers": {"x-api-token": os.environ["SCRAPELESS_API_KEY"]},
}
with MCPServerAdapter(server_params, "scrape_markdown") as tools:
tool = list(tools)[0]
md = tool.run(url="https://quotes.toscrape.com/js/")
text = md if isinstance(md, str) else str(md)
print("markdown chars:", len(text))
print("contains Einstein:", "Einstein" in text)
print("first 180:", text[:180].replace("\n", " "))
text
markdown chars: 1580
contains Einstein: True
first 180: Response: "# [Quotes to Scrape](https://quotes.toscrape.com/)\n\n[Login](https://quotes.toscrape.com/login)\n\n“The world as we have created it is a process of our thinking. It ca
लक्षित पृष्ठ अपना उद्धरण सूची ब्राउज़र में बनाता है न कि प्रारंभिक HTML में भेजता है, और उद्धरण किसी भी तरह से मार्कडाउन में मौजूद होते हैं - सर्वर ने पृष्ठ को पहले रेंडर किया फिर इसे परिवर्तित किया। यही वास्तविक अवसंरचना द्वारा समर्थित एक MCP उपकरण और एक सामान्य HTTP फेच के बीच व्यावहारिक अंतर है: एजेंट एक पृष्ठ के लिए पूछता है और उसे वह पृष्ठ मिलता है जो एक उपयोगकर्ता देखेगा।
Here is the translation of the provided text into Hindi:
मार्कडाउन वह फ़ॉर्मेट है जिसे एक भाषा मॉडल सबसे सस्ते तरीके से संभालता है। शीर्षक, लिंक और अनुच्छेद संरचना जीवित रहती है, जबकि स्क्रिप्ट, स्टाइलिंग और लेआउट मार्कअप नहीं रहते, इसलिए एजेंट अपनी संदर्भ सामग्री पर खर्च करता है।
निष्कर्ष
CrewAI को Scrapeless MCP सर्वर से जोड़ने के लिए एक शब्दकोश और एक संदर्भ प्रबंधक की आवश्यकता होती है। सर्वर 21 उपकरण प्रदान करता है जिनके अपने तर्क स्कीमा होते हैं, crewai-tools उन्हें मूल CrewAI उपकरणों में परिवर्तित करता है, और अडैप्टर में विशिष्ट उपकरणों का नामकरण प्रत्येक एजेंट की सतह को इतना छोटा रखता है कि एक मॉडल इसे अच्छी तरह से उपयोग कर सके।
आपके अपने प्रोजेक्ट में ले जाने के लायक हिस्सा उपकरण फ़िल्टर है। एक क्रू जहाँ अनुसंधान एजेंट scrape_markdown और google_search पकड़ता है, और एक अलग ब्राउज़र एजेंट browser_* सेट रखता है, प्रत्येक मॉडल को एक संक्षिप्त मेनू और स्पष्ट कार्य देता है।
Scrapeless मुफ्त योजना पर शुरू करें एक कुंजी प्राप्त करने के लिए, जब आप рабочी लोड का आकार दें तो Scrapeless मूल्य निर्धारण की समीक्षा करें, और पूरी उपकरण संदर्भ के लिए Scrapeless MCP सर्वर अवलोकन पढ़ें।
अक्सर पूछे जाने वाले प्रश्न
प्रश्न: CrewAI के लिए Scrapeless MCP सर्वर का एंडपॉइंट क्या है?
होस्टेड एंडपॉइंट https://api.scrapeless.com/mcp है, जिसे आपके कुंजी को x-api-token हेडर में रखते हुए streamable-http परिवहन के द्वारा पहुँचाया जाता है। CrewAI को कोई स्थानीय सर्वर प्रक्रिया की आवश्यकता नहीं है, क्योंकि उपकरण दूरस्थ रूप से प्रदान किए जाते हैं।
प्रश्न: Scrapeless MCP सर्वर कितने उपकरण प्रदर्शित करता है?
एक जीवित कनेक्शन 21 उपकरण लौटाता है: सोलह browser_* सत्र-नियंत्रण उपकरण, तीन पृष्ठ-प्राप्ति उपकरण (scrape_markdown, scrape_html, scrape_screenshot), और दो खोज उपकरण (google_search, google_trends)। रनटाइम पर सूची की जांच करें बजाय इसके कि आप अनुमान लगाएँ, क्योंकि एक सर्वर रिलीज़ के बीच उपकरण जोड़ सकता है।
प्रश्न: क्या मैं एजेंट को प्राप्त होने वाले MCP उपकरणों को सीमित कर सकता हूँ?
हाँ। MCPServerAdapter को सर्वर शब्दकोश के बाद उपकरण नाम पास करें — MCPServerAdapter(server_params, "scrape_markdown", "google_search") केवल वही दो लौटाता है। इससे मॉडल के उपकरण मेनू को छोटा रखा जाता है, जो आमतौर पर चयन की सटीकता में सुधार करता है।
प्रश्न: क्या CrewAI को MCP सर्वर से कनेक्ट करने के लिए LLM कुंजी की आवश्यकता है?
नहीं। MCP हैंडशेक, उपकरण खोज और सीधे उपकरण कॉल सभी केवल Scrapeless कुंजी के साथ काम करते हैं। एक मॉडल-प्रदाता कुंजी की आवश्यकता होती है जब आप crew.kickoff() कॉल करते हैं, क्योंकि उसी समय एक एजेंट मॉडल से पूछता है कि किस उपकरण का उपयोग करें।
प्रश्न: क्या MCPServerAdapter के साथ संदर्भ प्रबंधक का उपयोग करना चाहिए?
with ब्लॉक एमसीपी सत्र को प्रवेश पर खोलता है और निकास पर उसे बंद करता है। बिना किसी के एक अडैप्टर का निर्माण कनेक्शन को खुला छोड़ देता है, और उपकरण केवल तभी मान्य होते हैं जब सत्र सक्रिय रहता है — सत्र बंद होने के बाद उनके एक्सेस करने से एक त्रुटि उत्पन्न होती है।
प्रश्न: क्या scrape_markdown उन पृष्ठों को संभालता है जो ब्राउज़र में रेंडर होते हैं?
हाँ। एक पृष्ठ जो अपनी सामग्री को JavaScript के माध्यम से लिखता है वह अभी भी उस सामग्री के साथ वापस आता है, क्योंकि रेंडरिंग सर्वर-साइड पर परिवर्तन से पहले होती है। उसी यूआरएल का सामान्य HTTP फेच पूर्व-रेंडर मार्कअप लौटाता है।
प्रश्न: एक क्रू को किसी लाइव साइट की ओर इंगीत करने से पहले मुझे क्या जांचना चाहिए?
साइट की शर्तों और उसके /robots.txt निर्देशों की समीक्षा करें, जो Robots Exclusion Protocol मानक का पालन करते हैं। संग्रह को सार्वजनिक पृष्ठों तक सीमित रखें, और क्रू को एक सीमित कार्य सूची दें बजाय इसके कि खुला खत्म करने वाली अनुदेश हो — अन्यथा एक एजेंट लूप आपकी मंशा से कहीं अधिक अनुरोध जारी कर सकता है।
स्क्रैपलेस में, हम केवल सार्वजनिक रूप से उपलब्ध डेटा का उपयोग करते हैं, जबकि लागू कानूनों, विनियमों और वेबसाइट गोपनीयता नीतियों का सख्ती से अनुपालन करते हैं। इस ब्लॉग में सामग्री केवल प्रदर्शन उद्देश्यों के लिए है और इसमें कोई अवैध या उल्लंघन करने वाली गतिविधियों को शामिल नहीं किया गया है। हम इस ब्लॉग या तृतीय-पक्ष लिंक से जानकारी के उपयोग के लिए सभी देयता को कोई गारंटी नहीं देते हैं और सभी देयता का खुलासा करते हैं। किसी भी स्क्रैपिंग गतिविधियों में संलग्न होने से पहले, अपने कानूनी सलाहकार से परामर्श करें और लक्ष्य वेबसाइट की सेवा की शर्तों की समीक्षा करें या आवश्यक अनुमतियाँ प्राप्त करें।



