ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

如何用 Fetch MCP Server 的 max_length 与 start_index 分段读取超长网页内容

如何用 Fetch MCP Server 的 max_length 与 start_index 分段读取超长网页内容 如何用 Fetch MCP Server 的 max_length 与 start_index 分段读取超长网页内容【免费下载链接】serversModel Context Protocol Servers项目地址: https://gitcode.com/GitHub_Trending/se/servers当模型通过 Fetch MCP Servermcp-server-fetch抓取网页时fetch工具一次最多返回max_length个字符默认 5000超出部分会被截断。对于正文很长的页面一次调用拿不到全部内容。项目文档给出的做法是利用start_index参数指定内容提取的起始位置让模型逐段chunks读取页面直到找到所需信息——这就是start_index字段在源码中的定位useful if a previous fetch was truncated and more context is required适用于上一次 fetch 被截断、需要更多上下文的情况。本文基于 src/fetch/README.md 与 src/fetch/src/mcp_server_fetch/server.py 的实际内容说明这两个参数的行为边界以及如何配置服务器并走通一次完整的分段读取流程。分段读取机制max_length 与 start_index 的取值规则在server.py的Fetch模型中两个参数的定义如下max_length整数可选本次返回的最大字符数默认 5000约束为gt0, lt1000000即取值范围是 1 到 999999start_index整数可选从哪个字符位置开始返回内容默认 0约束为ge0url字符串必填要抓取的 URLraw布尔可选默认 false即先把 HTML 转为 markdown置为 true 时返回未经简化的原始内容。服务器对这两个参数的处理逻辑见server.py中的call_tool函数可以归纳为三种情况正常截断返回content[start_index : start_index max_length]这一片内容。只有当本次恰好返回了max_length个字符、且后面仍有剩余内容时响应末尾才会追加续读提示errorContent truncated. Call the fetch tool with a start_index of {next_start} to get more content./error其中{next_start}就是start_index 本次实际返回长度可直接作为下一次调用的start_index值。没有更多内容如果start_index已经大于或等于整篇内容的长度或切出的片段为空返回内容会变为errorNo more content available./error——这就是分段读取到末尾的信号。内容不足一页返回长度小于max_length且无剩余内容时不会有任何截断提示说明一次调用已经读完整个页面。需要留意一点start_index计数的是实际返回内容的位置而默认情况下返回的是经 readabilipy 简化、markdownify 转换后的 markdown不是原始 HTML。因此手动推算索引时应以上一次响应给出的next_start为准不要自己按原始网页长度估算。准备与启动服务器README 给出了三种启动方式任选其一即可。注意可选地安装 Node.js 后服务器会使用更健壮的另一种 HTML simplifier原文如此不安装也能运行。方式一uvxREADME 推荐无需单独安装直接运行{ mcpServers: { fetch: { command: uvx, args: [mcp-server-fetch] } } }方式二pip 安装先安装再作为脚本运行pip install mcp-server-fetchpython -m mcp_server_fetch对应的 Claude 配置{ mcpServers: { fetch: { command: python, args: [-m, mcp_server_fetch] } } }方式三Docker{ mcpServers: { fetch: { command: docker, args: [run, -i, --rm, mcp/fetch] } } }VS Code 用户可把上述 JSON 加到 User Settings (JSON)Ctrl Shift P→Preferences: Open User Settings (JSON)或写入工作区的.vscode/mcp.json该文件需要外层mcp键。Windows 特别注意README 指出 Windows 上如遇超时问题需在配置中加环境变量以解决字符编码导致的超时{ mcpServers: { fetch: { command: uvx, args: [mcp-server-fetch], env: { PYTHONIOENCODING: utf-8 } } } }启动后可以先用 README Debugging 一节给出的 MCP inspector 确认服务器正常、并直接调用工具npx modelcontextprotocol/inspector uvx mcp-server-fetch如果是 pip 安装或本地开发目录则为cd path/to/servers/src/fetch后执行npx modelcontextprotocol/inspector uv run mcp-server-fetch。执行一次分段读取以下工具调用示例中的URL均为需要替换的占位符替换为你要抓取的具体页面地址。工具名与参数名不能改只改url、max_length、start_index的取值。第一步默认抓取确认页面是否会被截断。第一次调用可以不传可选参数{ name: fetch, arguments: { url: URL } }响应格式为Contents of {url}:加上正文内容。根据第一步的返回判断下一步正文后跟着Content truncated. Call the fetch tool with a start_index of N to get more content.——页面没读完记下提示中的N出现errorNo more content available./error——没有更多内容什么都没有——一次就读完了。第二步按需设置 max_length。默认 5000 字符对多数页面可能不够可以显式指定更大的上限必须小于 1000000{ name: fetch, arguments: { url: URL, max_length: 20000 } }第三步用提示中的 next_start 继续下一段。例如第一次调用返回了 5000 字符并提示start_index of 5000则继续{ name: fetch, arguments: { url: URL, max_length: 20000, start_index: 5000 } }如此循环每次使用上一次响应给出的next_start作为新的start_index直到读到目标信息或收到No more content available.。文档对这一模式的描述是This lets models read a webpage in chunks, until they find the information they need.可选分支读取原始内容。如果页面需要绕过 markdown 简化raw: true注意此时跳过 HTML→markdown 转换start_index计数的是原始响应文本两套索引不能混用。此外对于无法简化为 markdown 的内容类型非 HTML服务器会返回前缀Content type {content-type} cannot be simplified to markdown, but here is the raw content:再附原始内容。验证与排查判断分段读取是否按预期工作依据的是响应中的固定信号而不是猜测响应现象含义均来自源码实际分支末尾有Content truncated... start_index of N还有剩余内容下次调用传start_index: NerrorNo more content available./errorstart_index已越过内容末尾分段到此结束有内容但无截断提示页面已一次性读完其他相关行为参数校验失败如max_length超出 1~999999 范围会返回INVALID_PARAMS错误抓取状态码 ≥400 时返回Failed to fetch {url} - status code {status}通过工具发起的请求默认遵守目标站 robots.txt。若响应提示 The sites robots.txt ... specifies that autonomous fetching of this page is not allowed说明该页面禁止模型自主抓取README 给出的出路是用fetchprompt用户手动发起重试也可以在配置args中加--ignore-robots-txt禁用该检查。使用限制README 顶部有一条明确警告该服务器可以访问本地/内网 IP 地址可能构成安全风险使用前需确认不会暴露敏感数据。另外服务器对 HTTP 请求设置了 30 秒超时见fetch_url中的timeout30超时或连接失败会以Failed to fetch {url}形式报错。start_index与max_length的分段机制只作用于字符位置不会跨 URL 拼接内容分段只能针对同一次抓取所基于的同一页面文本进行。【免费下载链接】serversModel Context Protocol Servers项目地址: https://gitcode.com/GitHub_Trending/se/servers创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进