@trishchuk/mcp-fetch-server
@trishchuk/mcp-fetch-server
一个高性能的模型上下文协议(MCP)服务器,为AI智能体(Claude Code、Claude Desktop、Cursor、Windsurf、Cline、Antigravity等)提供具备反机器人防护能力的fetch工具。
由@trishchuk/fetch驱动——这是一个原生curl-impersonate风格的HTTP客户端,能够精确模拟真实浏览器的TLS(JA3/JA4、ClientHello)和HTTP/2指纹。
🚀 为什么选择此服务器?
标准的Node.js/Undici HTTP客户端会立即被现代机器人防护系统(Cloudflare Turnstile / 攻击模式、DataDome、PerimeterX / HUMAN、Akamai、Kasada、AWS WAF)识别并拦截。
此外,标准MCP抓取工具在处理大型负载时经常失败,或导致LLM令牌上下文爆炸。
@trishchuk/mcp-fetch-server解决了这两个问题:
真实的浏览器模拟:复制现代浏览器(Chrome、Safari、Firefox)的精确密码套件、TLS扩展、ALPN顺序和HTTP/2设置帧。
LLM上下文安全的截断:将响应体流式传输并限制在2MB(
maxResponseBytes)。超大的页面会被干净地截断,并以"truncated": true标记,而不是抛出错误崩溃。有状态会话:通过
session参数,在多个智能体工具调用之间维护Cookie、登录状态和连接池。智能编码:自动检测MIME类型,对HTML/JSON/XML返回干净的UTF-8文本,对二进制文件(图片、PDF、文档)返回Base64编码。
Related MCP server: smart-webfetch-mcp
✅ 要求
Node.js >= 24 — 由
@trishchuk/fetch要求。预构建的原生二进制文件支持macOS(arm64、x64)、Linux(x64/arm64、glibc和musl)以及Windows(x64)。底层客户端不支持其他平台。
📦 安装与设置
选项1:使用npx运行(无需安装)
您可以直接通过npx运行服务器:
npx -y @trishchuk/mcp-fetch-server选项2:全局或本地安装
# 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客户端配置
Claude Code
直接通过CLI添加:
# 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.jsClaude Desktop
添加至您的claude_desktop_config.json:
macOS:
~/Library/Application Support/Claude/claude_desktop_config.jsonWindows:
%APPDATA%\Claude\claude_desktop_config.jsonLinux:
~/.config/Claude/claude_desktop_config.json
{
"mcpServers": {
"fetch": {
"command": "npx",
"args": ["-y", "@trishchuk/mcp-fetch-server"]
}
}
}Cursor / Windsurf / Antigravity(.mcp.json)
在工作区创建或更新.mcp.json:
{
"mcpServers": {
"fetch": {
"command": "npx",
"args": ["-y", "@trishchuk/mcp-fetch-server"]
}
}
}🛠️ 工具参考:fetch
输入参数
参数 | 类型 | 默认值 | 说明 |
|
| 必需 | 目标绝对URL(例如 |
|
|
| HTTP方法( |
|
|
| 请求头,键值对形式( |
|
|
| 请求体,以UTF-8字符串发送(JSON、表单编码、纯文本)。 |
|
|
| 浏览器指纹预设(例如 |
|
|
| 声明的操作系统: |
|
|
| 代理URL: |
|
|
| 会话ID,用于在多次调用之间共享客户端连接和Cookie存储。 |
|
|
| 自定义DNS固定(例如 |
|
|
| 重定向模式: |
|
|
| 强制协议版本: |
|
|
| 最小TLS版本: |
|
|
| 最大TLS版本: |
|
|
| 请求超时时间,单位毫秒。 |
|
|
| 响应体大小限制(字节,最大2MB)。超过此限制的响应会被安全截断。 |
|
|
| 响应体返回格式: |
响应模式
1. 成功的HTTP交换
任何完成的HTTP传输都会返回标准的JSON结果(包括404、500或redirect: "manual"下的3xx状态码):
{
"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. 网络/传输故障
如果网络连接失败、超时或URL无效,工具将返回isError: true:
{
"error": true,
"code": "TIMEOUT",
"message": "failed to read response body: request or response body error: operation timed out"
}💡 智能体使用示例
1. 绕过受保护目标上的机器人检测
{
"url": "https://protected-site.com/products",
"impersonate": "chrome_147",
"platform": "macos",
"headers": {
"Accept-Language": "en-US,en;q=0.9"
}
}2. 带持久会话的多步抓取(Cookie存储)
// 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. 通过SOCKS5代理路由
{
"url": "https://geo-restricted.example.com",
"proxy": "socks5://user:pass@proxy.example.com:1080",
"impersonate": "safari_26"
}4. 获取二进制资源(图片、PDF)
{
"url": "https://example.com/report.pdf",
"encoding": "base64"
}5. 用于SSRF安全抓取的DNS固定
{
"url": "https://internal-origin.example.com/feed",
"resolve": {
"internal-origin.example.com": "192.0.2.42"
},
"redirect": "manual"
}🔬 模拟预设与指纹
@trishchuk/mcp-fetch-server支持多种浏览器指纹:
Chrome:
"chrome_100"…"chrome_149"(例如"chrome_147"、"chrome_131"、"chrome_116")Edge:
"edge_101"…"edge_148"Opera:
"opera_116"…"opera_131"Firefox:
"firefox_109"、"firefox_133"、"firefox_147"…,以及"firefox_private_136"和"firefox_android_135"Safari:
"safari_15.3"…"safari_26.4",以及iOS/iPad变体("safari_ios_26"、"safari_ipad_26")OkHttp(Android应用):
"okhttp_3.9"…"okhttp_5"动态:
"random"、"weighted_random"(自动轮换指纹,按session固定)
版本号使用下划线(chrome_147,而不是chrome147)。未知名称将快速失败,并返回InvalidArg错误,列出所有可接受的变体。
🧪 开发
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测试通过stdio启动真实服务器,并使用MCP客户端针对本地HTTP服务器进行驱动,涵盖了上限截断、重定向模式、HEAD、base64响应体、超时和传输错误。
📄 许可证
MIT © Taras Trishchuk
Available Tools
1 toolfetchFetchA
HTTP fetch backed by @trishchuk/fetch: a curl-impersonate-style client that emulates a real browser TLS/HTTP2 fingerprint (JA3/JA4, ClientHello, ALPN) so requests are not flagged by fingerprint-based bot detection (Cloudflare, DataDome, PerimeterX, etc.) the way Node's default HTTP client is. Use it for GET/POST/etc. against sites that block or challenge plain scrapers.
| Name | Required | Description | Default |
|---|---|---|---|
| url | Yes | Absolute URL to request. | |
| body | No | Request body, sent as UTF-8 text (e.g. JSON string, form-encoded string). | |
| proxy | No | Proxy URL: http://, https://, or socks5://, optionally with user:pass@. | |
| method | No | HTTP method. | GET |
| headers | No | Request headers. | |
| resolve | No | Hostname-to-IP pinning, e.g. { "example.com": "192.0.2.1" }. Useful to pin DNS for SSRF-safety or A/B hosts. | |
| session | No | Opaque session id. Reusing it across calls keeps the same underlying client and cookie jar (e.g. to stay logged in). | |
| encoding | No | How to return the body: "auto" picks text for text-like content-types and base64 otherwise. | auto |
| platform | No | Declared OS for the fingerprint. | |
| redirect | No | Redirect handling. Defaults to "follow". | |
| timeoutMs | No | Request deadline in milliseconds. | |
| httpVersion | No | Force HTTP/1.1 or HTTP/2 instead of negotiating. | |
| impersonate | No | Browser fingerprint profile, e.g. "chrome_147", "safari_26", "random". Defaults to the library default. | |
| tlsMaxVersion | No | ||
| tlsMinVersion | No | ||
| maxResponseBytes | No | Response body cap in bytes (max 2097152, i.e. 2MB, to keep tool output usable). A larger body is truncated to this size and flagged with "truncated": true, not rejected. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses the critical behavioral trait of browser fingerprint emulation (JA3/JA4, TLS, HTTP/2) to avoid detection. Without annotations, this provides transparency about why requests succeed. However, it does not mention whether the tool is read-only or has side effects, though HTTP fetch is inherently non-destructive to local state.
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 extremely concise: two sentences that front-load the core purpose and differentiator, followed by usage guidance. Every sentence serves a purpose, and there is no redundancy or filler.
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 has 16 parameters, no annotations, and no output schema, the description is somewhat incomplete. It does not explain what the tool returns (e.g., status code, headers, body format) or that the response is a standard HTTP response. While the schema covers some constraints like maxResponseBytes, the agent lacks clarity on what to expect after invocation.
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 88%, so the input schema already documents most parameters. The description adds general context about the underlying library and fingerprinting motivation but does not provide additional details on individual parameters beyond what schema descriptions offer. The baseline of 3 is appropriate.
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 identifies the tool as an HTTP fetch client with browser fingerprint emulation to bypass bot detection. It specifies the verb 'fetch', the resource (URLs), and the unique value proposition (curl-impersonate style). This distinguishes it from standard HTTP clients and makes its purpose immediately obvious.
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 the tool: 'against sites that block or challenge plain scrapers'. It contrasts with Node's default HTTP client, implying an alternative. However, it does not list explicit sibling tools or provide when-not-to-use guidance, such as for sites without bot detection.
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
v0.1.0- First observed
fetch
TDQS
Scored across 1 tool
With only a single tool, there is no possibility of confusion with other tools. The tool's purpose is clearly described and distinct by default.
With only one tool, there is no pattern to judge. The name 'fetch' is simple and conventional, matching common HTTP client terminology, but the lack of a verb_noun convention is neutral.
A single tool for an HTTP fetch server is too minimal. Most similar servers would include additional tools for managing headers, cookies, or caching, making this feel under-scoped for its stated purpose of scraping.
The server only provides a basic fetch tool with no support for managing sessions, handling redirects, managing cookies, or performing other common HTTP operations. This leaves significant gaps for any realistic scraping workflow.
Maintenance
Related MCP Connectors
Reliable web fetching for AI agents with retry, circuit breaker, caching, and anti-bot bypass
Reliable web access for AI agents: smart HTTP, rotating proxies, and full-browser rendering.
Prompt-injection scanning and safe webpage fetching for AI agents reading untrusted content.
Web search, browser automation, scraping, crawling and CAPTCHA solving for AI agents.
Related MCP Servers
- AlicenseNot gradedqualityAmaintenanceEnables 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.2,220MIT
- AlicenseAqualityDmaintenanceContext-aware web fetching for LLMs, providing 7 tools to check page size, fetch with truncation, extract code/sections/links/tables, and paginate large documents.7MIT
- AlicenseAqualityDmaintenanceEnables LLMs to fetch and extract web content as markdown with browser impersonation to bypass basic bot detection.1MIT
- AlicenseNot gradedqualityDmaintenanceProvides AI agents with reliable web fetching capabilities, handling retries, caching, and anti-bot bypass automatically.MIT