mcpField
S
superfetch

superfetch

本地服务
github.com/j0hanz浏览器自动化029 周前更新

关于 superfetch

superfetch 被标注为抓取网页内容的 MCP 服务,但所附 README 描述的是将网页转换为 Markdown 的 Fetch URL MCP Server。README 说明了 URL 解析、后台任务以及 stdio 或可选 HTTP 传输。

主要功能

  1. 01将网页转换为 Markdown
  2. 02将代码托管链接解析为原始内容
  3. 03将耗时抓取作为后台任务运行
  4. 04支持 stdio 和 HTTP 传输
  5. 05提供使用说明资源和帮助提示词

适用场景

  1. 01为大模型上下文整理文档或文章
  2. 02从支持的站点抓取仓库文件或 Gist
  3. 03通过任务进度获取大型或缓慢页面

MCP 相关

所附 README 描述了 `fetch-url` 工具,可抓取 URL 并返回 Markdown 和元数据。它还提供使用说明资源、帮助提示词及可选的后台任务支持。

配置

本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。

mcp.json · 通用配置
{
"mcpServers": {
"j0hanz-superfetch": {
"command": "npx",
"args": [
"-y",
"@j0hanz/superfetch"
]
}
}
}
启动命令npx -y @j0hanz/superfetch

本地服务需要在你的电脑上安装运行环境(如 Node.js 18+)。各客户端的配置文件位置不同,请参考客户端文档。

安装包
npm@j0hanz/superfetch1.0.2

工具

还没有获取到工具列表

本地服务需要在你的电脑上运行后才能读取工具,维护者暂未提供工具列表。

详细介绍

Fetch URL MCP 服务

npm version License

Install in VS Code Install in VS Code Insiders Install in Visual Studio

Add to LM Studio Install in Cursor

一个用于抓取网页并将其转换为简洁易读 Markdown 的 MCP 服务。

概述

此服务接收 URL,抓取页面并去除所有不需要的内容——导航栏、侧边栏、横幅和脚本,只保留 Markdown 格式的主要内容。它非常适合将网页内容提供给大模型,让模型获取页面的精华内容,不受杂项干扰。它还能识别 GitHub、GitLab、Bitbucket 和 Gist URL,并将其改写为直接抓取原始内容。

默认情况下,服务通过 stdio 运行。如果需要带身份验证、速率限制、TLS 和会话支持的标准 HTTP 端点,请传入 --http。

主要功能

  • HTML 转 Markdown — 将任何公开网页转换为简洁易读的 Markdown,并提供 title、url、contentSize 和 truncated 等元数据。
  • 智能 URL 处理 — 识别 GitHub、GitLab、Bitbucket 和 Gist 页面 URL,并在抓取前将其改写为原始内容端点。
  • 任务模式 — 大型或加载缓慢的页面可以作为异步 MCP 任务运行,并提供进度更新,避免阻塞。在 HTTP 模式下,任务绑定到经过身份验证的调用方,而非单个 MCP 会话,因此同一经过身份验证的主体重新连接后可以恢复任务。轮询任务状态会返回任务摘要;数值进度则通过 notifications/progress 在带外提供。
  • 自描述 — 提供 internal://instructions 资源和 get-help 提示词,帮助客户端了解如何使用。
  • HTTP 模式 — 可选通过 Streamable HTTP 提供服务,支持主机/来源验证、Bearer 或 OAuth 身份验证、速率限制、运行状况检查和 TLS。

Web 客户端

如果你想在不配置 MCP 的情况下使用此服务,可以使用基于浏览器的客户端。

在线应用 · 源代码

要求

  • Node.js >= 24
  • Docker(可选)— 仅在你想运行容器镜像时需要

快速开始

将以下内容添加到 MCP 客户端配置中:

{
  "mcpServers": {
    "fetch-url-mcp": {
      "command": "npx",
      "args": ["-y", "@j0hanz/fetch-url-mcp@latest"]
    }
  }
}

客户端配置

在 VS Code 中安装 [![在 VS Code 中安装](https://img.shields.io/badge/VS_Code-Install_Server-0098FF?style=flat-square&logo=visualstudiocode&logoColor=white)](https://insiders.vscode.dev/redirect/mcp/install?name=fetch-url&config=%7B%22command%22%3A%22npx%22%2C%22args%22%3A%5B%22-y%22%2C%22%40j0hanz%2Ffetch-url-mcp%40latest%22%5D%7D)

添加到 .vscode/mcp.json:

{
  "servers": {
    "fetch-url-mcp": {
      "type": "stdio",
      "command": "npx",
      "args": ["-y", "@j0hanz/fetch-url-mcp@latest"]
    }
  }
}

或通过 CLI 安装:

code --add-mcp '{"name":"fetch-url-mcp","command":"npx","args":["-y","@j0hanz/fetch-url-mcp@latest"]}'

有关详细信息,请参阅 VS Code MCP 文档。

在 VS Code Insiders 中安装

在 VS Code Insiders 中安装

添加到 .vscode/mcp.json:

{
  "servers": {
    "fetch-url-mcp": {
      "type": "stdio",
      "command": "npx",
      "args": ["-y", "@j0hanz/fetch-url-mcp@latest"]
    }
  }
}

或通过 CLI 安装:

code-insiders --add-mcp '{"name":"fetch-url-mcp","command":"npx","args":["-y","@j0hanz/fetch-url-mcp@latest"]}'

有关详细信息,请参阅 VS Code Insiders MCP 文档。

在 Cursor 中安装

在 Cursor 中安装

添加到 ~/.cursor/mcp.json:

{
  "mcpServers": {
    "fetch-url-mcp": {
      "command": "npx",
      "args": ["-y", "@j0hanz/fetch-url-mcp@latest"]
    }
  }
}

有关详细信息,请参阅 Cursor MCP 文档。

在 Visual Studio 中安装

在 Visual Studio 中安装

如需在解决方案范围内进行设置,请将以下内容添加到解决方案根目录下的 .mcp.json:

{
  "servers": {
    "fetch-url-mcp": {
      "type": "stdio",
      "command": "npx",
      "args": ["-y", "@j0hanz/fetch-url-mcp@latest"]
    }
  }
}

有关详细信息,请参阅 Visual Studio MCP 文档。

在 Goose 中安装

在 macOS/Linux 上添加到 ~/.config/goose/config.yaml,或在 Windows 上添加到 %APPDATA%\Block\goose\config\config.yaml:

extensions:
  fetch-url-mcp:
    name: fetch-url-mcp
    cmd: npx
    args: ['-y', '@j0hanz/fetch-url-mcp@latest']
    enabled: true
    type: stdio
    timeout: 300

有关详细信息,请参阅 Goose 扩展文档。

在 LM Studio 中安装

添加到 LM Studio

在 macOS/Linux 上添加到 ~/.lmstudio/mcp.json,或在 Windows 上添加到 %USERPROFILE%/.lmstudio/mcp.json:

{
  "mcpServers": {
    "fetch-url-mcp": {
      "command": "npx",
      "args": ["-y", "@j0hanz/fetch-url-mcp@latest"]
    }
  }
}

有关详细信息,请参阅 LM Studio MCP 文档。

在 Claude Desktop 中安装

添加到 claude_desktop_config.json:

{
  "mcpServers": {
    "fetch-url-mcp": {
      "command": "npx",
      "args": ["-y", "@j0hanz/fetch-url-mcp@latest"]
    }
  }
}

有关详细信息,请参阅 Claude Desktop MCP 文档。

在 Claude Code 中安装

使用 CLI:

claude mcp add fetch-url-mcp -- npx -y @j0hanz/fetch-url-mcp@latest

对于项目范围的配置,Claude Code 会写入 .mcp.json,内容如下:

{
  "mcpServers": {
    "fetch-url-mcp": {
      "command": "npx",
      "args": ["-y", "@j0hanz/fetch-url-mcp@latest"],
      "env": {}
    }
  }
}

有关详细信息,请参阅 Claude Code MCP 文档。

在 Windsurf 中安装

添加到 ~/.codeium/windsurf/mcp_config.json:

{
  "mcpServers": {
    "fetch-url-mcp": {
      "command": "npx",
      "args": ["-y", "@j0hanz/fetch-url-mcp@latest"]
    }
  }
}

有关详细信息,请参阅 Windsurf MCP 文档。

在 Amp 中安装

在 macOS/Linux 上添加到 ~/.config/amp/settings.json,在 Windows 上添加到 %USERPROFILE%\.config\amp\settings.json,或添加到 .amp/settings.json 以进行工作区范围的配置:

{
  "amp.mcpServers": {
    "fetch-url-mcp": {
      "command": "npx",
      "args": ["-y", "@j0hanz/fetch-url-mcp@latest"]
    }
  }
}

或通过 CLI 安装:

amp mcp add fetch-url-mcp -- npx -y @j0hanz/fetch-url-mcp@latest

有关详细信息,请参阅 Amp 文档。

在 Cline 中安装 打开 MCP Servers 面板,选择 `Configure MCP Servers`,然后将以下内容添加到 `cline_mcp_settings.json`:
{
  "mcpServers": {
    "fetch-url-mcp": {
      "command": "npx",
      "args": ["-y", "@j0hanz/fetch-url-mcp@latest"]
    }
  }
}

更多信息请参阅 Cline MCP 文档。

在 Codex CLI 中安装

使用 CLI:

codex mcp add fetch-url-mcp -- npx -y @j0hanz/fetch-url-mcp@latest

或者将以下内容添加到 ~/.codex/config.toml 或项目级 .codex/config.toml:

[mcp_servers.fetch-url-mcp]
command = "npx"
args = ["-y", "@j0hanz/fetch-url-mcp@latest"]

更多信息请参阅 Codex MCP 文档。

在 GitHub Copilot 中安装

添加到 .vscode/mcp.json:

{
  "servers": {
    "fetch-url-mcp": {
      "type": "stdio",
      "command": "npx",
      "args": ["-y", "@j0hanz/fetch-url-mcp@latest"]
    }
  }
}

更多信息请参阅 GitHub Copilot MCP 文档。

在 Warp 中安装

在 Warp 中打开 Personal > MCP Servers,选择 + Add,然后使用以下内容添加 CLI 服务:

  • command:npx
  • args:["-y", "@j0hanz/fetch-url-mcp@latest"]

或者在使用 Warp 的多服务导入流程时粘贴以下 JSON 片段:

{
  "mcpServers": {
    "fetch-url-mcp": {
      "command": "npx",
      "args": ["-y", "@j0hanz/fetch-url-mcp@latest"]
    }
  }
}

更多信息请参阅 Warp MCP 文档。

在 Kiro 中安装

使用 Kiro 的 MCP Servers 面板或 Add to Kiro 安装流程。Kiro 将工作区级 MCP 配置保存在 .kiro/settings/mcp.json 中,将用户级配置保存在 ~/.kiro/settings/mcp.json 中。

此服务使用以下配置:

  • command:npx
  • args:["-y", "@j0hanz/fetch-url-mcp@latest"]

更多信息请参阅 Kiro MCP 文档。

在 Gemini CLI 中安装

添加到 ~/.gemini/settings.json:

{
  "mcpServers": {
    "fetch-url-mcp": {
      "command": "npx",
      "args": ["-y", "@j0hanz/fetch-url-mcp@latest"]
    }
  }
}

更多信息请参阅 Gemini CLI MCP 文档。

在 Zed 中安装

添加到 ~/.config/zed/settings.json:

{
  "context_servers": {
    "fetch-url-mcp": {
      "command": "npx",
      "args": ["-y", "@j0hanz/fetch-url-mcp@latest"],
      "env": {}
    }
  }
}

更多信息请参阅 Zed MCP 文档。

在 Augment 中安装

使用 Augment Settings 面板,手动添加服务或选择 Import from JSON:

{
  "mcpServers": {
    "fetch-url-mcp": {
      "command": "npx",
      "args": ["-y", "@j0hanz/fetch-url-mcp@latest"]
    }
  }
}

更多信息请参阅 Augment MCP 文档。

在 Roo Code 中安装

使用 Roo Code 的 MCP Servers 界面或市场流程。

此服务使用以下配置:

  • command:npx
  • args:["-y", "@j0hanz/fetch-url-mcp@latest"]

更多信息请参阅 Roo Code 文档。

在 Kilo Code 中安装

使用 Kilo Code 的 MCP Servers 界面或市场流程。

此服务使用以下配置:

  • command:npx
  • args:["-y", "@j0hanz/fetch-url-mcp@latest"]

更多信息请参阅 Kilo Code 文档。

使用场景

  • 面向大模型的文档 — 将文档页面、博客文章或参考资料获取为 Markdown,并直接传入上下文窗口。
  • 仓库内容 — 提供 GitHub、GitLab 或 Bitbucket URL,即可解析到原始内容端点。Gist 同样适用。
  • 加载缓慢或体积较大的页面 — 任务模式可在后台运行大型抓取任务,同时向客户端发送单调递增的进度更新;tasks/get 则会提供最新的任务摘要字段,例如 statusMessage、createdAt、lastUpdatedAt、ttl 和 pollInterval。

架构

[MCP Client]
  ├─ stdio -> `src/index.ts` -> `startStdioServer()` -> `createMcpServer()`
  └─ HTTP (`--http`) -> `src/index.ts` -> `startHttpServer()` -> HTTP dispatcher
       ├─ `GET /health`
       ├─ `GET /.well-known/oauth-protected-resource`
       ├─ `GET /.well-known/oauth-protected-resource/mcp`
       └─ `POST|GET|DELETE /mcp`

`createMcpServer()`
  ├─ registers tool: `fetch-url`
  ├─ registers prompt: `get-help`
  ├─ registers resources:
  │    - `internal://instructions`
  ├─ enables capabilities: logging, resources, prompts, tasks
  └─ installs task handlers, log-level handling, and shutdown cleanup

`fetch-url` execution
  ├─ validate input with `fetchUrlInputSchema`
  ├─ normalize URL and block local/private targets unless allowed
  ├─ rewrite supported code-host URLs to raw endpoints when possible
  ├─ fetch content via the shared pipeline
  ├─ transform HTML into Markdown in the transform worker path
  └─ validate `structuredContent` with `fetchUrlOutputSchema`
请求生命周期
[Client] -- initialize {protocolVersion, capabilities} --> [Server]
[Server] -- {protocolVersion, capabilities, serverInfo} --> [Client]
[Client] -- notifications/initialized --> [Server]
[Client] -- tools/call {name, arguments} --> [Server]
[Server] -- {content: [{type, text}], structuredContent?, isError?} --> [Client]

MCP 接口

工具
fetch-url

接受一个 URL 并返回 Markdown。只读,不执行 JavaScript。支持作为后台 MCP 任务运行,以处理较大或加载较慢的页面。在任务模式下,tasks/get 和 tasks/list 会提供任务摘要,其中包括 status、statusMessage、createdAt、lastUpdatedAt、ttl 和 pollInterval;数值进度仍通过 notifications/progress 单独发送。

参数类型必填描述
urlstring是目标 URL。最多 2048 个字符。

默认情况下,返回文本内容。如果输出验证通过,响应还会包含带类型字段的 structuredContent:url、resolvedUrl、finalUrl、title、metadata、markdown、fetchedAt、contentSize 和 truncated。truncated 的值为 true 表示内容已达到服务端大小限制。

若要启用进度更新,请在工具调用中加入 _meta.progressToken。该令牌可以是字符串或数字;在获取内容期间,服务端可能会发送单调递增的 notifications/progress 更新。

若要以任务模式运行该工具,请加入 params.task = { ttl?: <ms> }。tasks/result 会等待任务达到终止状态,然后返回已存储的输出,或针对已取消或失败任务返回终止错误负载。任务摘要和最终结果都包含 _meta["io.modelcontextprotocol/related-task"] = { "taskId": "<server-task-id>" }。

{
  "method": "tools/call",
  "params": {
    "name": "fetch-url",
    "arguments": {
      "url": "https://example.com/docs"
    },
    "task": {
      "ttl": 300000,
      "pollInterval": 1000
    },
    "_meta": {
      "progressToken": 7
    }
  }
}
1. [Client] -- tools/call {name: "fetch-url", arguments} --> [Server]
2. [Server] -- dispatch("fetch-url") --> [src/tools/fetch-url.ts]
3. [Handler] -- validate(fetchUrlInputSchema) --> normalize / fetch / transform
4. [Handler] -- validate(fetchUrlOutputSchema) --> assemble content + structuredContent
5. [Server] -- result or tool error --> [Client]
资源
资源URIMIME 类型描述
fetch-url-mcp-instructionsinternal://instructionstext/markdown使用 Fetch URL MCP 服务的指南。
提示词
提示词参数描述
get-helptopic?返回 Fetch URL 服务的说明:工作流、任务模式和错误处理。可选值:capabilities、workflows、constraints、errors。

MCP 功能

功能状态说明
completions已确认在 createServerCapabilities() 中声明。
logging已确认在 createServerCapabilities() 中声明。
resources已确认服务启动时注册静态指令资源。未声明订阅和列表变更支持。
prompts已确认服务启动时注册 get-help。
tasks已确认在 createServerCapabilities() 中声明,并由已注册的任务处理程序和可选的工具任务支持。
progress notifications已确认通过 _meta.progressToken 启用。工具执行会在抓取和转换阶段报告单调递增的 notifications/progress 更新。
task status updates已确认任务状态变更且 TASKS_STATUS_NOTIFICATIONS=true 时,会发出 notifications/tasks/status。
工具注释
注释值
readOnlyHinttrue
destructiveHintfalse
idempotentHinttrue
openWorldHinttrue
结构化输出

该工具声明了 outputSchema,并在验证通过时于响应中包含 structuredContent。支持结构化输出的客户端可直接获取类型化数据;其他客户端则使用文本回退内容。

配置

所有配置都通过环境变量完成。对于基本的 stdio 用法,无需设置任何内容。

HTTP 服务
变量默认值说明
HOST127.0.0.1绑定地址。绑定到非环回地址时,还必须设置 ALLOW_REMOTE=true。
PORT3000--http 的监听端口。
ALLOW_REMOTEfalse绑定到非环回接口时必须启用。
ALLOWED_HOSTSempty额外允许的 Host 和 Origin 值。
SERVER_MAX_CONNECTIONS0可选的连接数上限。
SERVER_TRUST_PROXYfalse信任 X-Forwarded-For / Forwarded,以解析客户端 IP。
SERVER_HEADERS_TIMEOUT_MSunset可选的 Node 服务调优项。
SERVER_REQUEST_TIMEOUT_MSunset可选的 Node 服务调优项。
SERVER_KEEP_ALIVE_TIMEOUT_MSunset可选的 keep-alive 调优项。
SERVER_KEEP_ALIVE_TIMEOUT_BUFFER_MSunset可选的 keep-alive 调优缓冲时间。
SERVER_MAX_HEADERS_COUNTunset可选的标头数量限制。
SERVER_BLOCK_PRIVATE_CONNECTIONSfalse未信任代理时,启用入站专用网络防护。
身份验证与 OAuth
变量默认值说明
ACCESS_TOKENS未设置以逗号或空格分隔的静态 Bearer 令牌。
API_KEY未设置用于标头身份验证的备用静态令牌来源。
OAUTH_ISSUER_URL未设置与其他 OAuth URL 一起设置时启用 OAuth 模式。
OAUTH_AUTHORIZATION_URL未设置可选的显式授权端点。
OAUTH_TOKEN_URL未设置可选的显式令牌端点。
OAUTH_REVOCATION_URL未设置可选的 OAuth 撤销端点。
OAUTH_REGISTRATION_URL未设置可选的 OAuth 动态客户端注册端点。
OAUTH_INTROSPECTION_URL未设置OAuth 令牌内省所必需。
OAUTH_REQUIRED_SCOPES空身份验证后强制要求的作用域。
OAUTH_CLIENT_ID未设置可选的内省客户端 ID。
OAUTH_CLIENT_SECRET未设置可选的内省客户端密钥。
TLS
变量默认值说明
SERVER_TLS_KEY_FILE未设置与 SERVER_TLS_CERT_FILE 一起设置时启用 HTTPS。
SERVER_TLS_CERT_FILE未设置TLS 证书路径。
SERVER_TLS_CA_FILE未设置可选的自定义 CA 证书包。
获取
变量默认值说明
ALLOW_LOCAL_FETCHfalse允许将环回地址和专用网络设为获取目标。
FETCH_TIMEOUT_MS15000网络获取超时时间,单位为毫秒。
USER_AGENTfetch-url-mcp/<version>覆盖出站 User-Agent 字符串。
工具输出
变量默认值说明
MAX_INLINE_CONTENT_CHARS00 表示不设置显式的内联内容截断限制。
任务
变量默认值说明
TASKS_MAX_TOTAL5000保留任务的总容量,包括过期前已完成或已取消的任务。
TASKS_MAX_PER_OWNER1000每个所有者保留任务的数量上限,最高不超过总上限。
TASKS_STATUS_NOTIFICATIONSfalse启用任务状态通知。
TASKS_REQUIRE_INTERCEPTIONtrue要求拦截支持任务的工具执行。
转换工作线程
变量默认值说明
TRANSFORM_CANCEL_ACK_TIMEOUT_MS200取消确认超时。
TRANSFORM_WORKER_MODEthreads工作线程执行模式。
TRANSFORM_WORKER_MAX_OLD_GENERATION_MBunset可选的工作线程内存限制。
TRANSFORM_WORKER_MAX_YOUNG_GENERATION_MBunset可选的工作线程内存限制。
TRANSFORM_WORKER_CODE_RANGE_MBunset可选的工作线程内存限制。
TRANSFORM_WORKER_STACK_MBunset可选的工作线程堆栈大小。
内容清理
变量默认值说明
FETCH_URL_MCP_EXTRA_NOISE_TOKENSempty额外的噪声移除词元。
FETCH_URL_MCP_EXTRA_NOISE_SELECTORSempty用于移除噪声的额外 DOM 选择器。
FETCH_URL_MCP_LOCALEsystem default用于提取启发式规则的区域设置覆盖值。
MARKDOWN_HEADING_KEYWORDSbuilt-in list覆盖清理时使用的标题关键词。
日志记录
变量默认值说明
LOG_LEVELinfodebug、info、warn 或 error。
LOG_FORMATtext设置为 json 以输出结构化日志。

HTTP 端点

方法路径身份验证用途
GET/health否,远程服务上使用 ?verbose=1 时除外基本运行状况响应,可选包含诊断信息。
GET/.well-known/oauth-protected-resource否OAuth 受保护资源元数据。
GET/.well-known/oauth-protected-resource/mcp否MCP 端点的 OAuth 受保护资源元数据。
POST/mcp是会话初始化和 JSON-RPC 请求。
GET/mcp是绑定会话的服务端到客户端流处理。
DELETE/mcp是会话关闭。

安全

控制项状态说明
主机和来源验证已实现HTTP 请求会被拒绝,除非 Host 和 Origin 与根据 loopback、配置的主机和 ALLOWED_HOSTS 构建的允许列表匹配。
身份验证已实现HTTP 模式支持本地静态 bearer token 或 OAuth token introspection;远程绑定需要 OAuth。
协议版本检查已实现与会话绑定的 MCP HTTP 请求会验证 MCP-Protocol-Version,并将其固定为协商后的会话版本。
速率限制已实现请求在路由分发前会经过 HTTP 速率限制器。在受信任的反向代理后启用 SERVER_TRUST_PROXY=true,以便限制针对转发的客户端 IP(而非代理节点)生效。
出站 SSRF 防护已实现本地/私有 IP、元数据端点以及 .local/.internal 主机会被阻止,除非设置了 ALLOW_LOCAL_FETCH=true。
TLS可选配置了 TLS 密钥和证书文件后,即会启用 HTTPS。
Stdio 日志安全已实现服务日志会写入 stderr,而非 stdout,以保持 stdio MCP 流量不受干扰。

开发

必备命令
命令说明
npm run build清理、编译 TypeScript、复制资源。
npm run dev以监视模式编译 TypeScript。
npm run dev:run使用 --watch 和 .env 支持运行服务。
npm start启动编译后的服务。
npm test运行完整测试套件。
npm run lint使用 ESLint 检查代码。
npm run lint:fix自动修复代码检查问题。
npm run type-check对源代码和测试进行类型检查。
npm run format使用 Prettier 格式化代码。
npm run inspector构建并启动 MCP Inspector。
所有 npm 脚本 | Script | Command | | ------------------------ | ------------------------------------------------------------------------------------------------------------------- | | `clean` | `node scripts/tasks.mjs clean` | | `build` | `node scripts/tasks.mjs build` | | `copy:assets` | `node scripts/tasks.mjs copy:assets` | | `prepare` | `npm run build` | | `dev` | `tsc --watch --preserveWatchOutput` | | `dev:run` | `node --env-file=.env --watch dist/index.js` | | `start` | `node dist/index.js` | | `format` | `prettier --write .` | | `type-check` | `node scripts/tasks.mjs type-check` | | `type-check:src` | `node node_modules/typescript/bin/tsc -p tsconfig.json --noEmit` | | `type-check:tests` | `node node_modules/typescript/bin/tsc -p tsconfig.test.json --noEmit` | | `type-check:diagnostics` | `tsc --noEmit --extendedDiagnostics` | | `type-check:trace` | `node -e "require('fs').rmSync('.ts-trace',{recursive:true,force:true})" && tsc --noEmit --generateTrace .ts-trace` | | `lint` | `eslint .` | | `lint:tests` | `eslint src/__tests__` | | `lint:fix` | `eslint . --fix` | | `test` | `node scripts/tasks.mjs test` | | `test:fast` | `node --test --import tsx/esm src/__tests__/**/*.test.ts node-tests/**/*.test.ts` | | `test:coverage` | `node scripts/tasks.mjs test --coverage` | | `knip` | `knip` | | `knip:fix` | `knip --fix` | | `inspector` | `npm run build && npx -y @modelcontextprotocol/inspector node dist/index.js --stdio` | | `prepublishOnly` | `npm run lint && npm run type-check && npm run build` |

构建与发布

  • npm run prepublishOnly 会运行 lint、类型检查和构建,作为发布的统一门禁。
  • CI 工作流位于 .github/workflows/。
  • 包含用于容器化运行的 Dockerfile 和 docker-compose.yml。
  • 已发布到 npm,包名为 @j0hanz/fetch-url-mcp。

故障排查

症状可能原因解决方法
服务器输出与 stdio 上的 MCP 通信混杂日志写入了 stdout确保所有日志都写入 stderr;服务器默认如此。
HTTP 模式返回 403主机/来源不匹配将域名添加到 ALLOWED_HOSTS,或检查环回绑定。
HTTP 模式下,代理发出的每个请求都触发速率限制未启用 SERVER_TRUST_PROXY当服务器位于受信任的反向代理之后时,启用 SERVER_TRUST_PROXY=true。
HTTP 模式返回 401缺少或无效的令牌设置 ACCESS_TOKENS,或为远程绑定配置 OAuth 环境变量。
Fetch 返回私有 IP 错误SSRF 防护拦截了目标如果目标有意设为本地地址,请设置 ALLOW_LOCAL_FETCH=true。
响应中出现 truncated: true内容超出内联限制增大 MAX_INLINE_CONTENT_CHARS,或接受截断的输出。
转换超时或工作线程崩溃HTML 过大或过于复杂调整 TRANSFORM_WORKER_MAX_OLD_GENERATION_MB,或增大 FETCH_TIMEOUT_MS。
客户端配置不生效客户端配置格式错误查看上方对应的 <details> 区块——不同客户端的配置键各不相同。

致谢

依赖项注册表
@modelcontextprotocol/servernpm
@modelcontextprotocol/nodenpm
@mozilla/readabilitynpm
linkedomnpm
node-html-markdownnpm
undicinpm
zodnpm

贡献与许可证

欢迎提交拉取请求。提交前请确保以下检查均已通过:

  1. npm run lint 和 npm run type-check
  2. npm test
  3. npm run format

许可证

MIT 许可证。详情请参阅 LICENSE。

评论

支持 Markdown

第一次接触 MCP?

从协议是什么,到在客户端里装上第一个服务,这几条回答覆盖了大多数入门问题。

一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。