首页 / 文章 / 我把一个仅限Claude Code使用的网页阅读器变成了一个普通的MCP服务器
← 返回
AI技术

我把一个仅限Claude Code使用的网页阅读器变成了一个普通的MCP服务器

✍️ zhirenhun 📅 2026/7/11 👁 10 阅读 ⏱ 12 分钟
我把一个仅限Claude Code使用的网页阅读器变成了一个普通的MCP服务器

我把一个仅限Claude Code使用的网页阅读器变成了一个普通的MCP服务器

我在用智能体构建应用时反复遇到同一个问题:

页面是公开的,浏览器能正常读取,但我的智能体却会被拦截、重定向、限流,或者只拿到一个空壳 HTML,毫无有用内容。

这个领域已经有一个有趣的项目:insane-search。它设计巧妙、手段积极、也很实用,但原始工作流是围绕 Claude Code 设计的。

我希望将同样的公开网页韧性能力做成一个标准的 MCP 服务器,这样任何兼容 MCP 的客户端都能调用它。

于是就有了 unlimited-search。

unlimited-search

unlimited-search 是一个 Python 命令行工具和 MCP 服务器,用于在普通直接抓取不够用时读取公开网页内容。它整合了平台公开路由、浏览器级 HTTP 身份、内容回退、公开存档回退以及媒体元数据提取,全部封装在一个本地工具中。

它专为需要从公开 URL 获取可用文本的智能体和自动化任务而设计。它不用于绕过登录、付费墙、验证码、私有网络、账户限制、IP 封禁或访问控制。


快速开始

前置条件:Python 3.12 或更新版本。

python -m pip install unlimited-search
unlimited-search read https://en.wikipedia.org/wiki/OpenAI --max-content-chars 800

该命令返回包含页面内容、判定结果、请求元数据和尝试追踪的 JSON。

对于 MCP 客户端,安装该包并注册 stdio 服务器:

{
  mcpServers: {
    unlimited-search: {
      command: unlimited-search,
      args: [serve]
    }
  }
}

概览

unlimited-search 是一个 Python 命令行工具和 MCP 服务器,通过多种公开路由和回退机制读取公开网页内容。

它可以:

  • 读取单个公开 URL
  • 在一次 MCP 调用中读取多个公开 URL
  • 诊断页面难以访问的原因
  • 使用 yt-dlp 提取公开媒体元数据
  • 通过公开平台路由、浏览器级 HTTP 抓取、公开存档、订阅源和元数据提取进行回退

它不尝试绕过登录、付费墙、验证码、私有网络、账户限制或真正的访问控制。


安装

python -m pip install unlimited-search

然后将其添加到你的 MCP 客户端:

{
  mcpServers: {
    unlimited-search: {
      command: unlimited-search,
      args: [serve]
    }
  }
}

重启你的 MCP 客户端,你应该会获得以下工具:

  • read_public_url
  • read_public_urls
  • diagnose_access
  • extract_media

快速测试

你也可以直接从终端使用它:

unlimited-search read https://example.com --max-content-chars 1000
unlimited-search diagnose https://example.com

输出为 JSON,包含恢复的内容、最终 URL、判定结果、元数据和尝试追踪。


为什么构建它

大多数智能体擅长在文本进入上下文后对其进行推理。

麻烦的部分在于获取文本。

现代公开网站并不一致:

  • 有些提供有用的公开 API
  • 有些几乎完全在客户端渲染
  • 有些暴露 RSS 或 Atom 订阅源
  • 有些包含 Open Graph 或 JSON-LD 元数据但 HTML 内容单薄
  • 有些只有使用浏览器级 TLS 身份才能正常工作
  • 有些通过公开存档快照更容易读取
  • 有些媒体页面更适合作为元数据处理,而非原始 HTML

因此,unlimited-search 不假设每个 URL 都一样,而是采用分层策略。


工作原理

对于给定的 URL,读取器首先尝试侵入性最小的公开路由:

  • 针对 Reddit、X/Twitter、YouTube 元数据、Bluesky、Mastodon、Hacker News、Stack Overflow、Wikipedia、GitHub、npm、PyPI、Naver Blog、Google Scholar、Amazon 等网站的平台特定公开路由。
  • 使用多种身份、URL 变体、引用策略和 HTTP 传输回退的浏览器级 HTTP 抓取。
  • 内容回退,如 Jina Reader JSON、RSS/Atom 发现、常见订阅源路径、OGP、JSON-LD、Schema.org 和 Next.js 元数据。
  • 通过 Wayback 和 archive.today/archive.ph 尽力而为快照的公开存档回退。
  • 通过 yt-dlp 对公开媒体 URL 进行媒体元数据提取。

每个结果都包含一个判定结果:

  • strong_ok:高置信度的公开路由成功
  • weak_ok:内容已恢复,但可能不完整或基于回退
  • suspect_ok:找到了有用内容,但调用方应检查其可靠性
  • 针对被拦截、不安全、仅登录、验证码、私有网络或不可用结果的失败判定

示例 MCP 调用

向你的 MCP 客户端发出类似请求:

使用 unlimited-search 读取这个公开 URL 并总结页面内容:
https://example.com

在后台,模型可以调用:

{
  url: https://example.com,
  max_content_chars: 4000
}

并返回内容及追踪信息,而不是静默失败。


它与普通抓取有何不同?

普通抓取问的是:

我能 GET 这个 URL 吗?

unlimited-search 问的是:

是否存在一条合法的公开路由,能从这个 URL 获取有用的文本?

这种区别对智能体工作流至关重要。

如果直接 HTML 抓取失败,该工具可以尝试公开 API。如果页面元数据丰富但内容稀少,它可以提取元数据。如果实时页面不稳定,它可以尝试公开存档路由。如果页面是媒体内容,它可以返回结构化的媒体元数据,而不是倾倒一个巨大的 HTML 空壳。

目标不是追求神奇,而是追求实用。


安全边界

这一点很重要:unlimited-search 是一个公开内容读取器。

当目标需要以下条件时,它会停止:

  • 身份验证
  • 付费
  • 验证码
  • 私有网络访问
  • 账户特定授权
  • 硬性反滥用绕过

它还会默认拒绝私有地址、回环地址、链路本地地址、组播地址、保留地址和元数据服务目标。

这个边界使该工具对智能体有用,而不会变成绕过工具。


insane-search 的启发

我喜欢 insane-search 的理念:让公开网页读取对智能体工作流更可靠。

区别在于打包方式和接口。

unlimited-search 不将工作流绑定到单一智能体环境,而是将能力暴露为标准的 MCP 服务器:

  • 通过 pip 安装
  • 通过 stdio 运行
  • 从任何兼容 MCP 的客户端调用
  • 检查追踪和判定结果
  • 在不需要 MCP 时作为命令行工具使用

这使得它更容易接入不同的本地智能体设置。


试试看

python -m pip install unlimited-search
unlimited-search read https://dev.to --max-content-chars 1500

GitHub:

https://github.com/flyingsquirrel0419/unlimited-search

PyPI:

https://pypi.org/project/unlimited-search/

如果这个工具能让你免于再写一个脆弱的页面抓取工具,一个 GitHub 星标将有助于项目被发现。

如果你在某个奇怪的公开网站上测试它,我很想听听哪些成功了、哪些失败了、以及下一步应该添加什么回退机制。

原文:https://dev.to/flyingsquirrel0419/i-turned-a-claude-code-only-web-reader-into-a-normal-mcp-server-2i9l

——

🧑‍💻

zhirenhun

一个热爱技术的程序员,喜欢分享前沿AI知识和开发经验。

← 上一篇
你的 CS 学位没好好教你的数据结构
下一篇 →
如何为你的AI代理构建评估框架(确保其在生产环境中不崩溃)

📌 相关推荐

结构化输出 vs 工具使用 vs 预填充:2026年从Claude获取JSON
2026/7/11
在AWS Bedrock上构建生产级AI代理——值得关注的架构与代码决策
2026/7/11
如何为你的AI代理构建评估框架(确保其在生产环境中不崩溃)
2026/7/11
← 返回文章列表