关于 wet
wet 是面向 AI Agent 的开源网络研究与文档检索工具,提供 MCP 服务和命令行界面。它涵盖网页搜索、内容提取、学术检索、库文档查询及本地文件转换。
主要功能
- 01网页与学术搜索
- 02提取、分块和抓取网页内容
- 03搜索带版本信息的库文档
- 04转换常见文件为 Markdown
- 05列出并下载媒体文件
- 06本地嵌入与重排
适用场景
- 01为研究问题查找网页和学术资料
- 02提取网页内容并生成带引用的综合结果
- 03查询特定版本的库文档
- 04将 PDF 或表格转换为 Markdown
MCP 相关
wet 可作为 MCP 服务运行,通过工具提供搜索、内容提取、文档检索和文件转换能力;也提供命令行界面。服务支持 stdio 和自托管的 Streamable HTTP 接入。
配置
本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。
uvx wet-mcpOPENROUTER_API_KEY密钥OpenRouter API key — the single default credential for the [models.embed|rerank|chat|jev_score] provider cells and the openrouter search backend. Per-task overrides live in ~/.wet/config.toml; keys may also be injected via HULL_EMBED_API_KEY / HULL_RERANK_API_KEY / HULL_CHAT_API_KEY / HULL_JEV_SCORE_API_KEY. Empty cells fall back to local ONNX models.GITHUB_TOKEN密钥GitHub personal access token for higher rate limits on library discovery本地服务需要在你的电脑上安装运行环境(如 Node.js 18+)。各客户端的配置文件位置不同,请参考客户端文档。
工具
本地服务需要在你的电脑上运行后才能读取工具,维护者暂未提供工具列表。
详细介绍
WET - Web Extended Toolkit MCP 服务
**已重命名(2026-09-13):**仓库现已命名为
wet,以命令行为先(wet命令)。PyPI 包仍为wet(PyPI 政策不允许创建新的wet项目);MCP 服务是次要入口:不带子命令运行wet即可。
mcp-name: io.github.n24q02m/wet
**已重命名:**仓库、CLI 和 Python 模块现已命名为
wet。PyPI 发行包仍为wet-mcp(安装命令为pip install wet-mcp/uvx wet-mcp)。MCP 服务仍可用:不带子命令运行wet(直接运行 = MCP 透传);旧版wet-mcp控制台别名仍然有效。
面向 AI Agent 的开源 MCP 服务:网页搜索、内容提取和库文档。
| 阶段 | 状态 | 范围 |
|---|---|---|
| 阶段 1 | 已发布 | web-core ScrapingAgent 迁移、智能分块输出、搜索优化、精简媒体功能 |
| 阶段 2 | 已发布 | Context7 级别的文档搜索:库索引(Tier 1 + Tier 2)、带令牌上限的版本感知查询、项目锁定(Cabinets) |
| 阶段 3 | 已发布 | extract.agent 多步骤研究与引用综合、通过 patchright 执行 extract.interact 点击/填充/提交(可选会话持久化)、迁移 docs_004_chunk_summaries、已移除 media.analyze(v2.0.0) |
当前版本:v3.x。
media(action="analyze")已在 v2.0.0 重大变更版本中移除。使用imagine-mcp的understand操作进行视觉/音频/视频分析。升级方法请参阅docs/migration.md。
n24q02m 的姊妹项目(点击展开)
| 项目 | 简介 | 标签 | |---|---|---| | [agent-chat-plugin](https://github.com/n24q02m/agent-chat-plugin) | AI Agent 在共享文件夹中进行点对点对话——无需人工转发、无需协调器,工... | Tooling | | [crg](https://github.com/n24q02m/crg) | 面向高效代码审查的知识图谱——语义搜索和调用-... | MCP | | [better-drive](https://github.com/n24q02m/better-drive) | 双向 Google Drive 同步,支持 .driveignore 过滤器——采用 rclone 引擎,提供 Windows 托盘 | Tooling | | [better-email-mcp](https://github.com/n24q02m/better-email-mcp) | 面向 AI Agent 的 IMAP/SMTP 邮件功能——读取、发送、整理文件夹并管理附... | MCP | | [better-godot-mcp](https://github.com/n24q02m/better-godot-mcp) | 面向 Godot Engine 的复合 MCP 服务——提供 17 个复合工具,支持 AI 辅助游... | MCP | | [better-notion-mcp](https://github.com/n24q02m/better-notion-mcp) | 面向 AI Agent、以 Markdown 为先的 Notion——支持页面、数据库、内容块和评论... | MCP | | [better-semantic-release](https://github.com/n24q02m/better-semantic-release) | 可直接替换的 python-semantic-release 分支,内置发布安全防护(orp... | Tooling | | [better-telegram-mcp](https://github.com/n24q02m/better-telegram-mcp) | 面向 AI Agent 的 Telegram 功能——支持多种机器人... | MCP | | [better-workspace-mcp](https://github.com/n24q02m/better-workspace-mcp) | Google Workspace MCP 服务(Docs/Drive/Calendar/Gmail/Sheets/Slides/Tasks/Ch... | MCP | | [claude-plugins](https://github.com/n24q02m/claude-plugins) | 面向 n24q02m MCP 服务的 Claude Code 插件市场——安装网页搜索... | Marketplace | | [imagine-mcp](https://github.com/n24q02m/imagine-mcp) | 面向 AI Agent 的图像和视频理解与生成——支持 Gemini、Op... | MCP | | [jules-task-archiver](https://github.com/n24q02m/jules-task-archiver) | 通过 batchexecute API 批量操作 Jules 任务的 Chrome 扩展——... | Tooling | | [mcp-core](https://github.com/n24q02m/mcp-core) | 用于构建 MCP 服务的共享基础组件——支持 Streamable HTTP 传输、OAuth... | MCP | | [mnemo](https://github.com/n24q02m/mnemo) | 具备混合搜索和嵌入式同步功能的持久化 AI 记忆。开放、免费、无限... | MCP | | [fastretrieval](https://github.com/n24q02m/fastretrieval) | 基于 ONNX 和 GGUF 的多模型嵌入与重排运行时 | Library | | [skret](https://github.com/n24q02m/skret) | 无需服务端的密钥管理。 | CLI | | [tacet](https://github.com/n24q02m/tacet) | 一种自蒸馏神经符号级联架构,可在知识间摊销大模型成本... | Tooling | | [web-core](https://github.com/n24q02m/web-core) | 用于搜索、抓取、HTTP 安全和 st... 的共享 Web 基础设施包 | Library | | [wet](https://github.com/n24q02m/wet) | 面向 AI Agent 的开源 MCP 服务:网页搜索、内容提取和库... | MCP |目录
- 网页搜索 -- 内置 SearXNG 元搜索(Google、Bing、DuckDuckGo、Brave),支持查询扩展、TTL 缓存(一般查询 1 小时/时效性查询 5 分钟)、标准化引用格式,以及 200 个 token 的摘要上限。可通过
SEARCH_BACKENDS配置可选的云搜索后端(Tavily、Brave、Exa、Kagi、OpenRouter、Firecrawl),组成回退链 - 学术研究 -- 搜索 Google Scholar、Semantic Scholar、arXiv、PubMed、CrossRef、BASE
- 文档库 -- 自动发现并索引文档,支持 FTS5 混合搜索、HyDE 增强检索和特定版本的文档
- 内容提取 -- 通过
n24q02m-web-coreScrapingAgent使用 5 种策略组成的升级链(basic_http->tls_spoof-> 来自BROWSER_BACKENDS(native/browserless/cf-browser-rendering)的渲染后端 -> 可选的、需要密钥的captcha);使用 markitdown 桥接处理低层级 HTML/MD 回退;输出结构化的智能分块结果(纯文本 + Markdown + JSON-LD + 代码块 + 元数据);支持批处理(最多 50 个 URL)、深度爬取和站点映射 - 本地文件转换 -- 将 PDF、DOCX、XLSX、CSV、HTML、EPUB、PPTX 转换为 Markdown
- 媒体 -- 列出并下载图片/视频/音频文件。
analyze已在 v2.0.0 中移除 -- 视觉/音频推理请使用imagine-mcp.understand - 反机器人 -- 使用隐身策略绕过 Cloudflare、Medium、LinkedIn、Twitter
- 零配置 -- 通过 fastretrieval 内置本地引用嵌入和重排,无需 API 密钥。可通过
~/.wet/config.toml中的[models.embed|rerank|chat|jev_score]单元格为各任务配置可选的云模型(默认使用 OpenRouter;一个OPENROUTER_API_KEY即可供所有单元格使用) - 同步 -- 通过 Google Drive 跨机器同步已索引的文档(OAuth 设备代码,无需浏览器重定向)
快速安装
# Method 1 (default): plugin install via Claude Code
/plugin marketplace add n24q02m/claude-plugins
/plugin install wet@n24q02m-plugins
# Method 2 (CLI): direct uvx invocation
claude mcp add wet -- uvx wet-mcp
# Method 3 (source-built container for HTTP / multi-device / OAuth)
docker build --target http -t wet:local .
docker run -d --name wet-http -p 8084:8080 \
-v wet-data:/data -e PUBLIC_URL=https://wet.example.com \
wet:local
# Method 4 (remote): point a client at an HTTP deployment
claude mcp add --transport http wet https://<your-host>/mcp
安装矩阵(除非另有说明,均使用 stdio;完整步骤请参阅设置页面):
| 客户端 | 安装 |
|---|---|
| Claude Code(插件) | /plugin marketplace add n24q02m/claude-plugins 然后运行 /plugin install wet@n24q02m-plugins |
| Claude Code(stdio) | claude mcp add wet -- uvx wet-mcp |
| Codex | 在 ~/.codex/config.toml 的 mcp_servers 下注册 stdio 命令 uvx wet-mcp |
| Gemini CLI | 将下方的 mcpServers JSON 添加到 ~/.gemini/settings.json |
| Cursor / Windsurf | 通过客户端的 MCP 设置(mcp.json)添加下方的 mcpServers JSON |
| 任意客户端(HTTP 自托管) | 将客户端指向 https://<your-host>/mcp(Streamable HTTP,需通过 OAuth 验证) |
已停止发布公共 OCI 镜像。现有历史注册表标签保持不变;新的容器部署请从源代码构建,或使用 Cloudflare 管理的注册表。
HTTP 端点使用 Streamable HTTP,并受 OAuth 验证保护——客户端首次连接时会提示你在浏览器中进行身份验证(无需粘贴 API 密钥)。请使用方法 3 或部署到 Cloudflare一节进行部署。
完整的设置矩阵见规范文档站点 mcp.n24q02m.com/servers/wet/setup/ ;可直接粘贴给 Agent 的代码片段见 claude-plugins/plugins/wet/setup-with-agent.md (遵循 Spec F 单一事实来源)。
自托管用法
有两种受支持的方式可运行常驻 HTTP 服务。两种方式下,MCP
端点均为 http://127.0.0.1:8000/mcp(Streamable HTTP),配置根目录均为
~/.wet/(config.toml、docs.db、subs/)。切勿将服务作为客户端的子进程启动——请在客户端中注册该端点。
开发环境(uv,无身份验证,仅限环回地址)
git clone https://github.com/n24q02m/wet && cd wet
uv run wet config init # writes ~/.wet/config.toml (default: auth = "no-auth")
uv run wet # serves http://127.0.0.1:8000/mcp
no-auth 模式会拒绝绑定非环回地址——切换到令牌身份验证之前,服务仅可通过本地主机访问。
始终运行(docker)
# 1. Mint a token and its scrypt hash (hull-core canonical; the hash command
# never echoes the token itself)
openssl rand -hex 32 # the token — give it to clients, keep it secret
uv run wet token hash <token> # paste the output as token_hash
# 2. Instance config from the example
cp docker-config/config.example.toml docker-config/config.toml
# edit [server] token_hash and the [models.*] cells (see below)
# 3. Data continuity (optional): carry an existing instance over by copying
# docs.db and subs/ into the wet-home named volume BEFORE first start:
docker volume create wet-wet-home && \
docker cp ~/.wet/docs.db wet-wet-home:/docs.db && \
docker cp ~/.wet/subs wet-wet-home:/subs # adjust: files land as root, chown 999:999
docker compose up -d --build
Compose 将 127.0.0.1:${WET_PORT:-8000} 发布到容器的 8000 端口(仅限 loopback),并将 docker-config/config.toml 以只读方式挂载到
/home/appuser/.wet/config.toml。持久化数据(docs.db、subs/)存放在
名为 wet-home 的卷中;下载/缓存目录存放在 wet-data 中。编辑配置后,执行
docker compose restart 即可生效。
使用者
# CLI (same token, JSON-RPC over HTTP not needed — use the installed CLI):
uvx wet-mcp --help # or `wet <tool>` for direct tool calls
# MCP client (Claude Code):
claude mcp add --transport http wet http://127.0.0.1:8000/mcp \
--header "Authorization: Bearer <token>"
# Raw probe:
curl -s -o /dev/null -w '%{http_code}\n' http://127.0.0.1:8000/mcp \
-X POST -H 'Content-Type: application/json' \
-d '{"jsonrpc":"2.0","id":1,"method":"initialize","params":{}}' # 401
curl -s -o /dev/null -w '%{http_code}\n' http://127.0.0.1:8000/mcp \
-X POST -H 'Authorization: Bearer <token>' -H 'Content-Type: application/json' \
-H 'Accept: application/json, text/event-stream' \
-d '{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":"2025-03-26","capabilities":{},"clientInfo":{"name":"curl","version":"0"}}}' # 200
配置:本地模型与云端模型
~/.wet/config.toml 中的 [models.embed|rerank|chat|jev_score] 配置项按任务分别设置(每项都有自己的 base_url + api_key + model,遵循 OpenAI 规范)。示例附带了 OpenRouter 配置;任何兼容 OpenAI 的端点都可以使用——无论是云端端点,还是 Ollama 这类本地服务(从容器内访问时,base_url = "http://host.docker.internal:11434/v1")。文件中的密钥仅供主机使用;也可以将 api_key = "" 留空,并在启动时通过
HULL_EMBED_API_KEY / HULL_RERANK_API_KEY / HULL_CHAT_API_KEY /
HULL_JEV_SCORE_API_KEY 注入密钥。
配置
wet 开箱即用,无需配置:网页搜索使用内嵌的本地 SearXNG;未设置云端密钥时,嵌入和重排会通过 fastretrieval 回退到捆绑的本地 ONNX 模型。若要获得更高质量的结果,请配置
~/.wet/config.toml 中按任务划分的服务商配置项。运行设置使用普通环境变量(不带应用前缀)——在 HTTP 自托管模式下,则通过浏览器设置表单填写。
服务商配置项——[models.embed|rerank|chat|jev_score] 各自使用独立的
base_url + api_key + model(遵循 OpenAI 规范)。所有配置项都预先配置为使用 OpenRouter;任何兼容 OpenAI 的端点都可以使用。配置项的密钥可以在文件中留空,并在启动时通过 HULL_EMBED_API_KEY /
HULL_RERANK_API_KEY / HULL_CHAT_API_KEY / HULL_JEV_SCORE_API_KEY 注入。如果配置项保留了 OpenRouter 默认的 base_url,环境变量中的
OPENROUTER_API_KEY 会作为最后的凭据供其使用——一个 OpenRouter 密钥即可支持所有任务。嵌入或重排配置项留空时会回退到本地 ONNX 模型;聊天配置项没有密钥时会禁用 LLM 功能(例如 extract(action="agent"))。
FASTRETRIEVAL_CACHE_PATH 用于控制本地模型缓存。
搜索后端——SEARCH_BACKENDS 是按顺序执行的运行时回退链:
searxng(默认,可通过 SEARXNG_URL 使用本地或外部服务)、需要密钥的 tavily / brave / exa / kagi / openrouter、密钥可选的 firecrawl,以及无需凭据的 duckduckgo /
startpage。需要密钥的服务商使用 TAVILY_API_KEY、BRAVE_API_KEY、EXA_API_KEY、
KAGI_API_KEY 或 OPENROUTER_API_KEY(使用逗号分隔多个密钥以轮换)。openrouter 后端会通过聊天补全和 openrouter:web_search 服务端工具执行查询,并将返回的 url_citation 注释映射为通用结果格式;OPENROUTER_MODEL(默认使用免费层级模型)、OPENROUTER_BASE_URL 和 OPENROUTER_SEARCH_ENGINE 可以覆盖其行为。未设置 FIRECRAWL_API_KEY 时,Firecrawl 会尝试无密钥请求;如果请求被拒,或者 DuckDuckGo/Startpage 遇到机器人验证,系统就会转到链中的下一个后端。
结果重排使用已配置的重排配置项([models.rerank]——默认通过 OpenRouter 使用云端服务,或在没有密钥时使用本地 ONNX);同一回退链也用于网页搜索、研究、相似页面搜索、Agent 搜索,以及文档发现/索引回退。SearXNG 在研究场景中保留科学类别筛选;其他服务商则使用各自的搜索功能。托管用户在自己的中继记录中配置回退链和密钥。空的托管记录不会继承运营方的服务商密钥或本地 SearXNG URL;单用户 stdio 仍使用环境变量/设置,并保留公开的本地路径。
浏览器渲染后端——BROWSER_BACKENDS(CSV,升级链)用于选择 extract 的无头渲染环节:native(进程内 Chromium,默认无需配置)、browserless(自托管渲染服务——设置 BROWSERLESS_URL + BROWSERLESS_TOKEN)以及 cf-browser-rendering(Cloudflare Browser Rendering——设置 CF_ACCOUNT_ID + CF_BROWSER_RENDERING_TOKEN)。链为空时回退到 native。设置 CAPSOLVER_API_KEY,可在升级链末尾追加一个可选的、需密钥启用的 CAPTCHA 层级。
Robots 策略——设置 RESPECT_ROBOTS_TXT=true,即可在 extract 策略链以及由 Crawl4AI 支持的 crawl、sitemap 和 list_media 操作中强制执行 robots.txt。默认值为 false,以保留现有部署行为;如果运维人员要求执行 robots 规则,请明确配置此进程级策略。
隐身层级 + 预置身份(可选启用)——在 BROWSER_BACKENDS 中追加 invisible,可在升级链末尾添加一个隐身 Firefox 引擎层级(n24q02m-hull[invisible] 附加项:pip install "wet-mcp[invisible]")。整个链共用一个一致的浏览器身份:使用 WET_IDENTITY_SEED 为其设定种子(或由 wet 生成一次,并将其持久化到 ~/.wet/subs/<sub>/identity.json),同时安装 wet[identity] 附加项。若未安装这些附加项,链会保持旧版行为(仅警告一次)。STEALTHFOX_BINARY 用于指定已打补丁的 Firefox 版本,以跳过引擎下载;IDENTITY_PROFILE_DIR(默认值为 ~/.wet/subs/<sub>/profiles)用于按命名空间保存持久化的浏览器配置文件。
禁用本地回退——可按能力选择退出占用资源较多的进程内本地回退(例如,在仅通过云后端进行渲染、搜索和嵌入的精简容器中):DISABLE_LOCAL_BROWSER、DISABLE_LOCAL_SEARCH、DISABLE_LOCAL_EMBED、DISABLE_LOCAL_RERANK。
文档同步——SYNC_ENABLED(默认值为 true)、GOOGLE_DRIVE_CLIENT_ID(同步必需)、SYNC_FOLDER(默认值为 wet)、SYNC_INTERVAL(默认值为 300s)。同步通过 OAuth Device Code 流程使用 Google Drive(无需浏览器重定向)。
DOCS_DB_BACKEND=cf-d1 会禁用 GDrive/S3 文件同步,包括自动启动、中继向导和设备代码设置,即使仍保留旧版同步设置也是如此。非 CF SQLite 部署仍可使用 GDrive 同步;SYNC_S3_BUCKET 用于改用 S3,而 SYNC_ENABLED=false 会同时禁用两者。
HTTP 自托管——MCP_TRANSPORT=http、PUBLIC_URL=<your-domain>。设置表单由 MCP_RELAY_PASSWORD 控制访问;多用户部署还需要 CREDENTIAL_SECRET(每用户的保险库密钥)、MCP_JWT_SIGNING_SECRET(可轮换的 OAuth JWT 密钥)和 MCP_DCR_SERVER_SECRET。
stdio 配置示例(一个 OpenRouter 密钥即可为所有提供商单元供能):
{
"mcpServers": {
"wet": {
"command": "uvx",
"args": ["wet-mcp"],
"env": {
"OPENROUTER_API_KEY": "sk-or-xxx"
}
}
}
}
如需为不同任务使用不同的端点或模型,请编辑 ~/.wet/config.toml 中的 [models.*] 单元,或在启动时注入 HULL_EMBED_API_KEY / HULL_RERANK_API_KEY / HULL_CHAT_API_KEY / HULL_JEV_SCORE_API_KEY,而不是将密钥存储在文件中。
状态
采用稳定架构,支持两种传输方式:stdio(默认,本地)和 HTTP(自托管,由 OAuth 控制访问)。没有守护进程桥接层,也不会从 stdio 自动启动。media.analyze 操作已在 v2.0.0 BREAKING 版本中移除——升级说明请参阅 docs/migration.md。当前发布系列:v3.x。
文档
完整文档见 mcp.n24q02m.com/servers/wet/setup/:
- 安装 -- Claude Code、Codex、Gemini CLI、Cursor、Windsurf、mcp.json 的安装方法
- 模式概览 -- stdio / local-relay / remote-relay / remote-oauth
- 多用户设置 -- 基于 JWT 的 sub 声明的凭证模型
仓库内参考资料(Spec F 的唯一事实来源:设置文档位于 claude-plugins/plugins/wet/):
docs/ARCHITECTURE.md-- web-core ScrapingAgent 集成、策略链、存储布局、LLM 提供商分发docs/BENCHMARKS.md-- v1.x 基准覆盖范围 / 延迟占位符 + tier-1 fixture 指标
使用 AI Agent 安装 -- 将以下内容粘贴给你的 AI 编码 Agent:
按照以下步骤安装 MCP 服务
wet: https://raw.githubusercontent.com/n24q02m/claude-plugins/main/plugins/wet/setup-with-agent.md
工具
6 个 MCP 工具(3 个领域工具 + config + help + config__open_relay)。旧版
setup 工具已合并到 config 操作分发中。
| 工具 | 描述 |
|---|---|
search | 网页(SearXNG 元搜索)、新闻、图片、学术研究(Scholar / arXiv / PubMed / CrossRef / Semantic Scholar / BASE)、库文档(HyDE + FTS5)、查找相似页面。包含 docs_resolve(库名称 -> 排序后的 ID)、docs_query(感知版本 + 主题 + 5000-token 上限)、docs_lock_project(通过 pyproject / package.json / go.mod / Cargo.toml 清单检测,固定 Cabinets 项目)。 |
extract | URL -> 智能分块字典(clean_text + markdown + structured_data + code_blocks + metadata),通过 web-core 5 策略链处理。批量处理(最多 50 个 URL)、深度爬取、站点映射、本地文件转换(PDF/DOCX/XLSX/PPTX/EPUB)、结构化提取(JSON Schema) |
media | list(从图库页面发现 URL)、download(防 SSRF)。analyze 已在 v2.0.0 中移除 -- 请改用 imagine-mcp.understand |
config | status、set、cache_clear、docs_reindex、warmup、setup_sync、setup_status、setup_skip、setup_reset、setup_complete |
help | 各工具文档:search、extract、media、config |
config__open_relay | 重新触发零配置中继设置流程(为浏览器表单输出新的中继 URL)。通过 mcp-core 的 register_open_relay_tool 注册,让 LLM 无需手动重启即可重新开始设置。 |
媒体处理边界:对于视觉 / 音频理解(图片描述生成、 OCR、音频转录、视频摘要),请使用 imagine-mcp。
media.analyze已在 wet v2.0.0 中移除 -- 请改用imagine-mcp.understand。
命令行
此软件包会安装两个控制台脚本:wet(主要脚本)和 wet-mcp
(为兼容现有 uvx wet-mcp 配置而保留的旧版别名)。直接调用
(或使用任何以连字符开头的标志)会启动服务;以位置参数开头的调用
会作为子命令分发。
uvx --from wet-mcp wet warmup # try a subcommand without a persistent install
wet # start the server over stdio (default transport)
wet --http # start the server over Streamable HTTP (self-host mode)
wet auth google # authorize the Google credential provider for Drive sync
wet logout # clear the local Google Drive sync token
wet warmup # pre-download local models + run auto-setup (SearXNG, browser) to avoid first-run delays
wet docs reindex <library> # drop the cached docs index for <library>; the next docs search re-indexes it
auth google 可通过 --client-id
和 --client-secret 使用自带的 OAuth 客户端(仅限单用户 / 本地机器;令牌会写入
本地存储)。每个子命令都会输出 JSON 结果并退出。
| 功能 | wet | Brave Search | Tavily | Firecrawl | Context7 |
|---|---|---|---|---|---|
| 网页搜索 | 是(SearXNG 聚合) | 是 | 是 | 否 | 否 |
| 提取 URL 内容 | 是(5 策略链) | 否 | 是(基础功能) | 是 | 否 |
| 媒体列表 / 下载 | 是 | 否 | 否 | 否 | 否 |
| 库文档搜索 | 是(Tier 1 精选 + Tier 2 按需,感知版本,Cabinets) | 否 | 否 | 否 | 是 |
| 学术研究 | 是(6 个提供商) | 否 | 否 | 否 | 否 |
| 可自托管 | 是 | 否 | 否 | 否 | 是 |
| 免费层级 | 是(开源) | 有限 | 有限 | 有限 | 是 |
安全性
- 防止 SSRF——对爬取目标进行 URL 验证
- 优雅降级——云端 → 本地嵌入,多层级爬取
- 错误信息清理——错误消息中不包含凭据
- 文件转换沙箱隔离——可选的
CONVERT_ALLOWED_DIRS限制
从源代码构建
git clone https://github.com/n24q02m/wet.git
cd wet
uv sync
uv run wet
部署到 Cloudflare
在 Cloudflare 上以无服务器方式运行自己的单用户 wet 实例(Containers + D1 + Vectorize + KV)。
前提条件: Cloudflare 账户需使用 Workers Paid 计划——Containers、D1 和 Vectorize 均需此计划(Cloudflare 免费套餐不包含这些服务)——并安装 wrangler CLI。
git clone https://github.com/n24q02m/wet && cd wetwrangler login- 配置资源并应用 D1 架构:
将返回的 ID 粘贴到wrangler d1 create wet-docs wrangler d1 execute wet-docs --file migrations/0001_init_wet.sql --remote wrangler d1 execute wet-docs --file migrations/0002_project_context.sql --remote wrangler d1 execute wet-docs --file migrations/0003_version_index_state.sql --remote wrangler vectorize create wet-docs-vectors --dimensions 768 --metric cosine wrangler kv namespace create wet-kvwrangler.jsonc中。 - 从此检出版本构建精简版 HTTP 镜像,并直接推送到
Cloudflare 的托管注册表(CF Containers 无法从外部
注册表拉取镜像):
docker build --target http --build-arg SLIM=1 -t wet:beta . wrangler containers push wet:beta # prints registry.cloudflare.com/<ACCOUNT_ID>/wet:beta - 设置操作员身份验证/存储和 Browser Run 密钥:
wrangler secret put CREDENTIAL_SECRET wrangler secret put MCP_JWT_SIGNING_SECRET wrangler secret put MCP_RELAY_PASSWORD wrangler secret put MCP_DCR_SERVER_SECRET wrangler secret put CF_BROWSER_RENDERING_TOKEN - 执行
wrangler deploy,然后在 Worker 域名下的浏览器中继表单中完成设置。
存储通过 MCP_STORAGE_BACKEND=cf-kv(凭据/令牌,加密)、
DOCS_DB_BACKEND=cf-d1(文档 + BM25 全文检索)和 Vectorize(嵌入)映射到 Cloudflare。默认的无头渲染器为
BROWSER_BACKENDS=cf-browser-rendering。精简镜像中已禁用本地
ONNX 回退;请通过每个已验证身份主题的中继记录配置搜索和云端
检索。Worker 级别的搜索/模型链和提供商密钥不会转发到容器。
config.toml 中每个任务对应的 [models.*] 配置项用于配置云端
嵌入/重排/聊天:将每项的 base_url 指向任意兼容 OpenAI 的端点——默认使用 OpenRouter——并通过该项的 api_key 或对应的 HULL_<TASK>_API_KEY 环境变量提供密钥。对于所有保留 OpenRouter 默认 base_url 的配置项,只需使用一个 OPENROUTER_API_KEY。
将带密钥的搜索提供商凭据(例如 TAVILY_API_KEY)存储在同一主题记录中。请为所选嵌入模型支持的维度配置 Vectorize 和 EMBEDDING_DIMS。
部署(维护中的实例)
每个带标签的版本都会自动部署(仅当 CF_DEPLOY_ENABLED
开关开启时——请参阅下方的暂停说明):CD 的 deploy-cf 作业会检出
已发布的标签,构建 http-slim 镜像,将其作为不可变的 :<release-tag> 推送到 Cloudflare 托管的
注册表,部署 Worker,并通过金丝雀健康检查——线上运行的版本与其自身版本完全一致。Beta 分发会重新部署 beta;稳定版分发需经维护者批准。禁止对维护中的实例手动运行 wrangler deploy:这会破坏
版本标签与线上镜像之间的对应关系。在自己的 Cloudflare
账户上自托管(使用上方按钮)不受影响。
已于 2026-09-13 暂停: 账户中的 CF 部署令牌因不符合清单要求(违反流程)而被移除,因此
deploy-cf现在会在CF_DEPLOY_ENABLED仓库变量关闭时跳过操作。维护中的实例将保持冻结状态,继续运行最后一次部署的版本,直到按照文档说明的流程重新建立令牌并将变量设为true。
Smithery
wet 提供 smithery.yaml,因此可以通过
Smithery 安装和运行。清单声明了 stdio 启动
命令(uvx --python 3.13 wet-mcp),配置架构为空——启动无需配置,提供商和凭据可在运行时通过服务自身的配置流程进行设置(请参阅配置)。
信任模型
此插件实现 TC-Local(绑定到机器,单一信任主体)。完整分类请参见 mcp-core 信任模型。
| 模式 | 存储 | 加密 | 谁可以读取你的数据? |
|---|---|---|---|
| stdio(默认) | ~/.wet/config.json | AES-GCM,绑定到机器的密钥 | 仅你的操作系统用户(文件权限 0600) |
| HTTP 自托管 | 与 stdio 相同 | 相同 | 仅你(管理员 = 用户) |
许可证
Apache-2.0 -- 参见 LICENSE。
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。