Skip to main content
Glama
x51xxx

@trishchuk/mcp-fetch-server

by x51xxx

@trishchuk/mcp-fetch-server

npm version License: MIT MCP Compatible Node.js

Ein leistungsstarker Model Context Protocol (MCP) Server, der ein gegen Bots resistentes fetch-Werkzeug für KI-Agenten (Claude Code, Claude Desktop, Cursor, Windsurf, Cline, Antigravity usw.) bereitstellt.

Angetrieben von @trishchuk/fetch – einem nativen HTTP-Client im Stil von curl-impersonate, der präzise echte Browser TLS (JA3/JA4, ClientHello) und HTTP/2-Fingerabdrücke nachahmt.


🚀 Warum dieser Server?

Standard-Node.js/Undici HTTP-Clients werden von modernen Bot-Schutzsystemen (Cloudflare Turnstile / Under Attack Mode, DataDome, PerimeterX / HUMAN, Akamai, Kasada, AWS WAF) sofort erkannt und blockiert.

Darüber hinaus scheitern standardmäßige MCP-Fetching-Werkzeuge oft an großen Nutzlasten oder sprengen die LLM-Token-Kontexte.

@trishchuk/mcp-fetch-server löst beide Probleme:

  1. Realistische Browser-Imitation: Repliziert exakte Cipher-Suites, TLS-Erweiterungen, ALPN-Reihenfolge und HTTP/2-Einstellungsrahmen moderner Browser (Chrome, Safari, Firefox).

  2. LLM-kontextsichere Kürzung: Streamt und begrenzt Antwortkörper auf 2 MB (maxResponseBytes). Zu große Seiten werden sauber gekürzt und mit "truncated": true markiert, anstatt mit Fehlern abzustürzen.

  3. Zustandsbehaftete Sitzungen: Behält Cookies, Login-Zustände und Verbindungspools über mehrere Agenten-Werkzeugaufrufe hinweg mit dem Parameter session bei.

  4. Intelligente Kodierung: Erkennt automatisch MIME-Typen und gibt sauberen UTF-8-Text für HTML/JSON/XML oder Base64 für Binärdateien (Bilder, PDFs, Dokumente) zurück.


Related MCP server: webfetch-mcp

✅ Voraussetzungen

  • Node.js >= 24 – erforderlich von @trishchuk/fetch.

  • Vorgefertigte native Binärdateien werden für macOS (arm64, x64), Linux (x64/arm64, glibc und musl) und Windows (x64) ausgeliefert. Andere Plattformen werden vom zugrunde liegenden Client nicht unterstützt.


📦 Installation & Einrichtung

Option 1: Ausführen mit npx (Keine Installation erforderlich)

Sie können den Server direkt via npx ausführen:

npx -y @trishchuk/mcp-fetch-server

Option 2: Globale oder lokale Installation

# Global
npm install -g @trishchuk/mcp-fetch-server

# Or clone & install locally
git clone https://github.com/x51xxx/mcp-fetch-server.git
cd mcp-fetch-server
npm install

⚙️ MCP-Client-Konfiguration

Claude Code

Direkt über die CLI hinzufügen:

# Using npx (recommended)
claude mcp add fetch -- npx -y @trishchuk/mcp-fetch-server

# Or using local path
claude mcp add fetch -- node /path/to/mcp-fetch-server/src/index.js

Claude Desktop

Zu Ihrer claude_desktop_config.json hinzufügen:

  • macOS: ~/Library/Application Support/Claude/claude_desktop_config.json

  • Windows: %APPDATA%\Claude\claude_desktop_config.json

  • Linux: ~/.config/Claude/claude_desktop_config.json

{
  "mcpServers": {
    "fetch": {
      "command": "npx",
      "args": ["-y", "@trishchuk/mcp-fetch-server"]
    }
  }
}

Cursor / Windsurf / Antigravity (.mcp.json)

Erstellen oder aktualisieren Sie .mcp.json in Ihrem Arbeitsbereich:

{
  "mcpServers": {
    "fetch": {
      "command": "npx",
      "args": ["-y", "@trishchuk/mcp-fetch-server"]
    }
  }
}

🛠️ Werkzeugreferenz: fetch

Eingabeparameter

Parameter

Typ

Standard

Beschreibung

url

string

erforderlich

Ziel-absolute URL (z. B. https://example.com/api).

method

string

"GET"

HTTP-Methode (GET, POST, PUT, DELETE, PATCH, HEAD usw.).

headers

object

undefined

Anfrage-Header als Schlüssel-Wert-Paare ({"Authorization": "Bearer ..."}).

body

string

undefined

Anforderungskörper, gesendet als UTF-8-Zeichenkette (JSON, formularcodiert, Rohtext).

impersonate

string

"chrome_147"

Browser-Fingerabdruck-Voreinstellung (z. B. "chrome_147", "safari_26", "random").

platform

string

undefined

Deklariertes Betriebssystem: "windows", "macos", "linux", "android" oder "ios".

proxy

string

undefined

Proxy-URL: http://, https:// oder socks5:// (unterstützt user:pass@host:port).

session

string

undefined

Sitzungs-ID zur gemeinsamen Nutzung von Client-Verbindungen und Cookie-Jars über mehrere Aufrufe.

resolve

object

undefined

Benutzerdefiniertes DNS-Pinning (z. B. {"example.com": "1.2.3.4"}). SSRF-sicheres Testen.

redirect

string

"follow"

Umleitungsmodus: "follow", "manual" oder "error".

httpVersion

string

undefined

Erzwungene Protokollversion: "http1" oder "http2".

tlsMinVersion

string

undefined

Minimale TLS-Version: "1.0", "1.1", "1.2", "1.3".

tlsMaxVersion

string

undefined

Maximale TLS-Version: "1.0", "1.1", "1.2", "1.3".

timeoutMs

number

undefined

Gesamtzeitüberschreitung der Anfrage in Millisekunden.

maxResponseBytes

number

2097152

Körperlimit in Bytes (maximal 2 MB). Antworten, die dies überschreiten, werden sicher gekürzt.

encoding

string

"auto"

Format der Körperrückgabe: "auto" (Text für textuelle MIME-Typen, base64 für Binäres), "text" oder "base64".


Antwortschemata

1. Erfolgreicher HTTP-Austausch

Jeder abgeschlossene HTTP-Transfer gibt ein standardmäßiges JSON-Ergebnis zurück (einschließlich 404, 500 oder 3xx unter redirect: "manual"):

{
  "status": 200,
  "statusText": "OK",
  "ok": true,
  "url": "https://example.com/data",
  "redirected": false,
  "headers": {
    "content-type": "application/json; charset=utf-8",
    "cache-control": "max-age=3600"
  },
  "bodyEncoding": "text",
  "body": "{\"message\": \"Hello world\"}",
  "truncated": false
}

2. Netzwerk-/Transportfehler

Wenn die Netzwerkverbindung fehlschlägt, eine Zeitüberschreitung auftritt oder die URL ungültig ist, gibt das Werkzeug isError: true zurück:

{
  "error": true,
  "code": "TIMEOUT",
  "message": "failed to read response body: request or response body error: operation timed out"
}

💡 Verwendungsbeispiele für Agenten

1. Bot-Erkennung auf geschütztem Ziel umgehen

{
  "url": "https://protected-site.com/products",
  "impersonate": "chrome_147",
  "platform": "macos",
  "headers": {
    "Accept-Language": "en-US,en;q=0.9"
  }
}
// Step 1: Login / Obtain Session Cookie
{
  "url": "https://example.com/api/login",
  "method": "POST",
  "session": "agent-crawler-01",
  "headers": { "Content-Type": "application/json" },
  "body": "{\"user\":\"admin\",\"password\":\"secret\"}"
}

// Step 2: Access protected resource (session cookies automatically preserved)
{
  "url": "https://example.com/api/dashboard",
  "session": "agent-crawler-01"
}

3. Routen über einen SOCKS5-Proxy

{
  "url": "https://geo-restricted.example.com",
  "proxy": "socks5://user:pass@proxy.example.com:1080",
  "impersonate": "safari_26"
}

4. Abrufen von Binär-Assets (Bilder, PDFs)

{
  "url": "https://example.com/report.pdf",
  "encoding": "base64"
}

5. DNS-Pinning für SSRF-sichere Aufnahme

{
  "url": "https://internal-origin.example.com/feed",
  "resolve": {
    "internal-origin.example.com": "192.0.2.42"
  },
  "redirect": "manual"
}

🔬 Impersonation-Voreinstellungen & Fingerabdrücke

@trishchuk/mcp-fetch-server unterstützt eine breite Palette von Browser-Fingerabdrücken:

  • Chrome: "chrome_100""chrome_149" (z. B. "chrome_147", "chrome_131", "chrome_116")

  • Edge: "edge_101""edge_148"

  • Opera: "opera_116""opera_131"

  • Firefox: "firefox_109", "firefox_133", "firefox_147" …, plus "firefox_private_136" und "firefox_android_135"

  • Safari: "safari_15.3""safari_26.4", plus iOS/iPad-Varianten ("safari_ios_26", "safari_ipad_26")

  • OkHttp (Android-Apps): "okhttp_3.9""okhttp_5"

  • Dynamisch: "random", "weighted_random" (rotiert Fingerabdrücke automatisch, pro session festgelegt)

Versionsnummern verwenden Unterstriche (chrome_147, nicht chrome147). Ein unbekannter Name schlägt sofort mit einem InvalidArg-Fehler fehl, der alle akzeptierten Varianten auflistet.


🧪 Entwicklung

npm install
npm start          # run the server over stdio
npm test           # end-to-end smoke tests, no network required
npm run format     # format with Biome
npm run lint       # lint with Biome
npm run check      # format + lint check, also run before publish

Die Tests starten den echten Server über stdio und steuern ihn mit einem MCP-Client gegen einen lokalen HTTP-Server, wobei die Kürzung an der Grenze, Umleitungsmodi, HEAD, Base64-Körper, Zeitüberschreitungen und Transportfehler abgedeckt werden.


📄 Lizenz

MIT © Taras Trishchuk

Install Server
A
license - permissive license
A
quality
C
maintenance

Maintenance

Maintainers
Response time
Release cycle
Releases (12mo)
Commit activity

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Tools

Related MCP Servers

  • A
    license
    -
    quality
    A
    maintenance
    Enables AI agents to perform undetectable browser automation that bypasses Cloudflare, antibots, and social media blocks. Provides 105 tools for element extraction, network debugging, and real-world web scraping with a 98.7% success rate on protected sites.
    1,589
    MIT
  • A
    license
    -
    quality
    C
    maintenance
    Drop-in MCP replacement for the built-in WebFetch tool. Adds domain-scoped custom HTTP headers via YAML config, with bot-block detection, HTML-to-text extraction, retries, proxies, and prompt-injection sanitization.
    1
    MIT
  • A
    license
    A
    quality
    D
    maintenance
    Context-aware web fetching for LLMs, providing 7 tools to check page size, fetch with truncation, extract code/sections/links/tables, and paginate large documents.
    7
    MIT

View all related MCP servers

Related MCP Connectors

  • Reliable web access for AI agents: smart HTTP, rotating proxies, and full-browser rendering.

  • Deterministic AI agent microtools, no accounts/API keys. fetch_extract: 98% token cut. 38 tools.

  • Web scraping for AI agents. Converts URLs to clean, LLM-ready Markdown with anti-bot bypass.

View all MCP Connectors

Latest Blog Posts

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/x51xxx/mcp-fetch-server'

If you have feedback or need assistance with the MCP directory API, please join our Discord server