wet-mcp
Pesquisa na web, extração de conteúdo e download de mídia
Documentação
WET - Servidor MCP Web Extended Toolkit
Renomeado (2026-09-13): o repositório agora é
wet— prioridade CLI (comandowet). O pacote PyPI continua sendowet(a política do PyPI bloqueia novo projetowet); o servidor MCP é uma superfície secundária: executewetsem subcomando.
mcp-name: io.github.n24q02m/wet
Renomeado: o repositório, a CLI e o módulo Python agora são
wet. A distribuição PyPI continua sendowet-mcp(instalepip install wet-mcp/uvx wet-mcp). O servidor MCP permanece disponível: executewetsem subcomando (somente o comando = passagem MCP); o alias de console legadowet-mcpainda funciona.
Servidor MCP de código aberto para agentes de IA: busca na web, extração de conteúdo e documentação de bibliotecas.
| Fase | Status | Escopo |
|---|---|---|
| Fase 1 | Lançada | Migração do ScrapingAgent web-core, saída de chunks inteligentes, refinamento de busca, mídia enxuta |
| Fase 2 | Lançada | Busca de documentação no nível Context7: índice de bibliotecas (Nível 1 + Nível 2), consultas com reconhecimento de versão e limite de tokens, bloqueio de projeto (Cabinets) |
| Fase 3 | Lançada | extract.agent pesquisa multi-etapas com síntese citada, extract.interact clique/preenchimento/envio via patchright (persistência de sessão opcional), migração docs_004_chunk_summaries, media.analyze removido (v2.0.0) |
Versão atual: v3.x.
media(action="analyze")foi removido na versão v2.0.0 BREAKING. Useimagine-mcp's açãounderstandpara análise de visão/áudio/vídeo. Consultedocs/migration.mdpara a receita de atualização.
Projetos irmãos de n24q02m (clique para expandir)
| Projeto | Tagline | Tag |
|---|---|---|
| agent-chat-plugin | Agentes de IA pares conversam em uma pasta compartilhada — sem retransmissão humana, sem orquestrador, tra... | Ferramentas |
| crg | Grafo de conhecimento para revisões de código eficientes em tokens — busca semântica e chamada... | MCP |
| better-drive | Sincronização bidirecional do Google Drive com filtro .driveignore — mecanismo rclone, bandeja do Windows | Ferramentas |
| better-email-mcp | E-mail IMAP/SMTP para agentes de IA — ler, enviar, organizar pastas e gerenciar anex... | MCP |
| better-godot-mcp | Servidor MCP composto para Godot Engine — 17 ferramentas compostas para jogos assistidos por IA... | MCP |
| better-notion-mcp | Notion com prioridade Markdown para agentes de IA — páginas, bancos de dados, blocos e comentários... | MCP |
| better-semantic-release | Fork drop-in do python-semantic-release com proteções de segurança de lançamento integradas (orp...) | Ferramentas |
| better-telegram-mcp | Telegram para agentes de IA — mensagens, chats, mídia e contatos em ambos os bo... | MCP |
| better-workspace-mcp | Servidor MCP do Google Workspace (Docs/Drive/Calendar/Gmail/Sheets/Slides/Tasks/Ch...) | MCP |
| claude-plugins | Marketplace de plugins do Claude Code para os servidores MCP n24q02m — instale busca na web... | Marketplace |
| imagine-mcp | Compreensão e geração de imagens e vídeos para agentes de IA — em Gemini, Op... | MCP |
| jules-task-archiver | Extensão do Chrome para operações em lote em tarefas do Jules via API batchexecute — a... | Ferramentas |
| mcp-core | Fundação compartilhada para construir servidores MCP — transporte HTTP Streamable, OAut... | MCP |
| mnemo | Memória persistente de IA com busca híbrida e sincronização incorporada. Aberto, gratuito, ilimit... | MCP |
| fastretrieval | Runtime de incorporação e reclassificação multi-modelo via ONNX e GGUF | Biblioteca |
| skret | Segredos sem o servidor. | CLI |
| tacet | Uma cascata neuro-simbólica autodestiladora que amortiza o custo de LLM em conhecimento... | Ferramentas |
| web-core | Pacote de infraestrutura web compartilhado para busca, scraping, segurança HTTP e st... | Biblioteca |
| wet | Servidor MCP de código aberto para agentes de IA: busca na web, extração de conteúdo e lib... | MCP |
Sumário
- Recursos
- Status
- Instalação rápida
- Uso com auto-hospedagem
- Configuração
- Documentação
- Ferramentas
- CLI
- Comparação
- Segurança
- Compilar a partir do código-fonte
- Implantar no Cloudflare
- Smithery
- Modelo de confiança
- Licença
Recursos
- Busca na web — Metabusca SearXNG incorporada (Google, Bing, DuckDuckGo, Brave) com expansão de consulta, cache TTL (1 h geral / 5 min sensível ao tempo), formato de citação padronizado e limite de 200 tokens por trecho. Backends de busca em nuvem opcionais (Tavily, Brave, Exa, Kagi, OpenRouter, Firecrawl) como cadeia de fallback via
SEARCH_BACKENDS - Pesquisa acadêmica — Pesquise no Google Scholar, Semantic Scholar, arXiv, PubMed, CrossRef, BASE
- Documentação de bibliotecas — Descoberta e indexação automáticas de documentação com busca híbrida FTS5, recuperação aprimorada por HyDE e documentação específica por versão
- Extração de conteúdo — Cadeia de escalonamento de 5 estratégias via
n24q02m-web-coreScrapingAgent(basic_http->tls_spoof-> backends de renderização deBROWSER_BACKENDS(native/browserless/cf-browser-rendering) ->captchaopcional com chave), ponte markitdown para fallback de HTML/MD de baixo nível, saída estruturada de chunks inteligentes (texto limpo + markdown + JSON-LD + blocos de código + metadados), processamento em lote (até 50 URLs), rastreamento profundo, mapeamento de sites - Conversão de arquivos locais — Converta PDF, DOCX, XLSX, CSV, HTML, EPUB, PPTX para Markdown
- Mídia — Listar + baixar arquivos de imagens / vídeos / áudio.
analyzefoi removido na v2.0.0 — useimagine-mcp.understandpara inferência de visão/áudio - Anti-bot — Estratégias furtivas contornam Cloudflare, Medium, LinkedIn, Twitter
- Zero Configuração — Incorporação de referência local integrada + reclassificação via fastretrieval, sem necessidade de chaves de API. Modelos de nuvem opcionais configurados por tarefa via células
[models.embed|rerank|chat|jev_score]em~/.wet/config.toml(padrão OpenRouter; umOPENROUTER_API_KEYatende a todas as células) - Sincronização — Sincronização entre máquinas de documentos indexados via Google Drive (Código de Dispositivo OAuth, sem redirecionamento de navegador)
Instalação rápida
# 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
Matriz de instalação (stdio, salvo indicação em contrário; consulte a página Configuração para etapas completas):
| Cliente | Instalação |
|---|---|
| Claude Code (plugin) | /plugin marketplace add n24q02m/claude-plugins e depois /plugin install wet@n24q02m-plugins |
| Claude Code (stdio) | claude mcp add wet -- uvx wet-mcp |
| Codex | registre o comando stdio uvx wet-mcp em mcp_servers no ~/.codex/config.toml |
| Gemini CLI | adicione o JSON mcpServers abaixo em ~/.gemini/settings.json |
| Cursor / Windsurf | adicione o JSON mcpServers abaixo via configurações MCP do cliente (mcp.json) |
| Qualquer cliente (HTTP auto-hospedado) | aponte o cliente para https://<your-host>/mcp (HTTP Streamable, protegido por OAuth) |
A publicação pública de imagens OCI foi descontinuada. As tags históricas existentes do registro permanecem intactas; novas implantações de contêineres compilam a partir do código-fonte ou usam o registro gerenciado pelo Cloudflare.
O endpoint HTTP fala HTTP Streamable e é protegido por OAuth — seu cliente é solicitado a autenticar no navegador na primeira conexão (sem necessidade de colar chave de API). Implante um via Método 3 ou na seção Implantar no Cloudflare.
Matrizes de configuração completas estão no site de documentação canônico mcp.n24q02m.com/servers/wet/setup/ e os trechos para colar no agente em claude-plugins/plugins/wet/setup-with-agent.md (conforme Spec F, fonte única de verdade).
Uso com auto-hospedagem
Duas maneiras suportadas de executar o servidor HTTP sempre em escuta. Em ambas, o endpoint
MCP é http://127.0.0.1:8000/mcp (HTTP Streamable) e a raiz de configuração
é ~/.wet/ (config.toml, docs.db, subs/). Nunca execute o servidor como um
subprocesso gerado por um cliente — registre o endpoint no seu cliente.
Desenvolvimento (uv, loopback sem autenticação)
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 recusa binds fora do loopback — o servidor é somente localhost até você
alternar para autenticação por token.
Sempre ativo (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
O Compose publica 127.0.0.1:${WET_PORT:-8000} → contêiner 8000 (somente
loopback) e monta docker-config/config.toml somente leitura em
/home/appuser/.wet/config.toml. Dados persistentes (docs.db, subs/) ficam no
volume nomeado wet-home; o diretório de download/cache em wet-data. Editar a
configuração tem efeito em docker compose restart.
Consumidores
# 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
Configuração: modelos locais vs. nuvem
As células [models.embed|rerank|chat|jev_score] em ~/.wet/config.toml são
por tarefa (cada uma com seu próprio base_url + api_key + model, especificação OpenAI). O
exemplo inclui exemplos do OpenRouter; qualquer endpoint compatível com OpenAI funciona —
nuvem ou um servidor local como Ollama (base_url = "http://host.docker.internal:11434/v1" do contêiner). As chaves no arquivo
são material somente do host; alternativamente, deixe api_key = "" e injete na inicialização
via HULL_EMBED_API_KEY / HULL_RERANK_API_KEY / HULL_CHAT_API_KEY /
HULL_JEV_SCORE_API_KEY.
Configuração
wet funciona com zero configuração imediatamente: a busca na web usa um SearXNG local incorporado,
e a incorporação/reclassificação recorre aos modelos ONNX locais incluídos via
fastretrieval quando nenhuma chave de nuvem está definida. Para resultados de maior qualidade, configure
as células de provedor por tarefa em ~/.wet/config.toml. As configurações operacionais são
variáveis de ambiente simples (sem prefixo de aplicativo) — no modo auto-hospedado HTTP, elas
são inseridas pelo formulário de configuração do navegador.
Células de provedor — [models.embed|rerank|chat|jev_score] cada uma aceita seu próprio
base_url + api_key + model (especificação OpenAI). OpenRouter é o padrão pré-configurado
para cada célula; qualquer endpoint compatível com OpenAI funciona. As chaves das células podem ser
deixadas vazias no arquivo e injetadas na inicialização via HULL_EMBED_API_KEY /
HULL_RERANK_API_KEY / HULL_CHAT_API_KEY / HULL_JEV_SCORE_API_KEY. Quando uma
célula mantém o padrão OpenRouter base_url, OPENROUTER_API_KEY no
ambiente a atende como credencial de último recurso — uma chave OpenRouter pode
alimentar todas as tarefas. Células de incorporação/reclassificação vazias recorrem aos modelos ONNX locais;
uma célula de chat sem chave desativa recursos de LLM (por exemplo, extract(action="agent")).
FASTRETRIEVAL_CACHE_PATH controla o cache de modelos locais.
Backends de busca — SEARCH_BACKENDS é uma cadeia de fallback em tempo de execução ordenada:
searxng (padrão, local ou externo via SEARXNG_URL), com chave tavily / brave /
exa / kagi / openrouter, firecrawl com chave opcional e duckduckgo /
startpage sem credenciais. Provedores com chave usam TAVILY_API_KEY, BRAVE_API_KEY, EXA_API_KEY,
KAGI_API_KEY ou OPENROUTER_API_KEY (separados por vírgula para rotação). O
backend openrouter executa a consulta por meio de uma conclusão de chat com a
ferramenta de servidor openrouter:web_search e mapeia as anotações url_citation
retornadas para a forma de resultado compartilhada; OPENROUTER_MODEL (padrão um
modelo de nível gratuito), OPENROUTER_BASE_URL e OPENROUTER_SEARCH_ENGINE
substituem seu comportamento. O Firecrawl tenta uma solicitação sem chave quando FIRECRAWL_API_KEY
está ausente; rejeição ou um desafio de bot DuckDuckGo/Startpage avança a cadeia.
O re-ranking de resultados usa a célula de re-rank configurada ([models.rerank] — nuvem via
OpenRouter por padrão, ou ONNX local quando sem chave); a mesma cadeia serve busca
web, pesquisa, busca de páginas similares, busca de agente e fallbacks de
descoberta/indexação de docs. O SearXNG mantém seu filtro de categoria de ciência
para pesquisa; outros provedores usam suas próprias capacidades de busca.
Usuários hospedados configuram a cadeia e as chaves em seu próprio registro de relay. Um
registro hospedado vazio nunca herda a chave de provedor do operador ou a URL local do SearXNG;
stdio de usuário único ainda usa env/settings e preserva o caminho público local.
Backends de renderização de navegador -- BROWSER_BACKENDS (CSV, cadeia de escalonamento) escolhe
a etapa de renderização headless de extract: native (chromium em processo, o
padrão de zero configuração), browserless (serviço de render auto-hospedado — defina
BROWSERLESS_URL + BROWSERLESS_TOKEN) e cf-browser-rendering (Cloudflare
Browser Rendering — defina CF_ACCOUNT_ID + CF_BROWSER_RENDERING_TOKEN). Cadeia
vazia cai para native. Defina CAPSOLVER_API_KEY para anexar uma camada
CAPTCHA opcional, protegida por chave, como a última etapa de escalonamento.
Política de robots -- defina RESPECT_ROBOTS_TXT=true para aplicar robots.txt
em toda a cadeia de estratégia extract e nas ações crawl,
sitemap e list_media baseadas em Crawl4AI. O padrão é false para preservar o
comportamento de implantação existente; configure esta política de nível de processo explicitamente quando o
operador exigir a aplicação de robots.
Camada invisível + identidade semeada (opt-in) -- anexe invisible a
BROWSER_BACKENDS para adicionar uma camada de mecanismo stealth-Firefox como a última etapa
de escalonamento (extra hull-core[invisible]: pip install "wet-mcp[invisible]"). Uma
identidade de navegador coerente abrange toda a cadeia: semeie-a com WET_IDENTITY_SEED
(ou deixe o wet derivar uma vez e persistir sob ~/.wet/subs/<sub>/identity.json)
e instale o extra wet[identity]. Sem os extras, a cadeia mantém o
comportamento legado (aviso único). STEALTHFOX_BINARY aponta para uma compilação
Firefox corrigida para pular o download do mecanismo; IDENTITY_PROFILE_DIR (padrão
~/.wet/subs/<sub>/profiles) mantém perfis de navegador persistentes por namespace.
Desabilitar fallbacks locais -- opte por não usar os fallbacks locais pesados em processo
por capacidade (por exemplo, em um contêiner enxuto que renderiza/busca/incorpora apenas via
backends de nuvem): DISABLE_LOCAL_BROWSER, DISABLE_LOCAL_SEARCH,
DISABLE_LOCAL_EMBED, DISABLE_LOCAL_RERANK.
Sincronização de docs -- SYNC_ENABLED (padrão true), GOOGLE_DRIVE_CLIENT_ID
(obrigatório para sincronização), SYNC_FOLDER (padrão wet), SYNC_INTERVAL (padrão
300s). A sincronização usa o Google Drive pelo fluxo OAuth Device Code (sem redirecionamento
de navegador).
DOCS_DB_BACKEND=cf-d1 desabilita a sincronização de arquivos GDrive/S3, incluindo inicialização
automática, assistente de relay e configuração de device-code, mesmo que configurações de sincronização legadas permaneçam.
Implantações SQLite não-CF mantêm a sincronização GDrive; SYNC_S3_BUCKET seleciona S3
em vez disso, e SYNC_ENABLED=false desabilita ambos.
Auto-hospedagem HTTP -- MCP_TRANSPORT=http, PUBLIC_URL=<your-domain>. O formulário
de configuração é protegido por MCP_RELAY_PASSWORD; implantações multiusuário exigem
CREDENTIAL_SECRET (chave de cofre por usuário), MCP_JWT_SIGNING_SECRET (chave
OAuth JWT rotacionável) e MCP_DCR_SERVER_SECRET.
Exemplo de configuração stdio (uma chave OpenRouter alimenta cada célula de provedor):
{
"mcpServers": {
"wet": {
"command": "uvx",
"args": ["wet-mcp"],
"env": {
"OPENROUTER_API_KEY": "sk-or-xxx"
}
}
}
}
Para usar um endpoint ou modelo diferente por tarefa, edite as células [models.*] em
~/.wet/config.toml, ou injete HULL_EMBED_API_KEY / HULL_RERANK_API_KEY /
HULL_CHAT_API_KEY / HULL_JEV_SCORE_API_KEY na inicialização em vez de armazenar chaves
no arquivo.
Status
Arquitetura estável com dois transportes: stdio (padrão, local) e
HTTP (auto-hospedado, protegido por OAuth). Sem camada de bridge daemon e sem auto-spawn
a partir do stdio. A ação media.analyze foi removida na versão BREAKING
v2.0.0 — veja docs/migration.md para a receita
de atualização. Linha de versão atual: v3.x.
Documentação
Documentação completa em mcp.n24q02m.com/servers/wet/setup/:
- Setup — métodos de instalação para Claude Code, Codex, Gemini CLI, Cursor, Windsurf, mcp.json
- Visão geral dos modos — stdio / local-relay / remote-relay / remote-oauth
- Configuração multiusuário — modelo de credencial por JWT-sub
Referências no repositório (fonte única de verdade da Spec F: docs de setup vivem em claude-plugins/plugins/wet/):
docs/ARCHITECTURE.md— integração web-core ScrapingAgent, cadeia de estratégia, layout de armazenamento, despacho de provedor LLMdocs/BENCHMARKS.md— cobertura de linha de base v1.x / placeholders de latência + métricas de fixture de nível 1
Instalar com agente de IA — cole isto no seu agente de codificação de IA:
Instale o servidor MCP
wetseguindo os passos em https://raw.githubusercontent.com/n24q02m/claude-plugins/main/plugins/wet/setup-with-agent.md
Ferramentas
6 ferramentas MCP (3 de domínio + config + help + config__open_relay). A ferramenta legada
setup foi mesclada no despacho de ação config.
| Ferramenta | Descrição |
|---|---|
search | Web (metapesquisa SearXNG), notícias, imagens, pesquisa acadêmica (Scholar / arXiv / PubMed / CrossRef / Semantic Scholar / BASE), docs de biblioteca (HyDE + FTS5), encontrar páginas similares. Inclui docs_resolve (nome da biblioteca -> id classificado), docs_query (ciente de versão + tópico + limite de 5000 tokens), docs_lock_project (fixação de projeto Cabinets via detecção de manifesto pyproject / package.json / go.mod / Cargo.toml). |
extract | URL -> dicionário de chunks inteligentes (clean_text + markdown + structured_data + code_blocks + metadata) via cadeia de 5 estratégias web-core. Processamento em lote (até 50 URLs), rastreamento profundo, mapeamento de site, conversão de arquivos locais (PDF/DOCX/XLSX/PPTX/EPUB), extração estruturada (JSON Schema) |
media | list (descobrir URLs de páginas de galeria), download (seguro contra SSRF). analyze foi removido na v2.0.0 — use imagine-mcp.understand em vez disso |
config | status, set, cache_clear, docs_reindex, warmup, setup_sync, setup_status, setup_skip, setup_reset, setup_complete |
help | Documentação por ferramenta: search, extract, media, config |
config__open_relay | Re-dispara o fluxo de configuração de relay zero-config (imprime uma nova URL de relay para o formulário do navegador). Registrado via mcp-core's register_open_relay_tool para que um LLM possa reiniciar a configuração sem reinicialização manual. |
Limite de mídia: Para compreensão de visão / áudio (legenda de imagem, OCR, transcrição de áudio, resumo de vídeo), use imagine-mcp.
media.analyzefoi removido no wet v2.0.0 — useimagine-mcp.understandem vez disso.
CLI
O pacote instala dois scripts de console: wet (principal) e wet-mcp
(alias legado mantido para que as configurações uvx wet-mcp existentes continuem funcionando). Uma invocação
simples (ou qualquer flag com hífen inicial) inicia o servidor; um argumento posicional
inicial é despachado como um subcomando.
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 aceita um cliente OAuth opcional trazido pelo usuário via --client-id
e --client-secret (usuário único / máquina local apenas; o token é gravado no
armazenamento local). Cada subcomando imprime um resultado JSON e sai.
| Capacidade | wet | Brave Search | Tavily | Firecrawl | Context7 |
|---|---|---|---|---|---|
| Busca web | Sim (agregação SearXNG) | Sim | Sim | Não | Não |
| Extrair URL | Sim (cadeia de 5 estratégias) | Não | Sim (básico) | Sim | Não |
| Listar / baixar mídia | Sim | Não | Não | Não | Não |
| Busca de docs de biblioteca | Sim (Nível 1 curado + Nível 2 sob demanda, ciente de versão, Cabinets) | Não | Não | Não | Sim |
| Pesquisa acadêmica | Sim (6 provedores) | Não | Não | Não | Não |
| Auto-hospedável | Sim | Não | Não | Não | Sim |
| Nível gratuito | Sim (código aberto) | Limitado | Limitado | Limitado | Sim |
Segurança
- Prevenção de SSRF — validação de URL em alvos de rastreamento
- Fallbacks graciosos — Cloud → Incorporação local, rastreamento em múltiplas camadas
- Sanitização de erros — Sem credenciais em mensagens de erro
- Sandbox de conversão de arquivos — Restrição opcional
CONVERT_ALLOWED_DIRS
Compilar a partir do código-fonte
git clone https://github.com/n24q02m/wet.git
cd wet
uv sync
uv run wet
Implantar no Cloudflare
Execute sua própria instância wet de usuário único sem servidor no Cloudflare (Containers + D1 + Vectorize + KV).
Pré-requisitos: uma conta Cloudflare no plano Workers Paid — obrigatório para Containers, D1 e Vectorize (o nível gratuito do Cloudflare não os inclui) — e o CLI wrangler.
git clone https://github.com/n24q02m/wet && cd wetwrangler login- Provisione recursos e aplique o esquema D1:
Cole os IDs retornados emwrangler 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. - Compile a imagem HTTP enxuta a partir deste checkout e envie-a diretamente para
o registro gerenciado do Cloudflare (CF Containers não pode puxar de registros
externos):
docker build --target http --build-arg SLIM=1 -t wet:beta . wrangler containers push wet:beta # prints registry.cloudflare.com/<ACCOUNT_ID>/wet:beta - Defina os segredos de auth/armazenamento do operador e 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 deploye conclua a configuração no formulário de relay do navegador no domínio do seu Worker.
O armazenamento mapeia para o Cloudflare via MCP_STORAGE_BACKEND=cf-kv (credenciais/tokens, criptografados),
DOCS_DB_BACKEND=cf-d1 (docs + texto completo BM25) e Vectorize (embeddings). O
renderizador headless padrão é BROWSER_BACKENDS=cf-browser-rendering. Fallbacks
ONNX locais são desabilitados na imagem enxuta; configure busca e recuperação
em nuvem através do registro de relay de cada sujeito autenticado. Cadeias de
busca/modelo e chaves de provedor em todo o Worker não são encaminhadas para o contêiner.
As células [models.*] por tarefa (em config.toml) configuram embed/rerank/chat
em nuvem: aponte o base_url de cada célula para qualquer endpoint compatível
com OpenAI — OpenRouter é o padrão — e forneça a chave via api_key da célula
ou o env HULL_<TASK>_API_KEY correspondente. Um OPENROUTER_API_KEY
atende a cada célula que mantém o padrão OpenRouter base_url.
Armazene credenciais de provedor de busca com chave (como TAVILY_API_KEY) no mesmo
registro de sujeito. Provisione Vectorize e EMBEDDING_DIMS para uma dimensão
suportada pelo modelo de embedding selecionado.
Implantação (instância mantida)
Cada release marcado é implantado automaticamente (apenas enquanto o gate CF_DEPLOY_ENABLED
estiver ativo — veja a nota de pausa abaixo): o job de CD deploy-cf verifica
o tag do release, compila a imagem http-slim, envia-a para o registro gerenciado
pelo Cloudflare como :<release-tag> imutável, implanta o Worker e faz gate em uma verificação
de saúde canary — um release está ativo exatamente na sua própria versão. Um dispatch beta
reimplanta o beta; um dispatch estável é controlado pelo mantenedor. wrangler deploy manual
contra a instância mantida não é permitido: quebraria a correspondência
release-tag ↔ imagem-viva. Auto-hospedagem na sua própria conta Cloudflare
(o botão acima) não é afetada.
Pausado em 2026-09-13: o token de deploy CF foi removido da conta como fora do manifesto (violação de processo), então
deploy-cfagora não faz nada atrás da variável de repositórioCF_DEPLOY_ENABLED. A instância mantida permanece congelada em seu último release implantado até que um token seja restabelecido via o processo documentado e a variável seja definida comotrue.
Smithery
wet inclui um smithery.yaml para que possa ser instalado e executado
através do Smithery. O manifesto declara um comando de início stdio
(uvx --python 3.13 wet-mcp) com um esquema de configuração vazio — nenhuma configuração é
necessária para iniciar, e provedores e credenciais são configurados em tempo de execução via
o fluxo de configuração do próprio servidor (veja Configuration).
Modelo de Confiança
Este plugin implementa TC-Local (vinculado à máquina, principal de confiança único). Veja modelo de confiança mcp-core para classificação completa.
| Modo | Armazenamento | Criptografia | Quem pode ler seus dados? |
|---|---|---|---|
| stdio (padrão) | ~/.wet/config.json | AES-GCM, chave vinculada à máquina | Apenas seu usuário do SO (permissão de arquivo 0600) |
| HTTP auto-hospedado | Igual ao stdio | Igual | Apenas você (admin = usuário) |
Licença
Apache-2.0 — Veja LICENSE.