mcpField
D
Docs Fetch MCP Server

Docs Fetch MCP Server

本地服务
github.com/wolfyy970记忆与知识717 周前更新

关于 Docs Fetch MCP Server

Docs Fetch MCP Server 是用于抓取文档网页并递归浏览链接的 MCP 服务,适合需要向 Agent 提供网页文档内容的场景。它将页面提取为 Markdown,并支持受范围和数量限制的爬取。

主要功能

  1. 01抓取网页并提取 Markdown
  2. 02按深度递归爬取链接
  3. 03限制页面范围与并发数
  4. 04可选 Puppeteer 渲染
  5. 05返回结构化结果及错误信息

适用场景

  1. 01为 Agent 获取文档页面内容
  2. 02按路径范围浏览文档站点
  3. 03处理依赖客户端渲染的页面

MCP 相关

作为 MCP 服务,提供 `fetch_doc_content` 工具,用于抓取单个 URL,并可选递归爬取链接页面。

配置

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

暂未收录安装方式

我们还没有获取到这个服务的安装包或远程地址,请按项目 README 中的说明安装。

代码仓库

工具

还没有获取到工具列表

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

详细介绍

Docs Fetch MCP Server

一个基于 Bun 的 Model Context Protocol(MCP)服务,用于获取文档页面并进行有界文档爬取。

该服务提供一个 MCP 工具 fetch_doc_content。它会获取根 URL,提取易读的 Markdown,对链接进行排序,并可在明确的深度、页面数量、超时和范围限制内爬取关联页面。结果以结构化 JSON 返回,包含爬取元数据、页面内容、排序后的链接、截断标记和各页面的错误。

功能

  • 使用 axios 实现快速静态获取
  • 可选使用 Puppeteer 渲染客户端渲染或内容较少的页面
  • 提取包含标题、列表、代码块、表格、引用块和链接的 Markdown
  • 真实的爬取深度语义:
    • depth: 1 仅返回根页面
    • depth: 2 包含直接子链接
    • depth: 3 包含孙辈页面,最大值为 5
  • 去重前规范化 URL:移除片段、跟踪参数、默认端口和尾部斜杠重复项
  • 按同源和可选的 pathPrefix 限定爬取范围
  • 限定 maxPages、maxConcurrency、全局超时、单页超时和单页内容截断
  • 返回包含明确单页失败信息的部分结果
  • 运行时参数验证与公布的工具架构共用

要求

  • Bun >=1.3.0
  • 当 render 为 auto 或 always 时,需要安装 Puppeteer 浏览器

本项目使用 Bun 进行依赖管理、运行时执行、构建和测试。

安装

bun install
bun run build

配置 MCP 客户端:

{
  "mcpServers": {
    "docs-fetch": {
      "command": "bun",
      "args": ["/path/to/docs-fetch-mcp/build/index.js"]
    }
  }
}

无需构建即可进行本地开发:

{
  "mcpServers": {
    "docs-fetch": {
      "command": "bun",
      "args": ["/path/to/docs-fetch-mcp/src/index.ts"]
    }
  }
}

工具

fetch_doc_content

获取一个 URL,并可选择爬取其关联页面。

参数:

名称类型默认值限制说明
urlstring必填仅限 HTTP/HTTPS要获取的根 URL。
depthnumber11 到 5与根页面的链接距离。
maxPagesnumber101 到 50整次爬取最多返回的页面数。
maxConcurrencynumber31 到 8同时获取的最大页面数。
timeoutMsnumber450005000 到 120000全局爬取超时时间。
perPageTimeoutMsnumber100001000 到 60000单页获取超时时间。
renderstringautoauto、always、never浏览器渲染策略。
sameOriginbooleantrue不适用将爬取的链接限制为同源。
pathPrefixstring省略不适用可选的路径前缀爬取范围,例如 /docs。
contentLimitnumber120001000 到 50000截断前每页的 Markdown 字符数。
includeLinksbooleantrue不适用在返回的页面对象中包含排序后的链接。

请求示例:

{
  "url": "https://example.com/docs",
  "depth": 2,
  "maxPages": 8,
  "pathPrefix": "/docs",
  "render": "auto"
}

响应结构:

{
  "rootUrl": "https://example.com/docs",
  "normalizedRootUrl": "https://example.com/docs",
  "explorationDepth": 2,
  "maxPages": 8,
  "pagesExplored": 3,
  "pagesFailed": 1,
  "timedOut": false,
  "durationMs": 1234,
  "crawl": {
    "sameOrigin": true,
    "pathPrefix": "/docs",
    "maxConcurrency": 3,
    "render": "auto",
    "perPageTimeoutMs": 10000
  },
  "content": [
    {
      "url": "https://example.com/docs",
      "finalUrl": "https://example.com/docs",
      "depth": 0,
      "status": 200,
      "title": "Documentation",
      "description": "Example documentation",
      "canonicalUrl": "https://example.com/docs",
      "headings": ["Documentation"],
      "content": "# Documentation\n\n...",
      "contentLength": 2400,
      "truncated": false,
      "fetchedWith": "http",
      "links": [
        {
          "url": "https://example.com/docs/api",
          "text": "API reference",
          "score": 18.5,
          "internal": true
        }
      ]
    }
  ],
  "errors": [
    {
      "url": "https://example.com/docs/missing",
      "depth": 1,
      "error": "Request failed with status code 404",
      "status": 404
    }
  ]
}

爬取行为

  • 爬取采用广度优先方式。
  • URL 在去重和加入队列前会先进行规范化。
  • sameOrigin: true 会拒绝来源与规范化根 URL 不同的链接。
  • pathPrefix 会进一步将链接限制在根来源的指定路径前缀内。
  • includeLinks: false 会隐藏返回页面对象中的链接,但不会禁用用于爬取的链接发现。
  • render: "never" 仅使用 HTTP 获取方式。
  • render: "always" 对每个获取的页面都使用 Puppeteer。
  • render: "auto" 会先尝试 HTTP;当 HTTP 失败或提取的内容非常少时,再使用 Puppeteer。
  • 浏览器回退目前会保留渲染后的响应状态,并提取页面正文,即使页面状态码不是 2xx。

架构

src/index.ts                         CLI entrypoint
src/server.ts                        MCP server wiring and tool registration
src/config/tool-options.ts           Shared tool schema/default/range metadata
src/tool/fetch-doc-content-args.ts   Runtime argument validation
src/crawler/docs-crawler.ts          Crawl orchestration and queue management
src/crawler/page-fetcher.ts          HTTP fetch, browser fallback, extraction coordination
src/browser/browser-manager.ts       Reusable Puppeteer browser/page handling
src/content/content-extractor.ts     Page metadata/content extraction facade
src/content/main-content-selector.ts Main content selection
src/content/link-extractor.ts        Link normalization, dedupe, and ranking
src/content/markdown-renderer.ts     HTML-to-Markdown rendering
src/content/text-cleanup.ts          Shared text normalization helpers
src/utils/url.ts                     URL normalization and scope utilities
src/types/index.ts                   Shared TypeScript types

MCP 架构和运行时选项规范化共用 src/config/tool-options.ts 中的元数据源。添加新选项时,先在此处定义,再通过验证和爬虫选项接入相应行为。

开发

bun install
bun run dev
bun run test
bun run typecheck
bun run build

脚本:

  • bun run dev:从 TypeScript 源代码运行 MCP 服务。
  • bun run test:运行 src 下的 Bun 测试。
  • bun run typecheck:使用 --noEmit 运行 TypeScript。
  • bun run build:生成带有 Bun shebang 的 build/index.js。
  • bun run start:运行构建后的 MCP 服务。

测试

测试与其覆盖的模块放在一起:

  • src/crawler/docs-crawler.test.ts:爬取深度、范围限定、故障和链接可见性。
  • src/crawler/page-fetcher.test.ts:抓取/渲染回退特征。
  • src/content/content-extractor.test.ts:Markdown 提取和截断。
  • src/tool/fetch-doc-content-args.test.ts:边界验证以及架构/默认值同步。
  • src/utils/url.test.ts:URL 规范化和范围辅助函数。

更改行为时,请先添加或更新特征测试。进行重构时,确保 bun run test、bun run typecheck 和 bun run build 均通过。

注意事项

  • 对于快速的静态文档爬取和测试,请使用 render: "never"。
  • 对于与营销页面、博客或应用共享域名的文档站点,请使用 pathPrefix。
  • 仅当调用方使用 render: "never" 时,才可以跳过 Puppeteer 浏览器安装。
  • 自定义 Markdown 渲染器有意通过特征测试进行覆盖;除非明确更改行为,否则请保持输出兼容性。

许可证

MIT

评论

支持 Markdown

第一次接触 MCP?

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

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