mcpField
S
searchts

searchts

本地服务
github.com浏览器自动化24 天前更新

关于 searchts

searchts 是面向 AI Agent 的开源网页读取工具,可将网页提取为 Markdown,并在无法访问时明确说明。它结合分级解锁、搜索、分享对话解码、资源抓取和视频转录。

主要功能

  1. 01分级访问受阻及 JavaScript 网页
  2. 02解码八个平台的分享对话
  3. 03免密钥网页搜索
  4. 04提取并下载网页资源
  5. 05转录支持的视频内容
  6. 06清理提示词注入迹象

适用场景

  1. 01读取内置抓取无法访问的网页
  2. 02获取完整的 AI 对话分享内容
  3. 03搜索网页并打开结果页面
  4. 04收集网站图片、字体和 SVG
  5. 05转录没有字幕的视频

MCP 相关

它可作为 MCP 服务运行,向 MCP 客户端提供网页读取及相关能力。

配置

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

mcp.json · 通用配置
{
"mcpServers": {
"capad-xyz-searchts": {
"command": "uvx",
"args": [
"searchts"
]
}
}
}
启动命令uvx searchts

本地服务需要在你的电脑上安装运行环境(如 Node.js 18+)。各客户端的配置文件位置不同,请参考客户端文档。

安装包
pypisearchts0.23.0

工具

9

收录的工具列表 · 更新于 3 天前

此工具无需参数。

详细介绍

searchts

为 AI Agent 解锁网页并读取内容,无需密钥。 (私下说,就是“搜索这玩意儿”。)

它会读取网页;如果做不到,就会明确告诉你的 Agent。

当 Claude、Cursor、Codex 或其他 Agent 获取 URL 时,返回的内容经常是一团糟:403 机器人拦截页、空白的 JavaScript 外壳、被截断的 AI 聊天分享链接,或者登录页面——模型却会若无其事地把它总结成文章。searchts 是你的 Agent 调用的网页阅读器。它是开源软件(MIT),免费、无需 API 密钥,默认拒绝使用付费住宅代理,并可作为 MCP 服务、命令行工具或 Python 库运行。

CI PyPI Python Downloads License: MIT

Claude Agent 获取网页时遇到 403 机器人拦截页,于是改用 searchts,读取网页并回答问题
▶ 观看完整的 1 分钟演示

一行命令安装到 Agent

只需一条命令,即可将 searchts 添加到 Claude Code、Cursor 或任何 MCP 客户端。无需 API 密钥:

claude mcp add searchts -- uvx --from "searchts[mcp]" searchts mcp serve

若要全局安装并添加隐身浏览器(最难处理的关卡会用到),请使用:

pipx install "searchts[mcp]" && searchts install --browser
claude mcp add searchts -- searchts mcp serve

安装介绍了 uvx、pipx、venv 和浏览器扩展的用法。命令行工具、MCP 服务和 Python 库都调用同一条读取流程。

Agent 内置的网页获取功能做不到的三件事

1. 解码 ChatGPT、Claude、Gemini、Grok、Poe、DeepSeek、Perplexity 和 Copilot 的完整分享链接

分享的对话不会以纯文本形式出现在初始页面 HTML 中。直接获取只会得到 JavaScript 外壳;即使使用渲染器,也可能在对话中途截断。searchts read 能识别分享 URL,并将每个提供方自己的数据通道解码为完整、标注角色的 Markdown,无需密钥,也无需登录:

searchts read https://chatgpt.com/share/...        # turbo-stream payload in the page (no browser)
searchts read https://claude.ai/share/...          # keyless snapshot API behind Cloudflare (no browser)
searchts read https://gemini.google.com/share/...  # keyless batchexecute RPC (no browser)
searchts read https://chat.deepseek.com/share/...  # stealth render, auto-scrolls past list virtualization

支持八家提供方:ChatGPT(包括 /share/<uuid> 和较新的 /s/<prefix>_<id> 短链接)、Claude、Gemini、Grok、Poe、DeepSeek、Perplexity 和 Copilot。前五家无需浏览器。后三家会使用隐身层:滚动页面,直到页面高度不再变化,展开折叠内容,然后读取。

2. 突破机器人拦截;如果做不到,就明确报错,而不是对着登录页面胡编乱造

每次 searchts read 都会逐级尝试三层开源解锁器,并记住每个域名上哪一层成功:

  • curl_cffi 会模拟真实 Chrome 的 TLS/JA3 和 HTTP/2 指纹。速度快、本地运行、保护隐私。
  • Jina Reader(r.jina.ai)会在页面内容需要运行 JavaScript 才能显示时渲染页面。默认启用;设置 SEARCHTS_NO_JINA=1 可避免将 URL 发送到 Jina 的服务器。
  • patchright 是按需启动的隐身 Chromium,只有在更简单的层级都失败后才会启动。
  • --human 会打开真实浏览器,以便由人手动通过页面验证。
searchts read https://some-js-heavy-or-fingerprinted-site.com --scrub
# Tier 1 (curl_cffi) -> 403 | Tier 2 (Jina) -> clean Markdown returned, injection scrubbed

searchts read https://www.linkedin.com/in/someone/
# Fails loudly: reports the exact tier and login-wall reason. stdout stays empty.

--scrub 会剥除不可见字符和双向文本字符,并在不可信文本到达模型之前标记提示词注入迹象。

你主动提供的登录凭据,与 searchts 自行猜测的登录凭据不同。在 0.15.0 中,本地凭据复用默认关闭,并限制为命令中指定的单个主机:--cookies-from-browser <browser> --yes、--cookies <path> 或 --cdp-port <port>。如果不使用其中任何一种方式,遇到拦截页时会报错,而不会把它当作文章。

3. 转录视频并抓取指纹验证的设计素材
searchts transcribe https://youtu.be/...                     # YouTube, TikTok, Instagram Reels, Reddit
searchts transcribe https://www.instagram.com/reel/... --cookies-from-browser chrome
searchts grab https://stripe.com --kinds images,fonts,svg --read --out ./stripe-kit

转录优先使用字幕;没有字幕时,则通过 yt-dlp 获取音频并使用 Whisper 转录。grab 会通过同一解锁器提取页面上的图片、图标、CSS、字体、SVG 和调色板,因此即使是有指纹验证的 CDN 也能处理,而不只是开放的 CDN。

原生网页搜索

内置抓取功能不会搜索。默认情况下,searchts search 使用无需密钥的 DuckDuckGo,并通过 SearXNG、Exa、Brave 和 Tavily 进行互惠排名融合。摘要不是网页内容。请阅读每个 URL。

searchts search "open source vector db"

存在的原因

我创建 searchts,是因为 Claude 在我让它替我阅读网页时总是碰壁。起因是一个 Devpost 黑客马拉松页面及其条款:页面甚至没有设限,但 Claude 仍然无法阅读。

最初几个版本是我和 Claude 一起构建的,却在另一个方面失败了。它们无法获取页面时,会把拿到的任何内容都交回来,Agent 就把加载页面总结成了文章。因此,searchts 有一条高于其他一切的规则:返回真实页面,否则就明确失败并说明原因。它绝不会向你的 Agent 提供虚假的读取结果。

searchts 对比

searchts 源自 Agent-Reach 的渠道/诊断脚手架,之后用逐级升级的解锁器、分享链接解码器和 MCP 服务替换了读取/搜索核心。

能力内置 WebFetch / curlAgent-Reach托管式抓取工具(Firecrawl、Jina Pro)searchts
架构简单的 HTTP 抓取用于第三方 CLI(yt-dlp、OpenCLI、Jina)的安装器和按平台路由器托管式抓取与爬虫集群本地逐级升级解锁器 + MCP 服务 + CLI
机器人/JS 升级处理无一次 Jina Reader 网页请求托管代理和渲染curl_cffi(TLS/JA3)→ Jina → patchright 隐身模式 + --human
登录或拦截将 200 OK 登录 HTML 交给模型,或报错取决于上游 CLI 及其会话额度、限制或不完整的 HTML明确失败并说明层级和原因;可选择复用本地登录
AI 聊天分享链接空的 JS 外壳或被截断的内容没有分享链接解码器;依赖 Jina渲染器可能会截断长聊天内容原生解码器 + 自动滚动的隐身渲染(8 个提供商)
网页搜索无通过 mcporter 使用 Exa付费搜索端点无需密钥的 DuckDuckGo + 跨 SearXNG / Exa / Brave / Tavily 的 RRF。摘要不是网页内容
提示词注入清理无——内置(--scrub)
基准测试无无营销宣传的通过率可复现的双套件评分卡(Smoke 与 Walled)
默认费用免费免费,但需安装相应 CLIAPI 密钥和按页计费额度免费、MIT 许可、无需密钥(默认不使用付费住宅代理)

功能

  • 读取 Agent 自身的抓取功能无法读取的页面:浏览器指纹检查页面、仅含 JavaScript 的页面,以及部分机器人拦截页面
  • 当读取结果不是真实页面时,明确失败(例如用户未提供登录信息的页面、需要人工解决的谜题,或作为地址本身的拦截页面),并说明失败的层级和原因
  • 读取 ChatGPT / Claude / Gemini / Grok / Poe / DeepSeek / Perplexity / Copilot 的完整分享对话
  • 兼容 Claude、Codex 和 MCP Agent
  • 提取整洁的 Markdown,可直接提供给模型
  • 当页面内容超过返回范围时(例如下一页、信息流或折叠文本),会明确提示,并重建搜索结果和提取器会破坏的内容
  • 无需 API 密钥即可搜索网页(DuckDuckGo,以及 SearXNG、Exa、Brave 和 Tavily)。摘要不是网页内容
  • 下载页面素材(图片、字体、调色板)
  • 转录视频,优先使用字幕
  • 列出页面中的图片、视频和嵌入内容。searchts get <url> 会通过同一解锁流程获取其中一个 URL
  • 对于播放器页面,返回字幕;若无法获取,则会失败并指出可使用 searchts transcribe 获取音频

当读取结果指向下一步时

search 会输出一列 URL,并附上一行说明:片段不是页面。请读取每个 URL。

播放器页面(YouTube 观看 URL、TikTok 视频、Instagram reel、v.redd.it 文件,或包含视频的 X 帖子)会返回字幕;如果失败,则会输出空的 stdout,并指出音频应使用 searchts transcribe。不含视频的 X 帖子仍可读取页面。获取字幕无需密钥。音频应使用转录命令,而不是另一个读取器。

searchts transcribe https://youtu.be/...                     # audio, when read found no captions
searchts transcribe https://www.instagram.com/reel/... --cookies-from-browser chrome
searchts get https://example.com/logo.svg -o logo.svg        # one file a read named
searchts grab https://stripe.com --kinds images,fonts,svg --read --out ./stripe-kit

当文件集合本身就是交付内容时,grab 会保存这些文件。它使用相同的解锁器,因此受指纹验证的 CDN 也遵循与读取相同的阶梯。

软件包为何免费

你安装的软件包免费且无需密钥。抓取和浏览器都在你的机器上,通过你的网络连接运行。它不捆绑住宅代理。唯一托管的阶梯 Jina Reader 免费,也可以关闭。这并不意味着每个难以读取的页面永远免费。需要通过我们运营的出口才能读取的内容,属于另一种产品,并非此软件包的默认功能。评分卡记录了此版本实际读取的内容,而不是一份永远无法突破的屏蔽列表。

解锁器

searchts 会通过逐级升级的阶梯读取任意 URL,并在首个返回真实内容的层级停止:

  1. curl_cffi:模拟真实 Chrome 的 TLS/JA3 和 HTTP2 指纹进行抓取。可绕过用户代理和指纹过滤。快速、本地、私密。
  2. Jina Reader:JavaScript 渲染中继(r.jina.ai),用于只在运行 JS 后才填充内容的页面。默认开启——在此阶梯中,目标 URL 会发送到 Jina 的服务器。使用 SEARCHTS_NO_JINA=1 或配置 jina: false 选择退出(仅使用本地 curl + 隐身模式)。
  3. stealth browser:无法被检测到的无头 Chromium(patchright),仅在成本更低的层级失败后才延迟启动,用于实时 JS / Cloudflare 托管挑战。

如果所有层级都未返回真实内容,可选的人机协作步骤会打开真实浏览器,让你通过一次验证后继续。这既适用于交互式 CAPTCHA,也适用于软性屏蔽:以 HTTP 200 提供的登录页面不算挑战,但它仍然是只有人类才能通过的页面。屏蔽检测基于短语(而非供应商名称),因此不会错误拒绝仅嵌入机器人传感脚本的正常页面。内容会通过 trafilatura 提取为干净的 Markdown。

它不会做什么。 它不会把屏蔽页面冒充成文章。用户未提供登录信息时,读取仍会失败并说明原因。0.15.0 中加入了本地复用,但仅限于你为命令中指定的单个站点提供会话时(--cookies-from-browser <browser> --yes、--cookies <path> 或 --cdp-port <port>)。基于 Firefox 的 Zen 配置文件使用只读 SQLite;Vivaldi 等 Chromium 浏览器则会通过环回 CDP 端口,使用一次性配置文件副本打开,之后 searchts 会将其删除。使用 Vivaldi 无需安装 Chrome,也无需在 PATH 中添加 Chrome。尚未实现登录远程浏览器(F27)。DataDome 设备检查不代表永久失败:隐身浏览器应能让该脚本运行完毕,并处理简单的点击操作(继续、勾选复选框、按住不放这类单步操作)。如果谜题要求人识别图像,则仍会停止。默认情况下,此软件包不会通过付费住宅代理转发你的请求。发布版本不会声称能够读取某个站点,除非它确实可以读取。当前评分卡中 datadome.co 仍然读取失败。这是测量结果,不是规则。

AI 聊天分享链接

AI 聊天应用的分享链接格外棘手:对话不会以可提取文本的形式出现在网页 HTML 中,因此直接抓取只会返回一个空壳;渲染器也可能在聊天内容中途截断。searchts read 能识别这些 URL,并改为解码各服务提供方自己的数据通道,以角色标注的 Markdown 返回完整对话,无需密钥,也无需登录:

服务提供方分享 URL读取方式
ChatGPTchatgpt.com/share/…、chatgpt.com/s/…页面中嵌入的 turbo-stream 负载
Claudeclaude.ai/share/…无需密钥的快照 API(位于 Cloudflare 后)
Geminigemini.google.com/share/…无需密钥的 batchexecute RPC
Grokgrok.com/share/…、x.com/i/grok/share/…无需密钥的分享链接 API
Poepoe.com/s/…页面中嵌入的 __NEXT_DATA__ 负载
DeepSeekchat.deepseek.com/share/…隐匿渲染,并滚动到末尾
Perplexityperplexity.ai/search/…、perplexity.ai/page/…隐匿渲染,并滚动到末尾
Copilotcopilot.microsoft.com/shares/…、…/shares/pages/…隐匿渲染,并滚动到末尾

前五种不需要浏览器。后三种是 JavaScript 空壳,初始 HTML 中没有任何内容,因此会使用隐匿层:等待对话渲染完成,自动滚动,直到页面高度不再变化(否则列表虚拟化会截断较长的聊天内容),然后展开折叠的部分再读取。目前,基准测试覆盖了无需浏览器即可读取的五种;需要浏览器的三种尚未纳入其中。

ChatGPT 有两种链接形式:/share/<uuid> 用于分享整个对话,较新的 /s/<prefix>_<id> 短链接则用于分享单轮内容(t_ 表示线程,m_ 表示消息,dr_ 表示深度研究,cd_ 表示 Codex)。两种形式都支持读取。

每个服务提供方都是一个可直接使用的插件模块(searchts/share_extractors/);如果服务提供方更改格式,提取就会回退到常规解锁器层级,而不会失败。

实际效果如何?

与其让你相信我们,不如看可复现的双套件基准测试:searchts 会在两组网页上运行解锁器,并报告无需密钥即可读取的页面数量,以及每个页面使用的层级。

  • Smoke — 一组小型公开网页(对照页面、开放文档、AI 聊天分享链接)。用于检测回归,不能证明其能处理严格的反机器人防护。
  • Walled — 使用真实限制机器人访问的服务(Reddit、设有登录墙的 LinkedIn、采用 Cloudflare/DataDome 级防护的网站、X、Booking)。正文内容低于解锁器的最低内容阈值,就算失败而非通过;预期中的受限访问失败会如实报告,不会粉饰成 100%。

最近一次提交的运行读取了 12/12 个 Smoke 页面和 2/7 个 Walled 页面。受限访问的结果才是重点:五个真实防护墙都被报告为失败,而不是用虚假的 100% 掩盖。

这两项会有意分开报告——Smoke 的数字并不代表“能否突破防护墙”。请参阅 benchmarks/README.md。

python -m benchmarks.run                       # both suites, print a scorecard
python -m benchmarks.run --suite walled       # the real walled pass rate only
python -m benchmarks.run --out docs/          # write docs/scorecard.md + results.json

最新运行结果:docs/scorecard.md。添加你自己的目标——请参阅 benchmarks/README.md。

这些数字只有在住宅网络连接下才有意义:数据中心 IP(或会改变 TLS 指纹的 VPN)对快速 curl_cffi 层的拦截,比真实用户遇到的情况更严重。

安装

保留这种方式(全局隔离 CLI,包含 MCP 附加项):

pipx install "searchts[mcp]"

无需安装即可试用(一次性运行,复制粘贴即可):

uvx --from "searchts[mcp]" searchts <verb>

仅用于 venv / 打包(CLI 不推荐采用此方式):

python -m venv .venv
source .venv/bin/activate   # Windows: .venv\Scripts\activate
pip install "searchts[mcp]"

普通安装已包含隐身浏览器库(patchright)、浏览器 Cookie、MCP 服务、打包的 ffmpeg,以及 YouTube 所需的 JavaScript 运行时(通过 yt-dlp[deno] 提供的 deno)。无需在系统中安装任何内容。[mcp]、[browser] 和 [cookies] 附加项仍可解析为空别名,因此现有配置仍可正常使用。

首次设置。列出各项及其大小,只需确认一次,且默认勾选所有项目:用于隐身浏览器的 Chromium(约 170 MB)、用于 X 的 twitter-cli(约 39 MB)、用于 Reddit 的 rdt-cli(约 15 MB)、linkedin-scraper-mcp(约 214 MB)、mcporter(约 77 MB,需要 Node.js)和用于 GitHub 的 gh(约 13 MB)。本地 Whisper 模型会列出其大小,并在你首次进行本地转录时询问是否安装。网站登录不包含在这次确认中;每个网站在读取内容需要登录时都会单独询问。

searchts install                                 # a terminal asks once; type ids to uncheck
searchts install --yes --skip linkedin,mcporter  # agents: no prompt, nothing outside the list
searchts install --dry-run --json                # the list as searchts.setup.v1, changes nothing

如果没有终端且未使用 --yes,列表中的内容都不会安装;程序会打印列表和确切的确认命令。仅安装隐身浏览器:searchts install --browser。

更新正在运行的副本(searchts upgrade 是同一命令):

searchts update
更新检查与 Agent 提示

searchts 每 24 小时最多向 GitHub 查询一次 capad-xyz/searchts 的最新版本(GET https://api.github.com/repos/capad-xyz/searchts/releases/latest)。这唯一的 请求会携带 searchts/<version> User-Agent,不会包含任何关于你或你机器的信息。查询结果会缓存在 ~/.searchts/update-check.json 中,有效期为 24 小时; 查询失败时不会显示提示。

如果有更新版本:

  • searchts read --json、searchts grab --json 和 searchts doctor --json 会添加顶层 update_available 对象,{"current": "...", "latest": "...", "command": "searchts update"}。如果没有较新版本,则不会添加该对象, 因此现有解析器不会看到新键。searchts search --json 会继续让 stdout 保持为纯数组,并在 stderr 中以一行 JSON 打印 {"update_available": {...}}。
  • 成功的 MCP 工具结果(不包括 Error: ... 字符串)会附带同一个对象;此外,每 24 小时最多会有一次 提示 Agent 告知你。提示记录保存在 ~/.searchts/update-notice.json 中。
  • 在终端中运行时,仍会显示现有的 stderr 提示。

不会自动安装、下载或更改任何内容。 请自行运行 searchts update。设置 SEARCHTS_NO_UPDATE_CHECK=1 可关闭检查、 提示和 stderr 提示。

快速入门

read 是读取命令。search 用于查找要读取的 URL。网页内容以语音形式呈现,或文件未包含在文本中时,read 会调用 transcribe 和 get。

searchts read https://en.wikipedia.org/wiki/Ada_Lovelace   # the page as Markdown, or a plain failure
searchts search "open source vector db"    # native multi-provider web search, keyless by default
searchts transcribe https://youtu.be/...   # the audio, when a read found no captions
searchts get https://example.com/logo.png  # one file a read named
searchts grab https://example.com          # the set of files, when the files are the deliverable
searchts doctor                            # see what is configured and working

read 参数:--json、--backend <tier>、--human(将 CAPTCHA 或登录墙交由真实浏览器处理)、--scrub(清除注入内容)、--pages <n>(仅 curl 模式下跟进下一页,最多 5 页)、--items <n>(持续跟进,直到保留这么多列表行;如果只有滚动动态消息流才能加载更多内容,也会滚动消息流)、--expand(展开折叠内容:关闭的 <details> 和标有“阅读更多”“显示更多”“查看更多”的按钮;不会打开链接、表单或登录入口,也只会指出“继续阅读”付费墙,不会将其打开)、--proxy <url>(通过代理路由;--proxy-trusted 允许远程代理运营方查看 Cookie 请求头)。需要登录的网站读取选项,均需主动选择,且仅对命令中指定的那个网站生效:使用 --yes 搭配 --cookies-from-browser <browser>(为本次会话复制该网站的 Cookie)、--cookies <path>(由 searchts 管理的 Cookie 文件)、--cdp-port <port>(从本地主机调试端口获取 Cookie)。 请求数量受上限约束,searchts 不能超出上限请求:SEARCHTS_MAX_PAGES(默认值为 5)、SEARCHTS_MAX_ITEMS(默认值为 300)、SEARCHTS_MAX_EXPAND_CLICKS(默认值为 8)。可在环境变量中设置,或在 ~/.searchts/config.yaml 的 more: 块中设置(环境变量优先)。超出上限的请求会被截断,而不是悄悄减少,提示会附在你读取的文本中:[items: asked for 900, the ceiling is 300]。--expand 仍是是/否选项;展开到什么程度由你的上限决定,而非某个标志。只能通过滚动加载的列表,以及需要 JavaScript 的折叠内容,都需要浏览器:searchts install --browser。滚动操作会打开独立浏览器,该浏览器不带代理和 Cookie,因此携带其中任一项的读取操作不会滚动,并会说明原因。这三个上限也是 Reddit 读取的所有上限:帖子卡片、评论和搜索结果都算作行,因此只有 SEARCHTS_MAX_ITEMS 决定会返回多少条;任何未返回的内容都会以数量显示,而不是直接丢弃。 login 子命令:searchts login keep <url> --cookies-from-browser zen --yes(或 vivaldi)只会将该网站的 Cookie 复制到 searchts 存储中;之后直接运行 searchts read <url> 即可使用已保存的登录状态。searchts login signin <url> 会打开一个干净的登录窗口;添加 --yes 可保留其中的 Cookie。searchts login list 会显示每个已保留网站当前的 Cookie 数量、来源浏览器或 signin,以及过期时间(仅为最晚时间,不作保证)。searchts login sweep 会立即离线删除过期 Cookie;searchts 也会在每条命令启动时清理,并列出删除内容。它绝不会创建 cron、launchd 或任务计划程序条目。searchts login check <site> [--url <signed-in-page>] 会使用已保存的 Cookie 直接读取一个仅限登录用户访问的页面,并以 0 表示已登录、1 表示已退出、2 表示未知;遇到验证码或封锁时结果为未知,公开页面永远不算作已登录。login kill <url> 会删除 searchts 保存的副本;除非传入 --also-browser,否则不会更改你自己的浏览器。login purge-scratch 会删除临时副本。

当已保留的浏览器登录状态将在 24 小时内过期,或读取操作遇到登录墙时,可以重新复制该登录状态。只有在你已记录对该网站的确认、该次运行传入 --yes,或终端提示你确认时,才会执行;否则 searchts 会说明跳过复制及其原因。通过 login signin 保留的登录状态没有可用于重新复制的浏览器来源,因此只会提示你再次运行 login signin。每项自动操作都会打印一行记录(网站、浏览器或 signin、操作、数量、原因),而 searchts read --json 会在 cookie_actions 中包含相同信息。Cookie 值绝不会被打印或记录。 search 标志:-n <count>、--json、--provider <name>。内容输出到 stdout(可通过管道传递);状态输出到 stderr。 grab 标志:--out <dir>、--kinds <images,icons,css,fonts,svg,inline_svg>、--scripts、--read(同时保存 page.md)、--max <n>、--tokens <n>(半径、阴影和间距值;默认值为 24,上限为 200)、--json。 read --media <n> 用于限制从页面保留的内嵌媒体数量。install --channels twitter,reddit,opencli,linkedin 指定可选集成,install --system-deps(别名为 --apply)用于选择启用系统更改,install --env local|server|auto 用于选择目标。uninstall --keep-config 会保留配置目录,skill install --dir <dir> 会将斜杠命令写入其他位置;其余子命令为 check-update、setup、watch 和 version。searchts help --json 是机器可读的命令目录;docs/cli.md 列出了所有标志、默认值和示例。

在 AI Agent 中使用

只需一行,即可将 searchts 添加到 Agent 中——作为 MCP 服务,或作为 Claude Code 斜杠命令:

使用 claude mcp add 将 searchts 安装为 MCP 服务,或使用 searchts skill install 将其安装为 Claude Code 斜杠命令

两种方式,都只需一条命令:

# 1) MCP: always-on read_url + web_search + fetch_asset + grab_site + get_status + transcribe + login_status / login_signin / login_check / login_kill
# Try / no install / Claude cannot see PATH:
claude mcp add searchts -- uvx --from "searchts[mcp]" searchts mcp serve
# Keep (after pipx install "searchts[mcp]"):
#   claude mcp add searchts -- searchts mcp serve
# Desktop / Cursor / the other local agents: `searchts mcp install`
# writes the stdio server into each client already on the machine.
# First read: Wikipedia shows more than example.com, which is one short paragraph.

# 2) Skill: /searchts in Claude Code, plus SKILL.md for Claude and OpenCode
searchts skill install        # ~/.claude/commands/searchts.md and the SKILL.md bundle

参阅 MCP 服务参考,了解全部 10 个工具(read_url、web_search、fetch_asset、grab_site、get_status、transcribe、login_status、login_signin、login_check、login_kill)、它们的输入和输出,以及各自的适用场景。

功能

  • 逐级解锁开源网站:依次使用 curl_cffi、Jina Reader 和隐身浏览器。
  • 多提供商搜索与排名融合:DuckDuckGo(默认无需密钥),以及配置后可用的 SearXNG、Exa、Brave 和 Tavily;使用倒数排名融合合并结果,并去除重复项。
  • 视频转录:通过 yt-dlp 提取音频,再使用 Whisper 转录 YouTube、TikTok、Instagram 和 Reddit 视频。
  • 资源与设计抓取工具:searchts grab <url> 会下载页面的图片、图标、css 和字体,并提取配色方案及页面使用的字体;searchts get <url> 则会获取单个资源。两者都会使用同一套逐级解锁机制,因此可用于有指纹验证的 CDN,而不只是开放的 CDN。
  • 提示词注入清理:移除不可见字符和双向文本字符,标记注入迹象,并可选择进行编辑,以便更安全地将不可信页面内容提供给模型。
  • 按域名记忆后端:记住每个域名上奏效的层级,并优先尝试该层级(设置 SEARCHTS_NO_MEMORY=1 可禁用)。
  • 退出 Jina:默认启用 JS 渲染中继;设置 SEARCHTS_NO_JINA=1(或在 ~/.searchts 配置中设为 jina: false)即可跳过,因此 URL 不会发送到 r.jina.ai。
  • 使用方式:命令行工具、MCP 服务(read_url、web_search、fetch_asset、grab_site、get_status、transcribe、login_status、login_signin、login_check、login_kill)和 Python 库。

作为库使用

from searchts import unlocker
r = unlocker.fetch("https://example.com")
print(r.backend, r.status, r.text)

from searchts.search import search
for hit in search("open source vector db", max_results=5):
    print(hit.title, hit.url)

工作原理及限制

  • 免费软件包通过你自己的网络连接运行,适用于个人使用量。不附带代理池。
  • 脚本检查(包括简单的点击操作)由隐身浏览器处理。需要人工解决的谜题,以及用户未提供账号信息的登录,仍然无法通过。此类情况可使用 --human。仅针对地址的封锁属于另一层问题;这不是解决方案,也不意味着 DataDome 无法应对。
  • Reddit 只是同一梯队中的一个已知主机文件,并非绕过手段。 列表、帖子、个人资料和搜索结果会以卡片形式读取;--items 会沿用 Reddit 自己的下一篇帖子游标,--expand 会展开其“更多回复”控件,因此仍需要浏览器层,也不能保证能读取所有 Reddit URL。能否通过某个层级读取,取决于浏览器配置文件:Reddit 根据配置文件的使用情况决定是否显示“证明你是人类”验证,而不是根据地址决定。因此,新建的配置文件会在每个页面都遇到验证,而已用热的配置文件(持久化的 ~/.searchts/browser-profile)则不会——在这台机器上,新配置文件的首次运行在所有层级都被拒绝,而几分钟后执行相同命令便能读取内容。使用临时 HOME 会丢弃该配置文件,因此临时 CI 或测试机器测到的只是冷启动结果。遇到无法访问的页面时,工具会说明具体原因:私密、封禁、隔离、仅限 18 岁以上用户、已删除或已归档,而不是只返回导航栏。
  • 某些平台(尤其是 Instagram,以及 2026 年的 YouTube)可能需要你的浏览器 Cookie,也可能间歇性失败;这是平台方面的问题。
  • 反机器人系统不断演进;这是一场军备竞赛,相关技术可能需要偶尔更新。请遵守各网站的服务条款并负责任地使用。

配置

搜索无需密钥(使用 DuckDuckGo)。其他功能均为可选,可通过 searchts configure 或 .env 配置(参见 .env.example):

  • 搜索提供商:配置 Exa、Brave、Tavily API 密钥,或自托管的 SEARXNG_URL,以获取更多、更好的结果。
  • 转录:配置 Groq 或 OpenAI(Whisper)密钥。ffmpeg 和 yt-dlp 随 searchts 一起提供(若 PATH 中有 ffmpeg,则优先使用)。对于需要登录的视频:searchts transcribe URL --cookies-from-browser chrome(需主动启用;read 有自己的启用选项,参见上面的 read 标志)。
  • GitHub 令牌:用于提高速率限制。

运行 searchts doctor,检查已配置且可正常工作的项目。

可选集成

核心功能是 read / search / transcribe。每次 searchts read 都会通过 unlocker.fetch 执行,不会按平台分发请求。searchts doctor 只会探测可选 CLI (gh、twitter-cli、opencli、mcporter)是否位于 PATH 中且已通过身份验证。 检测到这些 CLI 并不表示 searchts 会通过它们读取相应网站。

路线图

尚待处理的工作见 PLAN.md。ROADMAP.md 描述发展方向,而非任务列表。已发布的内容见 docs/plan-shipped.md。

致谢

searchts 基于 Agent-Reach(MIT)构建并加以扩展,复用了其渠道、安装程序和诊断架构。渐进式开源解锁器、多提供商搜索与排名融合、提示词注入清理、按域名记忆后端、人机协同 CAPTCHA 流程、视频转录渠道、read_url / web_search MCP 工具,以及 read / search CLI 命令均为 searchts 新增功能。感谢原作者。

许可证

MIT。详见 LICENSE。原始部分 Copyright (c) 2025 Agent Eyes;修改和新增部分 Copyright (c) 2026 capad-xyz。


由 capad 构建。有问题或反馈?请提交 issue,或发送邮件至 [email protected]。

趣闻:“searchts”并没有官方的缩写含义。私下里,它代表“search this shit”。

评论

支持 Markdown

第一次接触 MCP?

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

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