fetch-mcp开发指南:从源码解析到自定义功能扩展

发布时间:2026/10/9 2:08:45

fetch-mcp开发指南:从源码解析到自定义功能扩展 fetch-mcp开发指南从源码解析到自定义功能扩展【免费下载链接】fetch-mcpA flexible HTTP fetching Model Context Protocol server.项目地址: https://gitcode.com/gh_mirrors/fe/fetch-mcpfetch-mcp是一个灵活的HTTP抓取模型上下文协议MCP服务器能够将网页内容转换为HTML、Markdown、纯文本、JSON或YouTube转录文本。本文将带您从源码解析到自定义功能扩展全面掌握这个强大工具的开发技巧。项目概述fetch-mcp核心功能解析fetch-mcp作为MCP服务器和CLI工具主要解决网页内容抓取与格式转换的需求。从package.json可以看到项目使用TypeScript开发依赖了modelcontextprotocol/sdk作为MCP协议基础同时集成了jsdom、mozilla/readability和turndown等工具处理网页内容解析与格式转换。fetch-mcp项目logo展示了霓虹风格的FETCHMCP文字与电路板图案体现其技术属性主要技术栈核心语言TypeScript运行环境Node.js (18)构建工具Bun主要依赖modelcontextprotocol/sdkMCP协议支持jsdomDOM解析mozilla/readability文章内容提取turndownHTML转Markdownzod类型验证快速开始环境搭建与基础使用一键安装步骤首先克隆项目仓库git clone https://gitcode.com/gh_mirrors/fe/fetch-mcp cd fetch-mcp使用Bun安装依赖bun install构建项目bun run build基础命令示例fetch-mcp提供了直观的CLI工具支持多种内容抓取命令。以下是几个常用示例获取网页HTMLmcp-fetch html https://example.com转换网页为Markdownmcp-fetch markdown https://example.com --max-length 5000提取YouTube视频转录文本mcp-fetch youtube https://www.youtube.com/watch?vexample --lang en完整的命令说明可通过mcp-fetch --help查看或参考src/cli.ts源码。源码解析核心模块与工作原理Fetcher类内容抓取的核心实现src/Fetcher.ts是项目的核心模块实现了各种内容类型的抓取与转换功能。该类包含多个静态方法对应不同的内容处理策略html()获取原始HTML内容markdown()将HTML转换为Markdownreadable()使用Readability提取文章核心内容txt()提取纯文本内容json()处理JSON响应youtubeTranscript()获取YouTube视频转录文本Fetcher类实现了完善的安全机制包括验证URL协议、检查私有IP地址防止SSRF攻击等安全措施。例如validateUrl()方法确保只允许HTTP和HTTPS协议private static validateUrl(url: string): void { const parsedUrl new URL(url); if (parsedUrl.protocol ! http: parsedUrl.protocol ! https:) { throw new Error( Fetcher blocked URL with disallowed protocol ${parsedUrl.protocol}. Only HTTP and HTTPS are allowed., ); } // 私有IP检查逻辑... }CLI模块命令行交互实现src/cli.ts实现了命令行交互功能解析用户输入的命令和参数并调用Fetcher类的相应方法。CLI支持的命令包括html、markdown、readable、txt、json和youtube每个命令都有特定的参数选项。命令解析流程主要在parseArgs()函数中实现它负责验证命令合法性、解析URL和各种标志参数并返回结构化的参数对象。自定义功能扩展从零开始开发新特性扩展Fetcher类添加新的内容处理方法要添加新的内容处理功能最直接的方式是扩展Fetcher类。例如我们可以添加一个pdf()方法来支持PDF内容提取static async pdf(requestPayload: RequestPayload) { try { const response await this._fetch(requestPayload); // PDF处理逻辑... return { content: [{ type: text, text: pdfText }], isError: false }; } catch (error) { return { content: [{ type: text, text: error instanceof Error ? error.message : String(error) }], isError: true, }; } }扩展CLI添加新命令添加新命令需要修改src/cli.ts文件主要包括以下步骤在SUBCOMMANDS数组中添加新命令名称在fetchers对象中添加命令与Fetcher方法的映射添加新命令所需的参数解析逻辑例如添加pdf命令// 在SUBCOMMANDS中添加 const SUBCOMMANDS [html, markdown, readable, txt, json, youtube, pdf] as const; // 在fetchers对象中添加 const fetchers: Recordstring, (p: any) Promiseany { // ...现有命令 pdf: Fetcher.pdf.bind(Fetcher), };类型定义扩展如果添加了新的参数或返回类型需要更新src/types.ts文件中的类型定义确保类型安全。测试与调试确保代码质量fetch-mcp项目使用Bun的测试框架进行测试测试文件以.test.ts结尾如Fetcher.test.ts和YouTubeTranscript.test.ts。运行测试bun test添加新测试为新功能添加测试时可以创建新的测试文件或在现有测试文件中添加测试用例。例如为新的pdf功能添加测试test(Fetcher.pdf returns pdf text content, async () { const result await Fetcher.pdf({ url: https://example.com/test.pdf }); expect(result.isError).toBe(false); expect(result.content[0].type).toBe(text); // 更多断言... });部署与发布分享你的扩展构建项目bun run build本地测试./dist/cli.js 新命令 测试URL发布到npm维护者bun run publish:npm常见问题与解决方案问题YouTube转录文本获取失败解决方案确保已安装yt-dlp工具fetch-mcp会优先使用yt-dlp获取转录文本若未安装则尝试直接获取。安装方法# Ubuntu/Debian sudo apt install yt-dlp # macOS brew install yt-dlp问题处理大型网页时内存溢出解决方案使用--max-length参数限制返回内容大小或修改src/types.ts中的maxResponseBytes常量调整默认限制。总结fetch-mcp开发的最佳实践通过本文的介绍您已经了解了fetch-mcp的核心功能、源码结构和扩展方法。在开发自定义功能时建议遵循以下最佳实践保持类型安全利用TypeScript的类型系统为新功能添加完善的类型定义实现错误处理遵循现有代码的错误处理模式确保错误信息清晰添加测试用例为新功能编写测试保证代码质量更新文档修改README.md添加新功能的使用说明fetch-mcp作为一个灵活的内容抓取工具其模块化设计使得扩展功能变得简单直观。无论是添加新的内容格式支持还是优化现有功能都可以通过本文介绍的方法实现。希望这篇指南能帮助您更好地理解和使用fetch-mcp【免费下载链接】fetch-mcpA flexible HTTP fetching Model Context Protocol server.项目地址: https://gitcode.com/gh_mirrors/fe/fetch-mcp创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
延伸阅读

更多相关文章

2026/10/7 2:59:02

5分钟上手Asmble:WebAssembly转JVM字节码的快速入门教程

5分钟上手Asmble:WebAssembly转JVM字节码的快速入门教程 【免费下载链接】asmble Compile WebAssembly to JVM and other WASM tools 项目地址: https://gitcode.com/gh_mirrors/as/asmble Asmble是一款强大的WebAssembly编译器,能将WebAssembly代…

2026/10/9 2:04:36

模板消息错误消息优化:从错误码规范到链路追踪的工程实践

做了快十年的模板消息平台,我最大的体会是:模板这玩意儿,看着简单,真出起问题来能把人逼疯。尤其是错误消息——用户那边只收到一句"发送失败",后台日志里躺着一串又臭又长的堆栈,模板ID、参数名…

2026/10/9 2:04:36

智慧校园一卡通系统落地实践:从方案设计到故障排查全解析

干了快十五年校园信息化,经手过三套完整的一卡通项目,每次看着食堂门口学生同时掏卡、亮码、刷脸,我都觉得这才是智慧校园该有的烟火气。智慧校园一卡通系统这个概念被喊了近二十年,市面上的厂商少说也有上百家,但真正…

2026/10/9 2:04:36

远程炼丹教程:用TaoToken统一Key打通AutoDL GPU与opencode工作流

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/9 1:59:35

从一机一密到ACL:EMQX+Spring Boot构建物联网设备接入双重安全防线

说实话,第一次亲眼看到别人用我平台上另一台设备的连接参数,伪造了一整条温度变化曲线打到我后台时,我后背是发凉的。数据告警、联动逻辑、历史存储全部被误导,最可怕的是平台侧看起来一切正常:设备在线、数据频率稳定…

2026/10/8 10:03:18

Jev+Agent接管浏览器:browser-use实战与jev-ultrafast性能优化

1. 从“Jev”说起:为什么我要把Agent接进浏览器“Jev”这个词最近在圈子里出现的频率越来越高,很多人第一次听到会以为是某个新模型的名字,其实它更像是一种思路——把Jev模型的能力当作底座,通过Agent的方式去接管浏览器&#xf…

2026/10/8 10:03:20

多智能体集群实战:DeepAgents编排、MCP与A2A协议及Skills体系

1. 从"单兵作战"到"集群协同":多智能体编排到底在解决什么问题如果你最近在折腾 Agent 相关的东西,大概率会有一种感觉:单个 Agent 能做的事情,其实很快就摸到天花板了。你给它一个提示词,挂几个工…

2026/10/8 6:05:44

无源低通滤波器设计实战:从RC到LC,手把手教你避开那些坑

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/9 0:04:27

毕业论文初稿完成后首次进行AIGC疑似度自查的摸底与分流策略

毕业论文初稿完成后首次进行AIGC疑似度自查的摸底与分流策略当数万字的学位论文初稿经历开题、实验、问卷与多轮文献梳理最终成形时,绝大多数研究生都会面临一道全新的形式审查关卡:AIGC 疑似度排查。在高校毕业审核流程中,盲审前的文本检测通…

2026/10/9 0:04:27

食堂节能改造源头工厂,商用厨房设备焕新方案广受好评

商用厨房作为餐饮经营、单位供餐的核心后勤阵地,其设备配置、动线规划与运维体系直接决定后厨作业效率、运营成本与合规性。从基础的灶具、制冷存储设备,到油烟净化、水处理等配套系统,每一个环节的合理性都与食品安全、能耗管控、消防安全挂…

还想了解更多?直接咨询顾问

免费诊断 + 免费方案 + 透明报价。

全国咨询热线400-8866-253
免费获取方案
☎咨询二维码 ☎ ↑