wet-mcp
Búsqueda web, extracción de contenido y descarga de medios
Documentación
WET - Servidor MCP de Web Extended Toolkit
Renombrado (2026-09-13): el repositorio ahora es
wet— primero CLI (comandowet). El paquete de PyPI sigue siendowet(la política de PyPI bloquea el nuevo proyectowet); el servidor MCP es una superficie secundaria: ejecutawetsin subcomando.
mcp-name: io.github.n24q02m/wet
Renombrado: el repositorio, CLI y módulo de Python ahora son
wet. La distribución de PyPI sigue siendowet-mcp(instalapip install wet-mcp/uvx wet-mcp). El servidor MCP sigue disponible: ejecutawetsin subcomando (solo = paso MCP); el alias de consola heredadowet-mcpsigue funcionando.
Servidor MCP de código abierto para agentes de IA: búsqueda web, extracción de contenido y documentación de bibliotecas.
| Fase | Estado | Alcance |
|---|---|---|
| Fase 1 | Enviado | Migración de ScrapingAgent de web-core, salida de fragmentos inteligentes, pulido de búsqueda, medios reducidos |
| Fase 2 | Enviado | Búsqueda de documentación a nivel de Context7: índice de bibliotecas (Nivel 1 + Nivel 2), consultas conscientes de versión con límite de tokens, bloqueo de proyectos (Cabinets) |
| Fase 3 | Enviado | extract.agent investigación multi-paso con síntesis citada, extract.interact clic/rellenar/enviar mediante patchright (persistencia de sesión opcional), migración docs_004_chunk_summaries, media.analyze eliminado (v2.0.0) |
Versión actual: v3.x.
media(action="analyze")se eliminó en la versión v2.0.0 BREAKING. Usaimagine-mcp's acciónunderstandpara análisis de visión/audio/video. Consultadocs/migration.mdpara la receta de actualización.
Proyectos hermanos de n24q02m (clic para expandir)
| Proyecto | Eslogan | Etiqueta |
|---|---|---|
| agent-chat-plugin | Agentes de IA pares chatean en una carpeta compartida — sin relevo humano, sin orquestador, tra... | Herramientas |
| crg | Grafo de conocimiento para revisiones de código eficientes en tokens — búsqueda semántica y llam... | MCP |
| better-drive | Sincronización bidireccional de Google Drive con filtro .driveignore — motor rclone, bandeja de Windows | Herramientas |
| better-email-mcp | Correo IMAP/SMTP para agentes de IA — leer, enviar, organizar carpetas y gestionar archivos adj... | MCP |
| better-godot-mcp | Servidor MCP compuesto para Godot Engine — 17 herramientas compuestas para desarrollo de juegos asistido por IA... | MCP |
| better-notion-mcp | Notion primero en Markdown para agentes de IA — páginas, bases de datos, bloques y comentarios... | MCP |
| better-semantic-release | Bifurcación de python-semantic-release con guardas de seguridad de lanzamiento integradas (orp...) | Herramientas |
| better-telegram-mcp | Telegram para agentes de IA — mensajes, chats, medios y contactos en ambos bo... | MCP |
| better-workspace-mcp | Servidor MCP de Google Workspace (Docs/Drive/Calendar/Gmail/Sheets/Slides/Tasks/Ch...) | MCP |
| claude-plugins | Mercado de plugins de Claude Code para los servidores MCP de n24q02m — instala búsqueda web... | Mercado |
| imagine-mcp | Comprensión y generación de imágenes y videos para agentes de IA — en Gemini, Op... | MCP |
| jules-task-archiver | Extensión de Chrome para operaciones masivas en tareas de Jules mediante la API batchexecute — a... | Herramientas |
| mcp-core | Base compartida para construir servidores MCP — transporte HTTP Streamable, OAut... | MCP |
| mnemo | Memoria persistente de IA con búsqueda híbrida y sincronización integrada. Abierto, gratuito, ilimit... | MCP |
| fastretrieval | Runtime de incrustación y reordenamiento multi-modelo mediante ONNX y GGUF | Biblioteca |
| skret | Secretos sin el servidor. | CLI |
| tacet | Una cascada neuro-simbólica auto-destilante que amortiza el costo de LLM en conocimiento... | Herramientas |
| web-core | Paquete de infraestructura web compartida para búsqueda, scraping, seguridad HTTP y st... | Biblioteca |
| wet | Servidor MCP de código abierto para agentes de IA: búsqueda web, extracción de contenido y lib... | MCP |
Tabla de contenidos
- Características
- Estado
- Instalación rápida
- Uso de auto-alojamiento
- Configuración
- Documentación
- Herramientas
- CLI
- Comparación
- Seguridad
- Compilar desde el código fuente
- Desplegar en Cloudflare
- Smithery
- Modelo de confianza
- Licencia
Características
- Búsqueda web -- Metabúsqueda SearXNG integrada (Google, Bing, DuckDuckGo, Brave) con expansión de consultas, caché TTL (1 h general / 5 min sensible al tiempo), formato de citas estandarizado y límite de fragmentos de 200 tokens. Backends de búsqueda en la nube opcionales (Tavily, Brave, Exa, Kagi, OpenRouter, Firecrawl) como cadena de respaldo mediante
SEARCH_BACKENDS - Investigación académica -- Busca en Google Scholar, Semantic Scholar, arXiv, PubMed, CrossRef, BASE
- Documentación de bibliotecas -- Descubre e indexa automáticamente documentación con búsqueda híbrida FTS5, recuperación mejorada con HyDE y documentación específica por versión
- Extracción de contenido -- Cadena de escalada de 5 estrategias mediante
n24q02m-web-coreScrapingAgent(basic_http->tls_spoof-> backends de renderizado deBROWSER_BACKENDS(native/browserless/cf-browser-rendering) ->captchaopcional con clave), puente markitdown para respaldo HTML/MD de bajo nivel, salida estructurada de fragmentos inteligentes (texto limpio + markdown + JSON-LD + bloques de código + metadatos), procesamiento por lotes (hasta 50 URL), rastreo profundo, mapeo de sitios - Conversión de archivos locales -- Convierte PDF, DOCX, XLSX, CSV, HTML, EPUB, PPTX a Markdown
- Medios -- Lista + descarga de archivos de imágenes / videos / audio.
analyzese eliminó en v2.0.0 -- usaimagine-mcp.understandpara inferencia de visión/audio - Anti-bot -- Estrategias sigilosas evaden Cloudflare, Medium, LinkedIn, Twitter
- Configuración cero -- Incrustación de referencia local integrada + reordenamiento mediante fastretrieval, sin necesidad de claves API. Modelos en la nube opcionales configurados por tarea mediante las celdas
[models.embed|rerank|chat|jev_score]en~/.wet/config.toml(OpenRouter por defecto; unaOPENROUTER_API_KEYsirve a cada celda) - Sincronización -- Sincronización entre máquinas de documentos indexados mediante Google Drive (Código de dispositivo OAuth, sin redirección de navegador)
Instalación 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 instalación (stdio salvo que se indique; consulta la página de Configuración para los pasos completos):
| Cliente | Instalación |
|---|---|
| Claude Code (plugin) | /plugin marketplace add n24q02m/claude-plugins luego /plugin install wet@n24q02m-plugins |
| Claude Code (stdio) | claude mcp add wet -- uvx wet-mcp |
| Codex | registra el comando stdio uvx wet-mcp bajo mcp_servers en ~/.codex/config.toml |
| Gemini CLI | agrega el JSON mcpServers a continuación en ~/.gemini/settings.json |
| Cursor / Windsurf | agrega el JSON mcpServers a continuación mediante la configuración MCP del cliente (mcp.json) |
| Cualquier cliente (HTTP auto-alojado) | apunta el cliente a https://<your-host>/mcp (HTTP Streamable, protegido por OAuth) |
La publicación pública de imágenes OCI está descontinuada. Las etiquetas históricas existentes del registro permanecen intactas; las nuevas implementaciones de contenedores compilan desde el código fuente o usan el registro gestionado por Cloudflare.
El endpoint HTTP habla HTTP Streamable y está protegido por OAuth — tu cliente recibe un aviso para autenticarse en el navegador en la primera conexión (sin necesidad de pegar una clave API). Pon uno en marcha mediante el Método 3 o la sección Desplegar en Cloudflare.
Las matrices de configuración completas viven en el sitio de documentación canónico mcp.n24q02m.com/servers/wet/setup/ y los fragmentos para pegar al agente en claude-plugins/plugins/wet/setup-with-agent.md (según la fuente única de verdad de Spec F).
Uso de auto-alojamiento
Dos formas compatibles de ejecutar el servidor HTTP siempre a la escucha. En ambas, el endpoint
MCP es http://127.0.0.1:8000/mcp (HTTP Streamable) y la raíz de configuración
es ~/.wet/ (config.toml, docs.db, subs/). Nunca ejecutes el servidor como un
subproceso generado de un cliente — registra el endpoint en tu cliente en su lugar.
Desarrollo (uv, bucle local sin autenticación)
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 rechaza enlaces que no sean de bucle local — el servidor es solo localhost hasta que
cambies a autenticación por token.
Siempre activo (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 publica 127.0.0.1:${WET_PORT:-8000} → contenedor 8000 (solo bucle
local) y monta docker-config/config.toml de solo lectura en
/home/appuser/.wet/config.toml. Los datos persistentes (docs.db, subs/) viven en
el volumen nombrado wet-home; el directorio de descarga/caché en wet-data. Editar la
configuración tiene efecto en 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
Configuración: modelos locales vs. en la nube
Las celdas [models.embed|rerank|chat|jev_score] en ~/.wet/config.toml son
por tarea (cada una con su propio base_url + api_key + model, especificación OpenAI). El
ejemplo incluye ejemplos de OpenRouter; cualquier endpoint compatible con OpenAI funciona —
en la nube, o un servidor local como Ollama (base_url = "http://host.docker.internal:11434/v1" desde el contenedor). Las claves en el archivo
son material solo de host; alternativamente deja api_key = "" e inyecta al inicio
mediante HULL_EMBED_API_KEY / HULL_RERANK_API_KEY / HULL_CHAT_API_KEY /
HULL_JEV_SCORE_API_KEY.
Configuración
wet funciona con configuración cero de fábrica: la búsqueda web usa un SearXNG local integrado,
y la incrustación/reordenamiento recurren a los modelos ONNX locales incluidos mediante
fastretrieval cuando no se establecen claves en la nube. Para resultados de mayor calidad, configura
las celdas de proveedor por tarea en ~/.wet/config.toml. Los ajustes operativos son
variables de entorno simples (sin prefijo de aplicación) — en el modo de auto-alojamiento HTTP se
ingresan mediante el formulario de configuración del navegador en su lugar.
Celdas de proveedor -- [models.embed|rerank|chat|jev_score] cada una toma su propio
base_url + api_key + model (especificación OpenAI). OpenRouter es el valor predeterminado preconfigurado
para cada celda; cualquier endpoint compatible con OpenAI funciona. Las claves de celda pueden
dejarse vacías en el archivo e inyectarse al inicio mediante HULL_EMBED_API_KEY /
HULL_RERANK_API_KEY / HULL_CHAT_API_KEY / HULL_JEV_SCORE_API_KEY. Cuando una
celda mantiene el valor predeterminado de OpenRouter base_url, OPENROUTER_API_KEY en el
entorno la sirve como credencial de último recurso — una clave de OpenRouter puede
impulsar cada tarea. Las celdas vacías de incrustación/reordenamiento recurren a los modelos ONNX locales;
una celda de chat sin clave desactiva las funciones de LLM (por ejemplo, extract(action="agent")).
FASTRETRIEVAL_CACHE_PATH controla la caché de modelos locales.
Backends de búsqueda -- SEARCH_BACKENDS es una cadena de respaldo en tiempo de ejecución ordenada:
searxng (predeterminado, local o externo mediante SEARXNG_URL), con clave tavily / brave /
exa / kagi / openrouter, con clave opcional firecrawl, y sin credenciales duckduckgo /
startpage. Los proveedores con clave usan TAVILY_API_KEY, BRAVE_API_KEY, EXA_API_KEY,
KAGI_API_KEY o OPENROUTER_API_KEY (separados por comas para rotación). El
backend openrouter ejecuta la consulta mediante una finalización de chat con la
herramienta de servidor openrouter:web_search y mapea las anotaciones url_citation devueltas
a la forma de resultado compartida; OPENROUTER_MODEL (predeterminado un
modelo de nivel gratuito), OPENROUTER_BASE_URL y OPENROUTER_SEARCH_ENGINE
anulan su comportamiento. Firecrawl intenta una solicitud sin clave cuando FIRECRAWL_API_KEY
está ausente; el rechazo o un desafío de bot de DuckDuckGo/Startpage avanza la cadena.
El reranking de resultados utiliza la celda de rerank configurada ([models.rerank] — en la nube a través de OpenRouter por defecto, o ONNX local cuando no hay clave); la misma cadena sirve para búsqueda web, investigación, búsqueda de páginas similares, búsqueda de agente y respaldos de descubrimiento/indexación de documentación. SearXNG conserva su filtro de categoría científica para investigación; otros proveedores usan sus propias capacidades de búsqueda. Los usuarios alojados configuran la cadena y las claves en su propio registro de relay. Un registro alojado vacío nunca hereda la clave de proveedor del operador ni la URL local de SearXNG; el stdio de un solo usuario aún usa env/configuración y preserva la ruta pública local.
Backends de renderizado de navegador — BROWSER_BACKENDS (CSV, cadena de escalamiento) elige la etapa de renderizado headless de extract: native (chromium en proceso, el predeterminado de cero configuración), browserless (servicio de renderizado autoalojado — configure BROWSERLESS_URL + BROWSERLESS_TOKEN) y cf-browser-rendering (Cloudflare Browser Rendering — configure CF_ACCOUNT_ID + CF_BROWSER_RENDERING_TOKEN). Una cadena vacía cae en native. Configure CAPSOLVER_API_KEY para agregar un nivel CAPTCHA opcional protegido por clave como último paso de escalamiento.
Política de robots — configure RESPECT_ROBOTS_TXT=true para aplicar robots.txt tanto en la cadena de estrategia extract como en las acciones crawl, sitemap y list_media respaldadas por Crawl4AI. El valor predeterminado es false para preservar el comportamiento de despliegue existente; configure esta política a nivel de proceso explícitamente cuando el operador requiera la aplicación de robots.
Nivel invisible + identidad sembrada (opt-in) — agregue invisible a BROWSER_BACKENDS para añadir un nivel de motor Firefox sigiloso como último paso de escalamiento (extra hull-core[invisible]: pip install "wet-mcp[invisible]"). Una identidad de navegador coherente abarca toda la cadena: siémbrela con WET_IDENTITY_SEED (o deje que wet la derive una vez y la persista bajo ~/.wet/subs/<sub>/identity.json) e instale el extra wet[identity]. Sin los extras, la cadena mantiene el comportamiento heredado (advertencia única). STEALTHFOX_BINARY apunta a una compilación de Firefox parcheada para omitir la descarga del motor; IDENTITY_PROFILE_DIR (predeterminado ~/.wet/subs/<sub>/profiles) mantiene perfiles de navegador persistentes por espacio de nombres.
Deshabilitar respaldos locales — opte por no usar los respaldos locales pesados en proceso por capacidad (por ejemplo, en un contenedor delgado que renderiza/busca/incrusta solo a través de backends en la nube): DISABLE_LOCAL_BROWSER, DISABLE_LOCAL_SEARCH, DISABLE_LOCAL_EMBED, DISABLE_LOCAL_RERANK.
Sincronización de documentación — SYNC_ENABLED (predeterminado true), GOOGLE_DRIVE_CLIENT_ID (requerido para sincronizar), SYNC_FOLDER (predeterminado wet), SYNC_INTERVAL (predeterminado 300s). La sincronización usa Google Drive a través del flujo OAuth Device Code (sin redirección de navegador). DOCS_DB_BACKEND=cf-d1 deshabilita la sincronización de archivos GDrive/S3, incluido el inicio automático, el asistente de relay y la configuración de device-code, incluso si quedan configuraciones de sincronización heredadas. Los despliegues SQLite que no son CF conservan la sincronización de GDrive; SYNC_S3_BUCKET selecciona S3 en su lugar, y SYNC_ENABLED=false deshabilita ambos.
Autoalojamiento HTTP — MCP_TRANSPORT=http, PUBLIC_URL=<your-domain>. El formulario de configuración está protegido por MCP_RELAY_PASSWORD; los despliegues multiusuario requieren CREDENTIAL_SECRET (clave de vault por usuario), MCP_JWT_SIGNING_SECRET (clave JWT OAuth rotable) y MCP_DCR_SERVER_SECRET.
Ejemplo de configuración stdio (una clave OpenRouter alimenta cada celda de proveedor):
{
"mcpServers": {
"wet": {
"command": "uvx",
"args": ["wet-mcp"],
"env": {
"OPENROUTER_API_KEY": "sk-or-xxx"
}
}
}
}
Para usar un endpoint o modelo diferente por tarea, edite las celdas [models.*] en ~/.wet/config.toml, o inyecte HULL_EMBED_API_KEY / HULL_RERANK_API_KEY / HULL_CHAT_API_KEY / HULL_JEV_SCORE_API_KEY al inicio en lugar de almacenar claves en el archivo.
Estado
Arquitectura estable con dos transportes: stdio (predeterminado, local) y HTTP (autoalojado, protegido por OAuth). Sin capa de puente daemon y sin auto-generación desde stdio. La acción media.analyze se eliminó en la versión v2.0.0 BREAKING — consulte docs/migration.md para la receta de actualización. Línea de versión actual: v3.x.
Documentación
Documentación completa en mcp.n24q02m.com/servers/wet/setup/:
- Configuración — métodos de instalación para Claude Code, Codex, Gemini CLI, Cursor, Windsurf, mcp.json
- Resumen de modos — stdio / relay local / relay remoto / OAuth remoto
- Configuración multiusuario — modelo de credenciales por JWT-sub
Referencias en el repositorio (fuente única de verdad de Spec F: la documentación de configuración vive en claude-plugins/plugins/wet/):
docs/ARCHITECTURE.md— integración de ScrapingAgent de web-core, cadena de estrategia, diseño de almacenamiento, despacho de proveedores LLMdocs/BENCHMARKS.md— cobertura de línea base v1.x / marcadores de latencia + métricas de fixtures de nivel 1
Instalar con agente de IA — pegue esto a su agente de codificación de IA:
Instale el servidor MCP
wetsiguiendo los pasos en https://raw.githubusercontent.com/n24q02m/claude-plugins/main/plugins/wet/setup-with-agent.md
Herramientas
6 herramientas MCP (3 de dominio + config + help + config__open_relay). La herramienta heredada setup se fusionó en el despacho de acciones config.
| Herramienta | Descripción |
|---|---|
search | Web (metabúsqueda SearXNG), noticias, imágenes, investigación académica (Scholar / arXiv / PubMed / CrossRef / Semantic Scholar / BASE), documentación de biblioteca (HyDE + FTS5), encontrar páginas similares. Incluye docs_resolve (nombre de biblioteca -> id clasificado), docs_query (consciente de versión + tema + límite de 5000 tokens), docs_lock_project (fijación de proyecto Cabinets mediante detección de manifiesto pyproject / package.json / go.mod / Cargo.toml). |
extract | URL -> diccionario de fragmentos inteligentes (clean_text + markdown + structured_data + code_blocks + metadata) a través de la cadena de 5 estrategias de web-core. Procesamiento por lotes (hasta 50 URLs), rastreo profundo, mapeo de sitios, conversión de archivos locales (PDF/DOCX/XLSX/PPTX/EPUB), extracción estructurada (JSON Schema) |
media | list (descubrir URLs desde páginas de galería), download (seguro contra SSRF). analyze se eliminó en v2.0.0 — use imagine-mcp.understand en su lugar |
config | status, set, cache_clear, docs_reindex, warmup, setup_sync, setup_status, setup_skip, setup_reset, setup_complete |
help | Documentación por herramienta: search, extract, media, config |
config__open_relay | Re-disparar el flujo de configuración de relay de cero configuración (imprime una URL de relay nueva para el formulario del navegador). Registrado a través de mcp-core's register_open_relay_tool para que un LLM pueda reiniciar la configuración sin reinicio manual. |
Límite de medios: Para comprensión de visión / audio (subtitulado de imágenes, OCR, transcripción de audio, resumen de video), use imagine-mcp.
media.analyzese eliminó en wet v2.0.0 — useimagine-mcp.understanden su lugar.
CLI
El paquete instala dos scripts de consola: wet (principal) y wet-mcp (alias heredado conservado para que las configuraciones existentes de uvx wet-mcp sigan funcionando). Una invocación simple (o cualquier bandera con guion inicial) inicia el servidor; un argumento posicional inicial se despacha como 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 acepta un cliente OAuth opcional traído por el usuario a través de --client-id y --client-secret (solo máquina local / un solo usuario; el token se escribe en el almacén local). Cada subcomando imprime un resultado JSON y sale.
| Capacidad | wet | Brave Search | Tavily | Firecrawl | Context7 |
|---|---|---|---|---|---|
| Búsqueda web | Sí (agregación SearXNG) | Sí | Sí | No | No |
| Extraer URL | Sí (cadena de 5 estrategias) | No | Sí (básico) | Sí | No |
| Lista / descarga de medios | Sí | No | No | No | No |
| Búsqueda de documentación de biblioteca | Sí (Nivel 1 curado + Nivel 2 bajo demanda, consciente de versión, Cabinets) | No | No | No | Sí |
| Investigación académica | Sí (6 proveedores) | No | No | No | No |
| Autoalojable | Sí | No | No | No | Sí |
| Nivel gratuito | Sí (código abierto) | Limitado | Limitado | Limitado | Sí |
Seguridad
- Prevención de SSRF — validación de URL en objetivos de rastreo
- Respaldos elegantes — Nube → Incrustación local, rastreo de múltiples niveles
- Sanitización de errores — Sin credenciales en mensajes de error
- Aislamiento de conversión de archivos — Restricción opcional de
CONVERT_ALLOWED_DIRS
Compilar desde el Código Fuente
git clone https://github.com/n24q02m/wet.git
cd wet
uv sync
uv run wet
Desplegar en Cloudflare
Ejecute su propia instancia wet de un solo usuario sin servidor en Cloudflare (Containers + D1 + Vectorize + KV).
Requisitos previos: una cuenta de Cloudflare en el plan Workers Paid — requerido para Containers, D1 y Vectorize (el nivel gratuito de Cloudflare no los incluye) — y el CLI wrangler.
git clone https://github.com/n24q02m/wet && cd wetwrangler login- Aprovisione recursos y aplique el esquema D1:
Pegue los IDs devueltos enwrangler 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 la imagen HTTP delgada desde este checkout y empújela directamente al registro administrado de Cloudflare (CF Containers no puede extraer 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 - Configure los secretos de autenticación/almacenamiento del operador y 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 deployy complete la configuración en el formulario de relay del navegador en su dominio de Worker.
El almacenamiento se asigna a Cloudflare a través de MCP_STORAGE_BACKEND=cf-kv (credenciales/tokens, cifrados), DOCS_DB_BACKEND=cf-d1 (documentos + texto completo BM25) y Vectorize (incrustaciones). El renderizador headless predeterminado es BROWSER_BACKENDS=cf-browser-rendering. Los respaldos ONNX locales están deshabilitados en la imagen delgada; configure la búsqueda y la recuperación en la nube a través del registro de relay de cada sujeto autenticado. Las cadenas de búsqueda/modelo a nivel de Worker y las claves de proveedor no se reenvían al contenedor.
Las celdas [models.*] por tarea (en config.toml) configuran embed/rerank/chat en la nube: apunte el base_url de cada celda a cualquier endpoint compatible con OpenAI — OpenRouter es el predeterminado — y proporcione la clave a través del api_key de la celda o el env HULL_<TASK>_API_KEY correspondiente. Un OPENROUTER_API_KEY sirve a cada celda que mantiene el predeterminado OpenRouter base_url. Almacene credenciales de proveedores de búsqueda con clave (como TAVILY_API_KEY) en el mismo registro de sujeto. Aprovisione Vectorize y EMBEDDING_DIMS para una dimensión compatible con el modelo de incrustación seleccionado.
Despliegue (instancia mantenida)
Cada versión etiquetada se despliega automáticamente (solo mientras la compuerta CF_DEPLOY_ENABLED esté activada — consulte la nota de pausa a continuación): el trabajo de CD deploy-cf verifica la etiqueta publicada, compila la imagen http-slim, la empuja al registro administrado por Cloudflare como :<release-tag> inmutable, despliega el Worker y se bloquea en una verificación de salud canary — una versión está activa exactamente en su propia versión. Un despacho beta redespliega la beta; un despacho estable está controlado por el mantenedor. El wrangler deploy manual contra la instancia mantenida no está permitido: rompería la correspondencia etiqueta de versión ↔ imagen activa. El autoalojamiento en su propia cuenta de Cloudflare (el botón anterior) no se ve afectado.
Pausado 2026-09-13: el token de despliegue de CF se eliminó de la cuenta como fuera de manifiesto (violación de proceso), por lo que
deploy-cfahora no hace nada detrás de la variable de repositorioCF_DEPLOY_ENABLED. La instancia mantenida permanece congelada en su última versión desplegada hasta que se restablezca un token a través del proceso documentado y la variable se establezca entrue.
Smithery
wet incluye un smithery.yaml para que pueda instalarse y ejecutarse a través de Smithery. El manifiesto declara un comando de inicio stdio (uvx --python 3.13 wet-mcp) con un esquema de configuración vacío — no se requiere configuración para iniciar, y los proveedores y credenciales se configuran en tiempo de ejecución a través del flujo de configuración del propio servidor (consulte Configuración).
Modelo de Confianza
Este plugin implementa TC-Local (vinculado a la máquina, principal de confianza único). Consulte modelo de confianza de mcp-core para la clasificación completa.
| Modo | Almacenamiento | Cifrado | ¿Quién puede leer sus datos? |
|---|---|---|---|
| stdio (predeterminado) | ~/.wet/config.json | AES-GCM, clave vinculada a la máquina | Solo su usuario de SO (permiso de archivo 0600) |
| HTTP autoalojado | Igual que stdio | Igual | Solo usted (admin = usuario) |
Licencia
Apache-2.0 — Consulte LICENSE.