WebSearchAndCrawl
WebSearchAndCrawl
Ein MCP-Server für authentifiziertes Web-Crawling, Suchen und Dokumentenverarbeitung
---.
🚀 Zweck
WebSearchAndCrawl ist ein MCP-Server (Model Context Protocol), der dazu dient:
Websites zu crawlen (einschließlich authentifizierter) mithilfe von Firefox-Sitzungstokens oder Browser-Automatisierung.
Gecrawlten Inhalt zu durchsuchen nach Regex-Treffern und Ergebnisse in einem strukturierten Index zu speichern.
Dokumente herunterzuladen und zu parsen (PDF, DOCX, XLSX usw.) von gecrawlten Websites.
Ergebnisse in Echtzeit zu streamen über HTTP zur Integration mit MCP-Clients.
robots.txtzu respektieren und Ratenbegrenzungen durchzusetzen (5 Anfragen/Sek., max. 5 Threads).
Dieses Tool ist ideal für:
Forscher, die authentifizierte oder dynamische Websites scrapen müssen.
Entwickler, die KI-Agenten bauen, die Webdaten benötigen.
Automatisierung wiederkehrender Webaufgaben (z. B. Überwachung, Datenextraktion).
Related MCP server: Scout MCP Server
🔧 Funktionen
Funktion | Beschreibung |
Authentifiziertes Crawling | Verwendet Firefox-Sitzungstokens, um auf angemeldete Seiten zuzugreifen. |
Browser-Automatisierung | Fällt auf Playwright zurück für dynamische Inhalte oder Anmeldeformulare. |
Domain-Whitelisting | Crawlt nur URLs, die einer durch Kommas getrennten Liste von Domains entsprechen. |
Tiefenbegrenztes Crawling | Konfigurierbare Crawl-Tiefe (1-9 Ebenen). |
Regex-Suche | Durchsucht gecrawlten Inhalt oder Index nach Regex-Mustern. |
Dokument-Parsing | Extrahiert Text aus PDF-, DOCX-, XLSX- und TXT-Dateien. |
Echtzeit-Streaming | Ergebnisse werden als JSONL gestreamt (seitenweise aufgeteilt). |
Indizierung | Speichert Ergebnisse in JSON-Dateien pro Domain für spätere Suche. |
Ratenbegrenzung | Erzwingt 5 Anfragen/Sek. und max. 5 Threads. |
Fortsetzungsunterstützung | Kann unterbrochene Crawls von Prüfpunkten aus fortsetzen. |
Sitzungsvalidierung | Validiert Token-Bereiche, um Missbrauch zu verhindern. |
📦 Installation
Voraussetzungen
Python 3.9+ (empfohlen: 3.11+).
Firefox (erforderlich für Browser-Automatisierung).
Systembibliotheken (für Dokument-Parsing):
PDF:
poppler-utils(Linux) oderpdfminer.six(plattformübergreifend).DOCX/XLSX:
python-docx,openpyxl.
Schritte
1. Repository klonen
git clone https://github.com/bpweatherill/WebSearchAndCrawl.git
cd WebSearchAndCrawl2. Virtuelle Umgebung einrichten
python -m venv venv
source venv/bin/activate # Linux/Mac
# OR
venv\Scripts\activate # Windows3. Abhängigkeiten installieren
pip install -r requirements.txt4. Playwright-Browser installieren
playwright install firefox5. (Optional) Umgebungsvariablen konfigurieren
Erstellen Sie eine .env-Datei im Projektstamm:
# Server
MCP_PORT=8808
MCP_HOST=0.0.0.0
# Crawler
MAX_DEPTH=9
MAX_THREADS=5
RATE_LIMIT=5
REQUEST_TIMEOUT=10
MAX_MEMORY_MB=1024
# Firefox
FIREFOX_PROFILE=my_profile # Optional: Specific Firefox profile
DEFAULT_SEARCH_ENGINE=google
# Directories
INDEX_DIR=./index
DOWNLOADS_DIR=./downloads
CHECKPOINTS_DIR=./checkpoints🏃 Verwendung
1. Starten Sie den MCP-Server
python -m server.mainDer Server startet auf http://localhost:8808 (oder dem in .env angegebenen Port).
2. MCP-Tools (HTTP-Endpunkte)
Alle Tools geben JSON-Antworten zurück und unterstützen Streaming für Echtzeitergebnisse.
Endpunkt | Methode | Beschreibung | Anforderungstext |
| POST | Eine Website crawlen und Ergebnisse streamen. | |
| POST | Den lokalen Index nach Regex-Treffern durchsuchen. | |
| POST | Dokumente herunterladen, die einem Regex entsprechen. | |
| POST | Die Suchmaschine von Firefox verwenden, um Ergebnisse abzurufen. | |
| GET | Alle Domains mit indiziertem Inhalt auflisten. | - |
| GET | Gesundheitscheck. | - |
Anfrage-/Antwortschemata
CrawlRequest
{
"url": "https://www.nasa.gov",
"whitelist_domains": "nasa.gov",
"max_depth": 3,
"use_token": false,
"firefox_profile": "my_profile"
}url: Start-URL für den Crawl.whitelist_domains: Durch Kommas getrennte Liste erlaubter Domains (z. B."nasa.gov,spacex.com").max_depth: Maximale Crawl-Tiefe (1-9).use_token: Firefox-Sitzungstoken verwenden, falls verfügbar.firefox_profile: Name des Firefox-Profils (optional).
Gestreamte Antwort (JSONL):
{
"excerpt": "NASA's Perseverance Rover lands on Mars...",
"full_text": "Full article text here...",
"url": "https://www.nasa.gov/mars2020",
"timestamp": "2024-05-20T12:00:00Z",
"domain": "nasa.gov"
}---.
SearchIndexRequest
{
"domain": "nasa.gov",
"regex": ".*Mars.*",
"max_results": 10
}domain: Zu durchsuchende Domain (z. B."nasa.gov").regex: Regex-Muster, das übereinstimmen soll.max_results: Maximale Anzahl zurückzugebender Ergebnisse.
Antwort:
[
{
"url": "https://www.nasa.gov/mars2020",
"excerpt": "NASA's Perseverance Rover lands on Mars...",
"timestamp": "2024-05-20T12:00:00Z"
}
]---.
DownloadRequest
{
"domain": "nasa.gov",
"regex": ".*\\.pdf$",
"output_dir": "./downloads/nasa.gov"
}domain: Domain, von der heruntergeladen werden soll.regex: Regex-Muster für herunterzuladende Dateien (z. B."*.pdf").output_dir: Benutzerdefiniertes Ausgabeverzeichnis (optional).
Gestreamte Antwort (JSONL):
{
"filename": "./downloads/nasa.gov/mars_rover.pdf",
"url": "https://www.nasa.gov/pdf/mars_rover.pdf",
"parsed_text": "Extracted text from PDF..."
}---.
WebSearchRequest
{
"query": "NASA Mars missions",
"search_engine": "google",
"use_token": false,
"firefox_profile": "my_profile"
}query: Suchanfrage.search_engine: Suchmaschine (Standard: Firefox-Standard).use_token: Firefox-Sitzungstoken verwenden, falls verfügbar.firefox_profile: Name des Firefox-Profils (optional).
Gestreamte Antwort (JSONL):
{
"title": "Mars 2020 Mission - NASA",
"url": "https://www.nasa.gov/mars2020",
"snippet": "Learn about the Perseverance Rover..."
}🔍 Beispiele
1. NASA.gov crawlen und Ergebnisse indizieren
curl -X POST http://localhost:8808/crawl_website \
-H "Content-Type: application/json" \
-d '{
"url": "https://www.nasa.gov",
"whitelist_domains": "nasa.gov",
"max_depth": 2,
"use_token": false
}'2. Indizierten Inhalt nach "Mars" durchsuchen
curl -X POST http://localhost:8808/search_index \
-H "Content-Type: application/json" \
-d '{
"domain": "nasa.gov",
"regex": ".*Mars.*",
"max_results": 5
}'3. PDFs von NASA.gov herunterladen
curl -X POST http://localhost:8808/download_documents \
-H "Content-Type: application/json" \
-d '{
"domain": "nasa.gov",
"regex": ".*\\.pdf$"
}'4. Firefox verwenden, um Google zu durchsuchen
curl -X POST http://localhost:8808/get_search_results \
-H "Content-Type: application/json" \
-d '{
"query": "NASA Mars missions",
"search_engine": "google"
}'📁 Projektstruktur
WebSearchAndCrawl/
│
├── server/ # Core server logic
│ ├── __init__.py
│ ├── main.py # FastAPI app + MCP tools
│ ├── config.py # Configuration settings
│ ├── schemas.py # Pydantic request/response models
│ │
│ ├── firefox/ # Firefox browser automation
│ │ ├── __init__.py
│ │ ├── controller.py # Playwright Firefox management
│ │ └── token_manager.py # Session token handling
│ │
│ ├── crawler/ # Web crawling logic
│ │ ├── __init__.py
│ │ ├── crawler.py # Main crawling logic
│ │ └── rate_limiter.py # Thread/rate limiting
│ │
│ ├── indexer/ # Indexing and search
│ │ ├── __init__.py
│ │ ├── indexer.py # JSON index management
│ │ └── search_engine.py # Regex search
│ │
│ ├── downloader/ # Document downloading and parsing
│ │ ├── __init__.py
│ │ ├── downloader.py # Download logic
│ │ └── parsers/ # File type parsers
│ │ ├── __init__.py
│ │ ├── pdf_parser.py
│ │ ├── docx_parser.py
│ │ └── xlsx_parser.py
│ │
│ └── streamer.py # Chunked JSON streaming
│
├── tests/ # Unit and integration tests
│ ├── __init__.py
│ ├── test_firefox.py
│ └── test_crawler.py
│
├── index/ # Index files (auto-generated)
│ ├── nasa.gov.json
│ └── ...
│
├── downloads/ # Downloaded documents (auto-generated)
│ ├── nasa.gov/
│ │ ├── document1.pdf
│ │ └── ...
│ └── ...
│
├── checkpoints/ # Crawl checkpoints (auto-generated)
│ └── ...
│
├── requirements.txt # Python dependencies
├── .env.example # Example environment variables
└── README.md # This file⚙️ Konfiguration
Umgebungsvariablen
Variable | Standard | Beschreibung |
|
| HTTP-Server-Port. |
|
| HTTP-Server-Host. |
|
| Maximale Crawl-Tiefe (1-9). |
|
| Maximale gleichzeitige Threads. |
|
| Maximale Anfragen pro Sekunde. |
|
| Timeout für Anfragen (Sekunden). |
|
| Maximale Speichernutzung (MB). |
|
| Name des Firefox-Profils (optional). |
|
| Standardsuchmaschine. |
|
| Verzeichnis für Indexdateien. |
|
| Verzeichnis für heruntergeladene Dateien. |
|
| Verzeichnis für Crawl-Prüfpunkte. |
🛡️ Sicherheitshinweise
Sitzungstokens:
Tokens werden nur im Speicher gespeichert (nicht auf der Festplatte).
Token-Bereiche werden validiert, um Missbrauch zu verhindern (z. B. kann ein Token für
nasa.govnicht fürevil.comverwendet werden).
Eingabebereinigung:
Alle Eingaben (URLs, Regex usw.) werden bereinigt, um Injektionsangriffe zu verhindern.
Ratenbegrenzung:
Erzwingt 5 Anfragen/Sek. und max. 5 Threads, um Server nicht zu überlasten.
robots.txt-Konformität:Der Crawler respektiert
robots.txtund überspringt nicht erlaubte URLs.
Whitelisting:
Es werden nur URLs gecrawlt, die den whitelisted Domains entsprechen.
🚀 Erweiterungen (Roadmap)
Erweiterung | Beschreibung | Priorität |
Persistente Tokens | Tokens in einer verschlüsselten Datei speichern, um sie über Neustarts hinweg zu erhalten. | Mittel |
Vollständiges |
| Mittel |
Erweiterte Paginierungsbehandlung | Paginierungslinks erkennen und verfolgen (z. B. "Weiter"-Schaltflächen). | Hoch |
Lazy-Loading-Unterstützung | Lazy-geladene Inhalte erkennen und auslösen (z. B. unendliches Scrollen). | Hoch |
Checkpointing | Crawl-Zustand speichern, um unterbrochene Crawls fortzusetzen. | Hoch |
Volltextsuche | Volltextsuche zusätzlich zu Regex unterstützen. | Niedrig |
Datenbank-Backend | JSON-Dateien durch SQLite/PostgreSQL für Skalierbarkeit ersetzen. | Niedrig |
Verteiltes Crawling | Horizontale Skalierung mit mehreren Workern unterstützen. | Niedrig |
Docker-Unterstützung | Ein | Mittel |
Authentifizierungshelfer | Integrierte Unterstützung für gängige Authentifizierungsmethoden (OAuth, SAML). | Mittel |
Proxy-Unterstützung | Proxy-Unterstützung für das Crawlen hinter Firewalls hinzufügen. | Niedrig |
Benutzerdefinierte Header | Benutzern erlauben, benutzerdefinierte Header für Anfragen anzugeben. | Mittel |
Webhook-Benachrichtigungen | Eine Webhook-URL benachrichtigen, wenn neue Ergebnisse gefunden werden. | Niedrig |
🤝 Mitwirken
Repository forken.
Erstellen Sie einen Feature-Branch (
git checkout -b feature/your-feature).Committen Sie Ihre Änderungen (
git commit -m "Add your feature").Pushen Sie den Branch (
git push origin feature/your-feature).Öffnen Sie einen Pull Request.
📜 Lizenz
Dieses Projekt ist unter der MIT-Lizenz lizenziert. Siehe LICENSE für Details.
📞 Support
Issues: Melden Sie Fehler oder fordern Sie Funktionen im GitHub Issues-Tab an.
Diskussionen: Nehmen Sie an den GitHub Discussions für Fragen und Antworten teil.
🏆 Danksagungen
Playwright: Für Browser-Automatisierung.
FastAPI: Für den HTTP-Server.
pdfminer.six: Für PDF-Parsing.
python-docx/openpyxl: Für das Parsen von Office-Dateien.
This server cannot be installed
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Servers
- AlicenseCqualityCmaintenanceProvides browser automation and web scraping as MCP tools, enabling autonomous URL ingestion, crawling, extraction, and anti-bot handling with interactive browser control.625MIT

Scout MCP Serverofficial
AlicenseNot gradedqualityCmaintenanceEnables web search, scraping, extraction, and crawling through an MCP interface, allowing coding agents to access real-time web data.1MIT- AlicenseNot gradedqualityCmaintenanceA read-only Python MCP server for authorized website research, structured data extraction, downloadable-document analysis, and content auditing inside OpenCode. It crawls authorized public domains with safety constraints including robots.txt respect, SSRF defenses, bounded concurrency, and content-type allowlists.MIT
- AlicenseNot gradedqualityBmaintenanceEnables web search and scraping through MCP, running locally with courtesy rate limiting and caching.4ISC
Related MCP Connectors
Stealth web browser for agents: search, fetch, click and type through persistent sessions over MCP.
Browser MCP for logged-in tasks. Uses your Chrome — credentials stay local. Zero-token replay.
Hosted real Google Chrome MCP with per-user persistent state. Navigate, click, type, screenshot.
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/bpweatherill/WebSearchAndCrawl'
If you have feedback or need assistance with the MCP directory API, please join our Discord server