Back to MCP directory
publicPublicdnsLocal runtime

mcp-fetch-node

一个基于Node.js的MCP服务器,提供网页内容抓取和转换功能,支持将HTML转为Markdown,适用于LLM处理网页内容。

article

README

🚀 Fetch MCP 服务器(Node.js 版)

这是一个基于 Node.js 的服务器项目,它是官方 Fetch MCP Server 的 Node.js 端口。该服务器基于模型上下文协议,能让大语言模型(LLM)从网页抓取内容并转换为 Markdown 格式,方便使用。

🚀 快速开始

mcp-fetch-node 在默认端口 8080 上提供 SSE 接口,默认情况下在路径 /sse 下可用。你可以通过以下方式启动项目:

Node.js 启动

npx -y mcp-fetch-node

Docker 启动

docker run -it tgambet/mcp-fetch-node

✨ 主要特性

  • 网络内容抓取:提供网络内容抓取功能,使 LLM 能够从网页中抓取并处理内容。
  • Markdown 转换:将 HTML 转换为 Markdown 格式,便于更轻松地使用。
  • 分页提取:Fetch 工具可截断响应,通过 start_index 参数指定内容提取的起始位置,使模型能按块读取网页。
  • 尊重 robots.txt:默认遵守来自模型请求的网站 robots.txt 文件,可通过参数禁用。
  • 用户代理自定义:可根据请求来源使用不同用户代理,也可通过参数自定义。
  • SSE 接口:提供 SSE 接口,适合作为网络服务部署,提高灵活性。
  • 通用内容提取:不依赖 Readability.js 库,使用通用自定义实现处理各类网站。

📦 安装指南

开发环境安装

pnpm install

开发环境启动

pnpm dev

代码检查与格式化

pnpm lint:fix
pnpm format

测试与构建

pnpm test
pnpm build

生产环境启动

pnpm start

代码检查

pnpm inspect

💻 使用示例

可用工具

  • fetch - 抓取互联网上的 URL 并将其内容提取为 Markdown 格式。 | 参数 | 详情 | |------|------| | url | 字符串,必需,要抓取的 URL | | max_length | 整数,可选,返回的最大字符数(默认值:5000) | | start_index | 整数,可选,从该字符索引开始提取内容(默认值:0) | | raw | 布尔值,可选,获取未转换为 Markdown 格式的内容(默认值:false) |

可用提示

  • fetch - 抓取一个 URL 并将其内容提取为 Markdown 格式 | 参数 | 详情 | |------|------| | url | 字符串,必需,要抓取的 URL |

自定义配置

robots.txt 配置

默认情况下,服务器会遵守来自模型(通过工具)的请求的网站 robots.txt 文件,但对于用户发起的请求(通过提示),则不会遵守。可以通过在运行命令时添加 --ignore-robots-txt 参数来禁用此功能。

用户代理配置

默认情况下,根据请求是来自模型(通过工具)还是用户发起的(通过提示),服务器会使用不同的用户代理:

# 工具调用
ModelContextProtocol/1.0 (Autonomous; +https://github.com/tgambet/mcp-fetch-node)

# 提示
ModelContextProtocol/1.0 (User-Specified; +https://github.com/tgambet/mcp-fetch-node)

可以通过在运行命令时添加 --user-agent=YourUserAgent 参数来自定义用户代理,从而覆盖上述默认值。

📚 详细文档

关键与原项目的差异

  • 语言与运行环境:该项目用 TypeScript 编写,并针对 Node.js 运行时环境进行了优化,适用于无法使用 Python 的情况。
  • 接口类型:该项目提供 SSE 接口,而不是 stdio,更适合作为网络服务进行部署,提高了灵活性。
  • 内容提取实现:该项目不依赖于 Readability.js 库来执行内容提取,使用了一个更通用的自定义实现,适合处理新闻相关以外的网站。

尽管 API 和工具描述与原项目相同,但你可以尝试将 mcp-fetch-node 作为原项目的掉换件替代品进行测试。请报告任何问题到 问题跟踪器

🔧 技术细节

  • 该项目使用 TypeScript 编写,针对 Node.js 运行时环境进行了优化,使得它可以在无法使用 Python 的场景中使用。
  • 提供 SSE 接口而非 stdio,这种方式更适合作为网络服务进行部署,增强了项目的灵活性。
  • 在内容提取方面,没有依赖 Readability.js 库,而是采用了一个更通用的自定义实现,能够处理新闻相关以外的各类网站。

📄 许可证

本项目采用 MIT 许可证。

TODO

  • [ ] 添加用户日志和进度指示
  • [ ] 添加文档和示例
  • [ ] 性能基准测试和改进
  • [ ] 提取质量的基准测试:参考 https://github.com/adbar/trafilatura/blob/master/tests/comparison_small.py
help

Runtime guide

cloud

Hosted runtime

Hosted servers run from a provider-managed environment. You usually connect the MCP client to the hosted endpoint or follow the provider's authorization flow, without keeping a local process alive

  1. Open provider connection page
  2. Authorize or copy endpoint
  3. Connect from your MCP client
terminal

Local runtime / other methods

Local servers run on your own machine or infrastructure. You normally copy the server_config into your MCP client, install the required package, and provide env variables from env_schema when needed

  1. Copy server_config
  2. Install required package
  3. Fill env variables and restart client