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
Scan to join WeChat group