web-search-mcp
web-search-mcp
Ein vollständig lokales, null externe API, null Schlüssel All-in-One-MCP-Tool, das DeepSeek Harness + LM Studio Folgendes bietet:
Websuche – greift direkt auf in Festlandchina direkt erreichbare Suchmaschinen-Ergebnisseiten zu (Baidu / Bing China / 360 / Sogou), ohne Such-APIs aufzurufen;
Ganzseiten-Parsing – nutzt Crawl4AI (lokales Chromium) zur Extraktion von Seitenstruktur + Text + Bildern;
Bildbeschreibung – nutzt das lokale LM-Studio-Visionsmodell, um Bilder in chinesische Textbeschreibungen umzuwandeln (Bildverständnis findet serverseitig statt und umgeht damit die Einschränkung von DSH, binäre Bilder zu verwerfen).
Fünf MCP-Tools:
Tool | Funktion |
| Einzel-Engine-Suche, gibt Titel / URL / Zusammenfassung zurück |
| Multi-Engine-Sammelsuche: parallele Abfrage von Baidu/Bing/360/Sogou, dedupliziert und zusammengeführt nach URL |
| Abrufen und Parsen der gesamten Seite (gefiltertes Markdown + Text + Bilder + Bildbeschreibungen) |
| Suche → automatische Auflösung von Weiterleitungslinks → Abrufen und Parsen der ersten N Einträge, alles in einem Schritt |
| Dreistufige intelligente Extraktion: Regel-Filterung → kleines Modell extrahiert blockweise → großes Modell fasst zusammen |
Das abgerufene Markdown wird standardmäßig dreifach entrauscht: ①
PruningContentFilter-Version (wenn verfügbar); ②Entfernung der oberen Navigationsleiste + Löschung von Fußzeilen/Urheberrechts-/Werbe-Rauschzeilen; ③max_chars-Obergrenze (Standard 20000 Zeichen, bei Überschreitung abgeschnitten). So wird vermieden, dass Werbung und andere irrelevante Inhalte unnötig Kontext belegen.
llm_extractnutzt das lokale LLM, um die Text-Extraktion vollständig zu lösen: ①Regel-Filterung der Webseite → ②SMALL_MODEL(kleines Modell) extrahiert blockweise schnell Kernpunkte → ③LARGE_MODEL(großes Modell) fasst zu einer kohärenten Zusammenfassung zusammen.⚠️ Modellwechsel spart VRAM (Standard): Wenn
model_switching=trueinconfig.pygesetzt ist, wechselt eine einzelne Instanz sequenziell – wenn das kleine Modell benötigt wird, wechselt es automatisch zuqwen3.5-4b(und deaktiviert das Denken), nach der Verarbeitung wechselt es zurück zum großen Modellqwen/qwen3.8-27bfür die Zusammenfassung. Es ist zu jedem Zeitpunkt nur ein Modell geladen, um VRAM-Engpässe zu vermeiden. Beifalsewerden zwei Instanzen parallel verwendet (erfordert ausreichend VRAM).
Konfigurationsdatei (einfach hier ändern)
Alle variablen Konfigurationen sind in config.py zentralisiert. Für die zukünftige Wartung muss nur diese eine Datei geändert werden:
Gruppe | Schlüsselelemente | Beschreibung |
LM-Studio-Verbindung |
| Endpunkt und Schlüssel |
Visionsmodell |
| Multimodales Modell für Bildbeschreibungen |
LLM-Extraktion |
| Kleines Modell für schnelle Extraktion + großes Modell für Zusammenfassung |
Suchstandard |
| Engine und Anzahl der Ergebnisse |
Abrufstandard |
| Text-Obergrenze, ob Bilder beschrieben werden |
Extraktionsstandard |
| Parameter für die dreistufige Extraktion |
Leistungsoptimierung (Route A) |
| Festplatten-Cache, paralleles Abrufen mit Begrenzung, Visions-Bild-Downsampling |
Crawl4AI |
| Datenverzeichnis (leer = innerhalb des Projekts) |
Umgebungsvariablen (z. B. der
env-Abschnitt in DSHcordis.patch.yml) können die Standardwerte inconfig.pyweiterhin überschreiben, aber für den täglichen Gebrauch reicht es,config.pyzu ändern. Nach der Änderung DSH neu starten, damit es wirksam wird.
Architektur
┌──────────────────────────────┐
│ web-search-mcp (本进程) │
关键词 ─────────────►│ 1. 抓取 百度/必应/360/搜狗 结果页 │──► 搜索结果(标题/URL/摘要)
│ 2. Crawl4AI 整页解析 │──► markdown / links / images
│ 3. 下载图片 ─► LM Studio 视觉模型 │──► 图片中文描述(文本)
└──────────────────────────────┘
▲ MCP stdio
┌─────────┴──────────┐
│ DeepSeek Harness │ (cordis.yml 里的 @deepseek-ai/dsh-mcp-client)
│ LM Studio(主模型) │
└────────────────────┘Suche, Abruf und Bildbeschreibung erfolgen vollständig lokal; der einzige Netzwerkzugriff ist das "Öffnen der Webseite selbst" (bei jeder Online-Suche unvermeidbar). Keine Drittanbieter-APIs, keine Schlüssel, Daten verlassen den Rechner nicht.
Bildbeschreibung ist serverseitiges Sehen: Crawl4AI extrahiert nur die Bild-URLs, dieses Tool lädt die Bilder herunter, ruft das Visionsmodell von LM Studio auf und wandelt die Bilder in Text um, bevor es sie an DSH zurückgibt. Daher ist die MCP-Brückenschicht von DSH (die binäre Bilder verwirft) kein Problem.
Installation
1. Umgebung
Python 3.10+ (Crawl4AI empfiehlt 3.11 / 3.12; bei 3.13 mit Abhängigkeitsproblemen auf 3.12 zurückgehen)
Docker optional installiert (dieses Projekt benötigt kein Docker; SearXNG ist auch nicht erforderlich, die Suche erfolgt durch direktes Abrufen)
LM Studio gestartet und Modell geladen
2. Abhängigkeiten installieren (in Festlandchina mit Spiegel)
cd web-search-mcp
python -m venv .venv
.\.venv\Scripts\Activate.ps1
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple -r requirements.txt
# 下载 Crawl4AI 用的 Chromium(仅抓取功能需要;只用搜索可跳过)
playwright install chromiumAbhängigkeitshinweis:
httpx + beautifulsoup4sind erforderlich (Suche + MCP-Transport);lxmlist optional (wenn nicht installiert, wird automatisch auf die Standardbibliothek zurückgegriffen);crawl4aiwird nur für die Abruffunktion benötigt. Die MCP-Transportschicht ist handgeschrieben und nutzt nur die Python-Standardbibliothek, ohne Abhängigkeit vonmcp/pydantic. Im schlimmsten Fall reicht also die Installation vonhttpx + beautifulsoup4für die Suche.
3. LM-Studio-Visionsmodell konfigurieren (optional, aber für Bildbeschreibungen erforderlich)
Laden Sie in LM Studio ein bildunterstützendes Visionsmodell, z. B. Qwen2.5-VL-7B-Instruct, MiniCPM-V, LLaVA.
Umgebungsvariablen setzen (oder in .env schreiben, aber dieses Tool liest .env nicht automatisch – bitte im Startbefehl setzen):
Variable | Standard | Beschreibung |
|
| LM-Studio-OpenAI-kompatibler Endpunkt |
| leer | Name des in LM Studio geladenen Visionsmodells (wenn nicht gesetzt, werden Bildbeschreibungen übersprungen) |
|
| Für den lokalen Dienst reicht eine beliebige nicht-leere Zeichenfolge |
⚠️ Einzelinstanz vs. Doppelinstanz: LM Studio lädt normalerweise nur ein Modell gleichzeitig. Wenn Ihr Haupt-Dialogmodell kein Visionsmodell ist, wird empfohlen, eine weitere LM-Studio-Instanz zu öffnen (anderen Port, z. B. 1235), die speziell das Visionsmodell lädt, und dann
VISION_BASE_URLaufhttp://localhost:1235/v1zu setzen.
Anbindung an DeepSeek Harness
Fügen Sie im Plugin-Bereich von cordis.yml einen Abschnitt hinzu (Beispiel in cordis.example.yml):
- id: mcp-websearch
name: '@deepseek-ai/dsh-mcp-client'
config:
serverName: websearch
transport: stdio
command: python
args: ['C:/Users/LiangYuelin/Desktop/workspace/web-search-mcp/server.py']
cwd: 'C:/Users/LiangYuelin/Desktop/workspace/web-search-mcp'
env:
VISION_BASE_URL: 'http://localhost:1234/v1'
VISION_MODEL: 'qwen2.5-vl-7b-instruct'
VISION_API_KEY: 'lm-studio'
toolCallTimeoutMs: 300000 # 抓取 + 图片描述较慢,务必调大Wenn Sie ein venv verwenden, ändern Sie
commandauf.venv/Scripts/python.exe(absoluter Pfad).Nach der Anbindung sieht das Modell drei Tools:
mcp__websearch__search_web,mcp__websearch__scrape_url,mcp__websearch__search_and_extract.
Verwendungsbeispiele
Die Modellseite ruft die Tools natürlich auf, z. B.:
"Suche nach 'Neueste Fortschritte bei LLM-RAG'" →
search_web(query="大模型 RAG 最新进展", engine="bing")"Rufe diese Webseite ab und parse sie, und sag mir, was auf den Bildern ist" →
scrape_url(url="https://...", describe_images=true)"Suche für mich nach 'Bitcoin Kurs' und fasse die ersten 3 Artikel zusammen" →
search_and_extract(query="比特币 行情", engine="bing", max_results=3)
Suchmaschinen-Auswahl:
engine | Beschreibung |
| Standard, Baidu; die zurückgegebenen URLs sind Weiterleitungslinks, |
| Bing China, Ergebnis-URLs sind sauber, schwächster Anti-Scraping-Schutz, am besten für "Suche + Abruf" geeignet |
| 360 Suche |
| Sogou (stärkerer Anti-Scraping-Schutz, schlägt gelegentlich fehl) |
Bereitstellungsstatus (lokaler Rechner)
Abgeschlossen und auf diesem Rechner getestet:
Abhängigkeiten installiert: crawl4ai 0.9.2 + playwright + lxml + Chromium (über Inlands-Spiegel);
DSH-Konfiguration in
~/.dsh/profiles/web/cordis.patch.ymlgeschrieben;Alle vier Suchmaschinen (Baidu/Bing/360/Sogou) liefern Ergebnisse;
Baidu-Weiterleitungslinks korrekt aufgelöst;
MCP-stdio-Protokoll vollständig durchgetestet (initialize / tools/list / tools/call / Fehlerbehandlung / Chinesisch UTF-8);
scrape_url(Ganzseiten-Markdown + Links + Bilder) undsearch_and_extract(Suche→Auflösung→Abruf→Bildextraktion) Ende-zu-Ende bestanden.
Einziger verbleibender manueller Schritt (für Bildbeschreibungen erforderlich):
LM Studio öffnen → lokalen Dienst starten (Port 1234);
Visionsmodell
qwen/qwen3.8-27bladen (mit mmproj, unterstützt Bildeingabe);DSH neu starten (
dsh web), dann sind die drei Toolsmcp__websearch__*im Modell sichtbar.
Dateibeschreibung
server.py– MCP-Diensteinstieg (handgeschriebenes MCP stdio, null mcp/pydantic-Abhängigkeiten)engines.py– Suchmaschinen-Abrufmodul (Baidu/Bing/360/Sogou)vision.py– LM-Studio-Visionsmodell-Bildbeschreibungcache.py– Festplatten-Cache-Modul (Abrufergebnisse / Bildbeschreibungs-Wiederverwendung, reine Standardbibliothek)config.py– zentrale Konfiguration (alle variablen Elemente)requirements.txt– Abhängigkeiten.env.example– Beispiel für Visionsmodell-Umgebungsvariablencordis.example.yml– Beispiel für DSH-Anbindungskonfiguration
Leistungsoptimierung (Route A · umgesetzt)
Für die lokale Umgebung mit 20 GB VRAM + 32 GB RAM wurden vier Optimierungen ohne neue große Modelle umgesetzt:
Element | Beschreibung | Effekt |
F1 Stufenweise Stapelverarbeitung | Bei | 3 Seiten von 6 Ladevorgängen → 2 |
F2 Paralleles Abrufen | Mehrseitiges Abrufen mit | Chromium-I/O-intensiv, ca. 2~3× schneller |
F3 Festplatten-Cache | Abrufergebnisse, Bildbeschreibungen werden nach (URL+Parameter)-Hash auf der Festplatte gespeichert, | Gemessen: 4,14s → 0,01s (>400×) |
F4 Weiterleitungsauflösung ohne Body-Download |
| Spart einen vollständigen Seitendownload |
F5 Visions-Bild-Downsampling | Vor dem Senden an das Visionsmodell wird die längste Seite mit Pillow auf | Bild-Token deutlich reduziert, schneller und spart KV-VRAM |
F5 benötigt die optionale Abhängigkeit
Pillow(bereits in requirements.txt); wenn nicht installiert, wird das Downsampling automatisch übersprungen, alle anderen Funktionen bleiben unberührt. Das Cache-Verzeichnis liegt standardmäßig im Projekt unter.cache/; mitCACHE_ENABLED=falsekann es vollständig deaktiviert werden.
Bekannte Einschränkungen
Suchergebnisse enthalten gelegentlich Werbung (Baidu
baidu.php?url=...sind Werbelinks, die nicht aufgelöst werden können und beim Abrufen übersprungen/Fehler erzeugen – das ist normal);Anti-Scraping-Maßnahmen der Suchmaschinen können zu gelegentlichen Fehlern führen – einfach die Engine wechseln;
Beim Abrufen großer Seiten / vieler Bilder ist es langsam – unbedingt
toolCallTimeoutMsin der DSH-Konfiguration erhöhen;Die Qualität der Bildbeschreibungen hängt vom lokalen Visionsmodell selbst ab.
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 Connectors
LLM-ready web search + instant answers + URL-to-clean-text fetch for agents and RAG.
The best web search for your AI Agent
Web search, page extraction and structured commerce, social and business data for AI agents
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/meteoritesama/web-search-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server