Fetch MCP
Fetcher MCP
MCP-Server zum Abrufen von Webseiteninhalten mit dem Headless-Browser Playwright.
Vorteile
JavaScript-Unterstützung : Im Gegensatz zu herkömmlichen Web-Scrapern verwendet Fetcher MCP Playwright zur Ausführung von JavaScript und ist daher in der Lage, dynamische Webinhalte und moderne Webanwendungen zu verarbeiten.
Intelligente Inhaltsextraktion : Der integrierte Lesbarkeitsalgorithmus extrahiert automatisch den Hauptinhalt von Webseiten und entfernt Anzeigen, Navigation und andere nicht wesentliche Elemente.
Flexibles Ausgabeformat : Unterstützt sowohl HTML- als auch Markdown-Ausgabeformate und erleichtert so die Integration in verschiedene nachgelagerte Anwendungen.
Parallele Verarbeitung : Das Tool
fetch_urlsermöglicht das gleichzeitige Abrufen mehrerer URLs und verbessert so die Effizienz von Stapelverarbeitungsvorgängen erheblich.Ressourcenoptimierung : Blockiert automatisch unnötige Ressourcen (Bilder, Stylesheets, Schriftarten, Medien), um die Bandbreitennutzung zu reduzieren und die Leistung zu verbessern.
Robuste Fehlerbehandlung : Eine umfassende Fehlerbehandlung und -protokollierung gewährleistet einen zuverlässigen Betrieb auch bei problematischen Webseiten.
Konfigurierbare Parameter : Feinkörnige Kontrolle über Timeouts, Inhaltsextraktion und Ausgabeformatierung für verschiedene Anwendungsfälle.
Related MCP server: mcp-playwright-scraper
Schnellstart
Direkt mit npx ausführen:
npx -y fetcher-mcpErsteinrichtung – installieren Sie den erforderlichen Browser, indem Sie den folgenden Befehl in Ihrem Terminal ausführen:
npx playwright install chromiumHTTP- und SSE-Transport
Verwenden Sie den Parameter --transport=http , um sowohl die Streamable-HTTP-Endpunkt- als auch die SSE-Endpunktdienste gleichzeitig zu starten:
npx -y fetcher-mcp --log --transport=http --host=0.0.0.0 --port=3000Nach dem Start stellt der Server die folgenden Endpunkte bereit:
/mcp– Streambarer HTTP-Endpunkt (modernes MCP-Protokoll)/sse– SSE-Endpunkt (altes MCP-Protokoll)
Kunden können je nach Bedarf auswählen, welche Verbindungsmethode sie verwenden möchten.
Debug-Modus
Führen Sie es mit der Option --debug aus, um das Browserfenster zum Debuggen anzuzeigen:
npx -y fetcher-mcp --debugKonfiguration MCP
Konfigurieren Sie diesen MCP-Server in Claude Desktop:
Unter MacOS: ~/Library/Application Support/Claude/claude_desktop_config.json
Unter Windows: %APPDATA%/Claude/claude_desktop_config.json
{
"mcpServers": {
"fetcher": {
"command": "npx",
"args": ["-y", "fetcher-mcp"]
}
}
}Docker-Bereitstellung
Ausführen mit Docker
docker run -p 3000:3000 ghcr.io/jae-jae/fetcher-mcp:latestBereitstellen mit Docker Compose
Erstellen Sie eine docker-compose.yml Datei:
version: "3.8"
services:
fetcher-mcp:
image: ghcr.io/jae-jae/fetcher-mcp:latest
container_name: fetcher-mcp
restart: unless-stopped
ports:
- "3000:3000"
environment:
- NODE_ENV=production
# Using host network mode on Linux hosts can improve browser access efficiency
# network_mode: "host"
volumes:
# For Playwright, may need to share certain system paths
- /tmp:/tmp
# Health check
healthcheck:
test: ["CMD", "wget", "--spider", "-q", "http://localhost:3000"]
interval: 30s
timeout: 10s
retries: 3Führen Sie dann Folgendes aus:
docker-compose up -dMerkmale
fetch_url- Ruft Webseiteninhalte von einer angegebenen URL abVerwendet den Headless-Browser Playwright zum Parsen von JavaScript
Unterstützt die intelligente Extraktion von Hauptinhalten und die Konvertierung in Markdown
Unterstützt die folgenden Parameter:
url: Die URL der abzurufenden Webseite (erforderlicher Parameter)timeout: Timeout für das Laden der Seite in Millisekunden, Standard ist 30000 (30 Sekunden)waitUntil: Gibt an, wann die Navigation als abgeschlossen gilt. Optionen: „load“, „domcontentloaded“, „networkidle“, „commit“, Standard ist „load“.extractContent: Gibt an, ob der Hauptinhalt intelligent extrahiert werden soll. Der Standardwert ist „true“.maxLength: Maximale Länge des zurückgegebenen Inhalts (in Zeichen), Standard ist keine BegrenzungreturnHtml: Ob HTML-Inhalt anstelle von Markdown zurückgegeben werden soll, Standard ist „false“waitForNavigation: Ob nach dem ersten Laden der Seite auf weitere Navigation gewartet werden soll (nützlich für Websites mit Anti-Bot-Verifizierung), Standard ist „false“navigationTimeout: Maximale Wartezeit für weitere Navigation in Millisekunden, Standard ist 10000 (10 Sekunden)disableMedia: Ob Medienressourcen (Bilder, Stylesheets, Schriftarten, Medien) deaktiviert werden sollen, der Standardwert ist „true“.debug: Ob der Debug-Modus aktiviert werden soll (Browserfenster anzeigen), überschreibt das Befehlszeilenflag --debug, falls angegeben
fetch_urls- Paralleles Batch-Abrufen von Webseiteninhalten von mehreren URLsVerwendet paralleles Abrufen mehrerer Registerkarten für eine verbesserte Leistung
Gibt kombinierte Ergebnisse mit klarer Trennung zwischen den Webseiten zurück
Unterstützt die folgenden Parameter:
urls: Array der abzurufenden URLs (erforderlicher Parameter)Andere Parameter sind dieselben wie bei
fetch_url
Tipps
Umgang mit speziellen Website-Szenarien
Umgang mit Anti-Crawler-Mechanismen
Warten Sie, bis der Ladevorgang abgeschlossen ist : Fügen Sie bei Websites, die CAPTCHA, Weiterleitungen oder andere Überprüfungsmechanismen verwenden, Folgendes in Ihre Eingabeaufforderung ein:
Please wait for the page to fully loadDabei wird der Parameter
waitForNavigation: trueverwendet.Timeout-Dauer erhöhen : Für Websites, die langsam laden:
Please set the page loading timeout to 60 secondsDadurch werden sowohl
timeoutals auchnavigationTimeout-Parameter entsprechend angepasst.
Anpassungen beim Inhaltsabruf
Ursprüngliche HTML-Struktur beibehalten : Wenn die Inhaltsextraktion fehlschlagen könnte:
Please preserve the original HTML contentLegt
extractContent: falseundreturnHtml: true.Vollständigen Seiteninhalt abrufen : Wenn der extrahierte Inhalt zu begrenzt ist:
Please fetch the complete webpage content instead of just the main contentLegt
extractContent: false.Inhalt als HTML zurückgeben : Wenn das HTML-Format anstelle des Standard-Markdowns benötigt wird:
Please return the content in HTML formatLegt
returnHtml: true.
Debuggen und Authentifizierung
Aktivieren des Debug-Modus
Dynamische Debug-Aktivierung : So zeigen Sie das Browserfenster während eines bestimmten Abrufvorgangs an:
Please enable debug mode for this fetch operationDadurch wird
debug: truefestgelegt, auch wenn der Server ohne das Flag--debuggestartet wurde.
Verwenden von benutzerdefinierten Cookies zur Authentifizierung
Manuelle Anmeldung : So melden Sie sich mit Ihren eigenen Anmeldeinformationen an:
Please run in debug mode so I can manually log in to the websiteLegt
debug: trueoder verwendet das Flag--debug, wodurch das Browserfenster für die manuelle Anmeldung geöffnet bleibt.Interaktion mit dem Debug-Browser : Wenn der Debug-Modus aktiviert ist:
Das Browserfenster bleibt geöffnet
Sie können sich mit Ihren Anmeldeinformationen manuell bei der Website anmelden
Nach Abschluss der Anmeldung werden die Inhalte mit Ihrer authentifizierten Sitzung abgerufen
Debug für bestimmte Anfragen aktivieren : Auch wenn der Server bereits läuft, können Sie den Debug-Modus für eine bestimmte Anfrage aktivieren:
Please enable debug mode for this authentication stepLegt
debug: truenur für diese spezielle Anfrage fest und öffnet das Browserfenster für die manuelle Anmeldung.
Entwicklung
Abhängigkeiten installieren
npm installInstallieren Sie den Playwright Browser
Installieren Sie die für Playwright erforderlichen Browser:
npm run install-browserErstellen Sie den Server
npm run buildDebuggen
Verwenden Sie MCP Inspector zum Debuggen:
npm run inspectorSie können zum Debuggen auch den sichtbaren Browsermodus aktivieren:
node build/index.js --debugÄhnliche Projekte
g-search-mcp : Ein leistungsstarker MCP-Server für die Google-Suche, der die parallele Suche mit mehreren Schlüsselwörtern gleichzeitig ermöglicht. Ideal für Batch-Suchvorgänge und Datenerfassung.
Lizenz
Lizenziert unter der MIT-Lizenz
Available Tools
3 toolsbrowser_installA
Install Playwright Chromium browser binary. Call this if you get an error about the browser not being installed.
| Name | Required | Description | Default |
|---|---|---|---|
| withDeps | No | Install system dependencies required by Chromium browser. Default is false | |
| force | No | Force installation even if Chromium is already installed. Default is false |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It explains the tool's purpose and trigger condition but doesn't describe what happens during installation (e.g., download size, time, network requirements), potential side effects, or what constitutes successful completion. It provides basic context but lacks richer behavioral details needed for a mutation tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is perfectly concise with two sentences that each serve a distinct purpose: the first states what the tool does, and the second provides usage guidance. There's zero wasted language, and the information is front-loaded with the core functionality stated immediately.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given this is a mutation tool (installation) with no annotations and no output schema, the description provides good context about when to use it and what it does. However, it doesn't explain what happens after installation completes or what the agent should expect, leaving some gaps in completeness for a tool that modifies system state.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, with both parameters (withDeps, force) well-documented in the schema. The description doesn't add any parameter-specific information beyond what's already in the schema, so it meets the baseline of 3 where the schema does the heavy lifting without additional value from the description.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the specific action ('Install Playwright Chromium browser binary') and resource ('Chromium browser binary'), distinguishing it from sibling tools like fetch_url and fetch_urls which perform different operations. It provides a concrete use case ('if you get an error about the browser not being installed') that makes the purpose unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly states when to use this tool ('if you get an error about the browser not being installed'), providing clear contextual guidance. While it doesn't mention alternatives or exclusions, the specific error-based trigger makes usage guidelines comprehensive and actionable for the stated purpose.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
fetch_urlC
Retrieve web page content from a specified URL
| Name | Required | Description | Default |
|---|---|---|---|
| url | Yes | URL to fetch. Make sure to include the schema (http:// or https:// if not defined, preferring https for most cases) | |
| timeout | No | Page loading timeout in milliseconds, default is 30000 (30 seconds) | |
| waitUntil | No | Specifies when navigation is considered complete, options: 'load', 'domcontentloaded', 'networkidle', 'commit', default is 'load' | |
| extractContent | No | Whether to intelligently extract the main content, default is true | |
| maxLength | No | Maximum length of returned content (in characters), default is no limit | |
| returnHtml | No | Whether to return HTML content instead of Markdown, default is false | |
| waitForNavigation | No | Whether to wait for additional navigation after initial page load (useful for sites with anti-bot verification), default is false | |
| navigationTimeout | No | Maximum time to wait for additional navigation in milliseconds, default is 10000 (10 seconds) | |
| disableMedia | No | Whether to disable media resources (images, stylesheets, fonts, media), default is true | |
| debug | No | Whether to enable debug mode (showing browser window), overrides the --debug command line flag if specified |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure but only states the basic action ('Retrieve web page content'). It doesn't mention potential side effects (e.g., network requests, rate limits), authentication needs, error handling, or what the return content looks like (structure or format). This is inadequate for a tool with 10 parameters and no output schema.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, efficient sentence that front-loads the core purpose without unnecessary words. It earns its place by clearly stating what the tool does, making it easy to scan and understand.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a complex tool with 10 parameters, no annotations, and no output schema, the description is insufficient. It doesn't explain behavioral traits, return values, or usage context, leaving significant gaps that could hinder correct tool selection and invocation by an AI agent.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, providing detailed documentation for all 10 parameters. The description adds no additional parameter semantics beyond implying a 'URL' input, which is already covered in the schema. Baseline 3 is appropriate when the schema does the heavy lifting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb ('Retrieve') and resource ('web page content from a specified URL'), making the purpose immediately understandable. It doesn't explicitly differentiate from sibling tools like 'fetch_urls' (plural) or 'browser_install', but the singular 'URL' suggests this is for single-page retrieval versus batch operations.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided on when to use this tool versus alternatives like 'fetch_urls' or 'browser_install'. The description lacks context about prerequisites, typical use cases, or exclusions, leaving the agent to infer usage based on tool names alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
fetch_urlsC
Retrieve web page content from multiple specified URLs
| Name | Required | Description | Default |
|---|---|---|---|
| urls | Yes | Array of URLs to fetch | |
| timeout | No | Page loading timeout in milliseconds, default is 30000 (30 seconds) | |
| waitUntil | No | Specifies when navigation is considered complete, options: 'load', 'domcontentloaded', 'networkidle', 'commit', default is 'load' | |
| extractContent | No | Whether to intelligently extract the main content, default is true | |
| maxLength | No | Maximum length of returned content (in characters), default is no limit | |
| returnHtml | No | Whether to return HTML content instead of Markdown, default is false | |
| waitForNavigation | No | Whether to wait for additional navigation after initial page load (useful for sites with anti-bot verification), default is false | |
| navigationTimeout | No | Maximum time to wait for additional navigation in milliseconds, default is 10000 (10 seconds) | |
| disableMedia | No | Whether to disable media resources (images, stylesheets, fonts, media), default is true | |
| debug | No | Whether to enable debug mode (showing browser window), overrides the --debug command line flag if specified |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden of behavioral disclosure. It states the tool retrieves content but lacks details on critical behaviors: it doesn't mention authentication needs, rate limits, error handling, or what the output looks like (e.g., format, structure). For a tool with 10 parameters and no output schema, this is a significant gap in transparency.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, efficient sentence: 'Retrieve web page content from multiple specified URLs.' It's front-loaded with the core purpose, has zero wasted words, and is appropriately sized for the tool's complexity. Every part of the sentence earns its place by clearly stating the action and scope.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (10 parameters, no annotations, no output schema), the description is incomplete. It doesn't address behavioral aspects like how content is returned, error cases, or performance constraints. While the schema covers parameters well, the description fails to provide necessary context for effective use, especially without annotations or output schema to fill gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema description coverage is 100%, meaning all parameters are well-documented in the input schema itself. The description doesn't add any semantic details beyond what's in the schema (e.g., it doesn't explain how 'urls' are processed or interactions between parameters). With high schema coverage, the baseline score of 3 is appropriate, as the description doesn't compensate but also doesn't detract.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: 'Retrieve web page content from multiple specified URLs.' It specifies the verb ('Retrieve'), resource ('web page content'), and scope ('multiple specified URLs'), which is specific and actionable. However, it doesn't explicitly distinguish this tool from its sibling 'fetch_url' (which presumably handles single URLs), missing full differentiation for a top score.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives. It doesn't mention the sibling tool 'fetch_url' or explain scenarios where fetching multiple URLs is preferred over single ones. There's no context about prerequisites, limitations, or best practices, leaving the agent without usage direction.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
1 tool update
v1.0.0- Added
browser_install
2 tool updates
- First observed
fetch_url - First observed
fetch_urls
TDQS
Scored across 3 tools
The tools are mostly distinct, with 'fetch_url' and 'fetch_urls' clearly differentiated by single vs. multiple URLs. However, an agent might initially confuse 'fetch_url' and 'fetch_urls' as similar operations, though the descriptions clarify the distinction. 'browser_install' is completely separate in purpose.
All tool names follow a consistent snake_case pattern with clear verb_noun structure: 'browser_install', 'fetch_url', and 'fetch_urls'. The naming is predictable and readable throughout the set.
With only 3 tools, the server feels thin for a web fetching domain, lacking operations like navigation, interaction, or content parsing. While the core fetching is covered, the scope seems limited compared to typical web automation needs.
For a web fetching server, there are significant gaps: no tools for interacting with pages (e.g., clicking, filling forms), extracting specific content, handling JavaScript, or managing sessions. The surface is severely incomplete for common web automation tasks beyond basic URL retrieval.
Maintenance
Related MCP Connectors
MCP server (stdio): fetch web pages as clean readable markdown via the AgentForge API
MCP server for Firecrawl — web search, scraping, and biomedical/arXiv paper search.
Turn any public website into an MCP server for agents to search, read and navigate.
MCP server for web extraction and rendering via AceDataCloud WebExtrator
Related MCP Servers
- FlicenseNot gradedqualityNot gradedmaintenanceAn MCP server for web content extraction that converts HTML pages into clean, LLM-optimized Markdown using Mozilla's Readability. It supports batch processing, intelligent multi-page crawling, and configurable caching while respecting robots.txt standards.69 npm-
- AlicenseNot gradedqualityDmaintenanceAn MCP server that scrapes content from web pages, including JavaScript-heavy sites, and converts it into high-quality Markdown. It leverages Playwright for headless browser automation and Pypandoc for clean content conversion.Apache 2.0
- AlicenseBqualityCmaintenanceAn MCP server for deep research that extracts clean text from web pages using hybrid extraction strategies and compiles findings into structured markdown reports. It provides tools for single and batch URL content extraction with optional Playwright support for JavaScript-heavy sites.4MIT
- AlicenseAqualityDmaintenanceMCP server for fetching web content with browser fingerprint camouflage, converting HTML to clean Markdown to bypass bot detection.11MIT