Skip to main content
Glama
camoufox-research

camoufox-research

by aidvizhhub

Camoufox Research

Kit de investigación en navegador para agentes de IA, expuesto a través de MCP.

Busca en la web. Lee páginas con mucho JavaScript. Interactúa con sitios web. Extrae datos. Supervisa cambios. Dale a tu agente de IA un navegador real.

Python CI MCP Camoufox Version

    AI Agent
       │  (tools, resources, prompts)
       ▼
      MCP
       │
       ▼
Camoufox Research   ← this server (48 tools)
       │
       ▼
   Camoufox          ← anti-detect Firefox
       │
       ▼
      Web

La mayoría de los servidores MCP pueden leer la web. Este puede vivir en ella: abrir páginas, hacer clic, escribir, rellenar formularios, subir archivos, observar el tráfico de red, tomar capturas de pantalla etiquetadas, rastrear sitios completos, extraer tablas, supervisar cambios — y entregar todo eso a tu agente a través de MCP (stdio, HTTP o SSE).


¿Por qué Camoufox Research?

La mayoría de las herramientas de navegador MCP dan al agente acciones aisladas. Aquí el objetivo es diferente: un kit completo para investigación web — un servidor que tu agente puede usar de principio a fin.

  • 🔎 Buscar — encuentra fuentes (DuckDuckGo mediante navegador anti-detección, research profundo con más de 10 fuentes)

  • 🌐 Navegar — lee páginas JS/SPA, sesiones en vivo con pestañas, clics, formularios, subidas

  • 👁️ Entender páginas — capturas etiquetadas (Set-of-Mark), árboles de instantáneas con referencias

  • 📊 Extraer y exportar — campos por CSS/XPath, tablas → CSV, PDF/DOCX/XLSX, archivos JSON/Markdown

Related MCP server: camofox-browser-mcp

⚡ Demo de 30 segundos

"Encuentra todas las páginas de precios de este sitio web, extrae los precios y guárdalos en CSV."

Agent
 ├─ map_site     discover every /pricing page
 ├─ crawl        read them (cached)
 ├─ extract      {"plan": "css:.plan", "price": "css:.price"}
 └─ export       format=csv  →  prices.csv

Sin código de automatización de navegador. Solo una frase para tu agente.

Qué hace (escenarios reales)

🔎 Investigación — "Encuentra información sobre este proyecto, revisa 10 fuentes y resume." research → fetch_page → export

🕷 Rastreo — "Recorre todo el sitio y encuentra todas las páginas de documentación." sitemap → crawl / map_site

📊 Extracción — "Recoge los precios de la tabla y guárdalos como CSV." extract / table_extract → export

👁 Visión — "Mira la página, encuentra el botón Descargar y presiónalo." screenshot(som=True) → snapshot → session_click(ref="4")

📡 Supervisión — "Revisa esta página y dime si ha cambiado." fetch_page → page_diff (lectura delta ahorra tokens)

Un escenario completo (demo estrella)

git clone https://github.com/aidvizhhub/camoufox-research.git && cd camoufox-research
python3 -m venv ~/.venvs/camoufox-research
~/.venvs/camoufox-research/bin/pip install .
~/.venvs/camoufox-research/bin/python -m camoufox fetch   # download browser (once)

Luego pregunta a tu agente:

"Encuentra los artículos más recientes sobre Camoufox, compáralos y guarda el resultado en Markdown."

Agent
 ├─ web_search        "camoufox browser"
 ├─ research          10+ sources, dedup
 ├─ fetch_page        read the best articles
 ├─ extract           title / date / key points per source
 ├─ page_diff         skip unchanged pages
 └─ export            format=md  →  report.md

Ese es el punto: tu agente maneja un navegador real, tú solo describes el objetivo.

¿Necesitas una herramienta? Empieza aquí

Lo que necesitas

Herramienta

Encontrar información

web_search

Leer una página (incluso JS/SPA)

fetch_page

Leer muchas páginas a la vez

batch_fetch

Recorrer un sitio completo

crawl / sitemap

Obtener campos específicos (CSS o XPath)

extract

Tablas → CSV

table_extract

Hacer clic / escribir / pulsar teclas

browser_click, session_click, session_type, session_key_press

Entender la interfaz

screenshot(som=True), snapshot (refs)

Rellenar un formulario en una llamada

session_form_fill

Subir un archivo

session_upload

Descargar un archivo

session_download

Observar red / consola JS

session_network, session_console

Seguimiento de cambios

page_diff, fetch_page(delta=True)

Leer PDF / DOCX / XLSX

read_document

Fuentes RSS / sitemap

rss

Comprobar enlaces rotos

check_links

Guardar resultados en disco

export (json / csv / md)

Mantener sesiones iniciadas

profile_save / profile_load

Cambiar proxy sobre la marcha

set_proxy

Ver lo que hizo el servidor

stats (auditoría, secretos enmascarados)

Visión — páginas con números

Demo de visión: página → superposición numerada Set-of-Mark

Screenshot        snapshot          agent
   │                  │               │
   ▼                  ▼               ▼
┌──────────┐    - ref: 3       session_click(ref="3")
│ [1][2][3]│    - tag: a   ───► browser clicks exact element
│ [4] [5]  │    - text: "Download"
└──────────┘

snapshot devuelve un árbol YAML compacto de elementos interactivos (~2–5 KB en lugar de más de 100 KB de HTML) con un ref en cada uno. Haz clic por ref, sin selectores frágiles.

Inicio rápido

# 1. Install
git clone https://github.com/aidvizhhub/camoufox-research.git && cd camoufox-research
python3 -m venv ~/.venvs/camoufox-research
~/.venvs/camoufox-research/bin/pip install .

# 2. Download the browser (once)
~/.venvs/camoufox-research/bin/python -m camoufox fetch
  1. Conéctate a tu cliente MCP (OpenCode / Claude Desktop / Cursor) — consulta Conectar a MCP.

  2. Pide a tu agente que investigue un sitio web:

"Encuentra los artículos más recientes sobre Camoufox, compáralos y guarda el resultado en Markdown."

Instalación

git clone https://github.com/aidvizhhub/camoufox-research.git
cd camoufox-research

# 1. venv + package
python3 -m venv ~/.venvs/camoufox-research
~/.venvs/camoufox-research/bin/pip install .

# 2. download the browser (once)
~/.venvs/camoufox-research/bin/python -m camoufox fetch

# 3. smoke check (stdio server, waits on stdin)
~/.venvs/camoufox-research/bin/camoufox-research

Windows: venv\Scripts\pip.exe install ., venv\Scripts\python.exe -m camoufox fetch; necesita Python de python.org (no de MS Store) y VC++ Redistributable.

Conectar a MCP

opencode (~/.config/opencode/opencode.json):

{
  "mcp": {
    "camoufox": {
      "type": "local",
      "command": ["/path/to/venv/bin/camoufox-research"],
      "enabled": true
    }
  }
}

Claude Desktop, Cursor y otros — ejemplos listos en mcp/config/. No se necesita instalación: python mcp/server.py funciona desde los fuentes.

Comprueba: opencode mcp list → camoufox: connected.

Herramientas (48)

Grupo

Herramientas

Investigación

research (búsqueda profunda + lectura), web_search

Lectura

fetch_page (+ delta), batch_fetch, extract_links, read_document (PDF/DOCX/XLSX)

Estructura

extract (CSS + XPath), crawl (BFS), map_site, sitemap (+.gz, anidado), table_extract

Datos

export (json/csv/md), rss, check_links

Visión

screenshot (+ som=True — Set-of-Mark), snapshot (refs)

Navegador

browser_navigate, browser_click (+ref), browser_type

Sesión en vivo

session_start/navigate/click/type/scroll/links/text/back/status/end, session_tabs, session_wait_for, session_eval, session_key_press, session_select_option, session_resize, session_form_fill, session_upload

Red

session_network, session_console, session_block/session_unblock

Archivos

session_download, page_diff

Observabilidad

stats (auditoría, enmascarado), cache_info

Config. de red

set_proxy, profile_save/profile_load

Servicio

ping

Recursos y avisos MCP

  • Recursos (datos legibles "como archivos"): camoufox://stats, camoufox://cache, camoufox://session, camoufox://info

  • Avisos (recetas listas): research_plan, extract_schema, monitor_page

Transportes

stdio (predeterminado), http, sse:

camoufox-research --transport http --port 8833   # or env CAMOUFOX_PORT

Comportamiento

  • El navegador vive en un proceso de trabajo separado (síncrono, sin interfaz) — el servidor MCP stdio nunca se bloquea.

  • Las páginas JS/SPA se leen sin preparación: sondeo de contenido + desplazamiento + detección de estabilidad; vacío → reintento.

  • Caché: sqlite ~/.cache/camoufox-research/cache.db, TTL 24 h, reintento con retroceso; delta=True omite releer páginas sin cambios.

  • Configuración solo mediante variables de entorno (ver configs/example.env): CAMOUFOX_VENV, CAMOUFOX_CACHE_DIR, tiempos de espera, proxy.

Desarrollo

Ver CONTRIBUTING.md: estructura, cómo añadir una nueva herramienta, ritual de prueba de humo.

CI

GitHub Actions en cada push: instalación en Python 3.10/3.11/3.12, comprobación de importación, prueba de humo MCP stdio (initialize → tools/list → ping). Las pruebas completas del navegador se ejecutan localmente (scripts/update_camoufox.py + prueba de humo manual).

Diario de experiencia

EXPERIENCE.md — lecciones verificadas y minas ("en qué no pisar"): errores de asyncio/serve, 403-vs-urllib, Playwright no seguro para hilos, límites de XPath de ElementTree, y más.

Licencias de dependencias

Available Tools

18 tools
batch_fetchПакетное чтениеA
Read-onlyIdempotent

Открывает НЕСКОЛЬКО URL в одном браузере — для глубокого ресёрча на 30-50 источников одним вызовом вместо серии холодных стартов. Кэш: уже посещённые URL возвращаются мгновенно, без браузера. Rate limit между переходами защищает от капчи. Батч ≥8 URL — параллельно (пул потоков, свой браузер на поток); число воркеров автоопределяется по ресурсам машины (слабый ПК — 1-2, мощный — 3-4), max_parallel — явное ограничение. Возвращает тексты с разделителями '--- URL: ...'. article_only=True — извлечь текст статьи (Trafilatura), без меню и баннеров. Пример: batch_fetch(urls=["https://docs.python.org/3/", "https://opencode.ai/docs/"], max_chars=20000, article_only=True) ХОЧУ ПОЛНОТУ → max_chars=20000..100000 + article_only=True + max_parallel=4; экономия контекста → max_chars=4000 при 30+ URL. Замер 21.09 (8 URL разных доменов, холодный кэш): 4000 → 32 598 симв. за 36.4с (все 8 обрезаны ровно по 4000), 12000 → 96 598 симв. за 30.3с, 20000 → 154 449 симв. за 45.9с — время НЕ растёт от объёма: страница и так читается до потолка кэша (100k), max_chars режет только ОТВЕТ. КОГДА: читать 10-50 URL одним вызовом (глубокий ресёрч после research(queries=[...]) или crawl/map_site). НЕ КОГДА: 1-2 страницы → fetch_page; URL ещё не собраны → research, sitemap, map_site сначала.

NameRequiredDescriptionDefault
urlsYes
max_charsNo
article_onlyNo
max_parallelNo

Output Schema

NameRequiredDescription
resultYes
crawlОбход сайтаA
Read-onlyIdempotent

КОГДА: собрать содержимое САЙТА целиком (BFS по внутренним ссылкам) для синтеза, а не одну страницу. ЧТО: тексты страниц (depth ≤ max_depth, всего ≤ max_pages) с разделителями '--- URL:'; кэш делает повторный обход дешёвым. Идёт долго (десятки переходов) — таймаут MCP-клиента ставь ≥900с. НЕ: нужны только URL → map_site / sitemap; сайт огромный → sitemap + pattern и уже потом crawl нужного раздела; одна страница → fetch_page.

NameRequiredDescriptionDefault
urlYes
patternNo
max_charsNo
max_depthNo
max_pagesNo
article_onlyNo

Output Schema

NameRequiredDescription
resultYes
exportЭкспорт результатаA
Destructive

КОГДА: результат нужен файлом на диске — CSV для таблиц, JSON для автоматизации, MD для отчёта. ЧТО: файл (json/csv/md) по своему path или авто в ~/.cache/camoufox-research/exports/. НЕ: результат идёт в разговор и синтез → отдай текст как есть.

NameRequiredDescriptionDefault
dataYes
pathNo
formatNojson

Output Schema

NameRequiredDescription
resultYes
extractИзвлечение полейA
Read-onlyIdempotent

КОГДА: нужны конкретные поля страницы — при стабильной вёрстке селекторами (CSS/XPath) или из текста через llm=True, когда вёрстка хрупкая и селекторы отваливаются. ЧТО: schema — JSON-объект (можно строкой для совместимости): {"поле": "css:.price"} или {"поле": {"selector": ".price", "attr": "text|href|src"}}; llm=True — {"поле": "подсказка"} и нужен LLM (DeepSeek/Ollama), иначе честный ответ «недоступен». НЕ: нужен сплошной текст → fetch_page / batch_fetch; таблицы → table_extract; не знаешь селектор → сначала snapshot.

NameRequiredDescriptionDefault
llmNo
urlYes
schemaYes

Output Schema

NameRequiredDescription
resultYes
fetch_pageЧтение страницыA
Read-onlyIdempotent

Текст страницы без HTML-мусора (статьи, доки, README). Кэш на сутки. article_only=True — текст статьи (Trafilatura), fallback — весь body. delta=True — delta-чтение: если контент не изменился с прошлого раза, вернёт маркер '[delta: ...]' вместо текста (не тратим токены на повтор). max_chars режет только ОТВЕТ, а не чтение: страница кладётся в кэш целиком (потолок 100k), поэтому повтор с большим max_chars мгновенный и бесплатный по времени (замер 21.09: asyncio-task.html = 46 094 симв. в кэше; 12000 = 26% текста, 40000 = 87%, все ответы 0.0с). КОГДА: прочитать 1 страницу (JS/SPA — тоже) чистым текстом. НЕ КОГДА: страниц 10+ → batch_fetch; нужны поля по схеме → extract; повторное чтение → delta=True; нужен клик/ввод → session_start.

NameRequiredDescriptionDefault
urlYes
deltaNo
max_charsNo
article_onlyNo

Output Schema

NameRequiredDescription
resultYes
map_siteКарта сайтаA
Read-onlyIdempotent

КОГДА: понять структуру сайта — какие разделы и страницы есть, без чтения содержимого. ЧТО: ссылки того же домена со стартовой страницы (до max_links), pattern — фильтр по URL. НЕ: нужны тексты → crawl; есть sitemap.xml → sitemap (полнее и дешевле); одна страница → fetch_page.

NameRequiredDescriptionDefault
urlYes
patternNo
max_linksNo

Output Schema

NameRequiredDescription
resultYes
page_diffДифф страницыA
Read-onlyIdempotent

КОГДА: страницу уже читали, и нужно узнать, что ИЗМЕНИЛОСЬ — цены, доки, новости (мониторинг, второй и далее заходы). ЧТО: дифф свежего чтения с прошлым из кэша, «что поменялось». НЕ: страница читается впервые — сравнивать не с чем, сначала fetch_page; нужна полная текстовая версия → fetch_page.

NameRequiredDescriptionDefault
urlYes
max_charsNo

Output Schema

NameRequiredDescription
resultYes
pingПроверка связиA
Read-onlyIdempotent

Проверка связи: возвращает pong.

Это ПРИКЛАДНОЙ health-тул, а не протокольный ping (его в спеке 2026-07-28 убрали). Имя оставлено публичным контрактом — менять нельзя.

NameRequiredDescriptionDefault

No parameters

Output Schema

NameRequiredDescription
resultYes
read_documentЧтение документаA
Read-onlyIdempotent

КОГДА: нужен документ (PDF/DOCX/XLSX) — отчёт, прайс, спецификация; такие файлы часто попадаются ссылками с сайтов. ЧТО: текст документа; source — URL или локальный путь (pypdf / python-docx / openpyxl, до max_chars). Локальный путь — только из каталога загрузок сервера (туда кладёт session_download); свой путь — вентиль CAMOUFOX_ALLOW_ANY_PATH=1. НЕ: HTML-страница → fetch_page (дешевле); старые .doc/.xls не читаются — сначала libreoffice --convert-to docx/xlsx.

NameRequiredDescriptionDefault
sourceYes
max_charsNo

Output Schema

NameRequiredDescription
resultYes
researchГлубокий ресёрчA
Read-onlyIdempotent

Когда: нужно СЕЙЧАС 10+ источников на тему одним вызовом — глубокий разбор без фонового ожидания. Один факт, новость или точный URL — это web_search. Что: сервер ищет по КАЖДОЙ формулировке (queries), дедуплицирует URL и отдаёт список со сниппетами; fetch_top>0 сразу читает топ-N текстов. Результат кэшируется на сутки.

По умолчанию хватит queries (2-4 формулировки) и fetch_top=3..5. Остальное — тонкая настройка, всё рабочее, но трогать не обязательно: max_chars режет только ответ; max_parallel — воркеры чтения; target_domains=N — цель по РАЗНЫМ доменам (20 = двадцать сайтов, доборка волнами); domains_limit=K — не больше K с одного домена; expand=True — переформулировки («X comparison», «X documentation»); terms_wave=True — вторая волна из редких термов первой (паттерн Open Deep Research); quality_first=True — доки/GitHub/arXiv первыми; fetch_all=True — тексты ВСЕХ отобранных, а не топ-N (30 источников × 12k ≈ 90k токенов); as_json=True — машинный JSON: meta (счётчики, follow-up запросы), sources (title/url/domain/tier/tier_label/snippet), texts, notes (тот же объект в structuredContent, content — прежняя строка); academic=True — вертикальный arXiv + Semantic Scholar канал (tier 0, без ключей); llm_planner=True — LLM-планировщик follow-up (DeepSeek/Ollama, нужен DEEPSEEK_API_KEY или OLLAMA_HOST, иначе пропуск); mode="быстро"|"полно"|"глубоко" (fast/full/deep) — пресет одним словом, трогает только ручки на дефолте (явный аргумент сильнее пресета). Пример глубокого разбора: research(queries=["deep research agents"], target_domains=20, domains_limit=2, expand=True, terms_wave=True, quality_first=True, academic=True, llm_planner=True, fetch_all=True, as_json=True, max_results_per_query=6).

Замер 21.09 (5 источников): fetch_top=0 — 0 текстов и 2 822 симв. за 5.5с; fetch_top=3 + max_chars=12000 — 3 текста и 32 432 симв. за 23.1с. ⏱ Долгий: один вызов идёт до ~15 мин (внутренний таймаут 900с, столько же ставь таймауту MCP-клиента) — ждать ответа, не поллить.

NameRequiredDescriptionDefault
modeNo
expandNo
as_jsonNo
queriesYes
academicNo
fetch_allNo
fetch_topNo
max_charsNo
terms_waveNo
llm_plannerNo
article_onlyNo
max_parallelNo
domains_limitNo
quality_firstNo
target_domainsNo
max_results_per_queryNo

Output Schema

NameRequiredDescription
metaNo
notesNo
textsNo
resultNo
sourcesNo
rssRssA
Read-onlyIdempotent

КОГДА: следить за обновлениями — новости, блог, changelog, релизы (лента отдаёт даты одним вызовом). ЧТО: посты RSS/Atom: title, link, дата (до limit). НЕ: у URL обычная HTML-страница → fetch_page; следить за лентой целиком → crawl/map_site.

NameRequiredDescriptionDefault
urlYes
limitNo

Output Schema

NameRequiredDescription
resultYes
sitemapSitemapA
Read-onlyIdempotent

КОГДА: нужен полный список страниц сайта — фид для crawl или проверка «что вообще есть на домене». ЧТО: URL из sitemap.xml (+ .xml.gz и вложенные sitemapindex), до max_links. НЕ: у сайта нет sitemap → map_site (ссылки со страницы); тексты → crawl.

NameRequiredDescriptionDefault
urlYes
max_linksNo

Output Schema

NameRequiredDescription
resultYes
statsСтатистика вызововA
Read-onlyIdempotent

КОГДА: понять, какие тулы реально работают и что падает — аудит вызовов и отладка клиента. ЧТО: по каждому тулу счётчик вызовов, среднее время, ошибки, плюс последние вызовы (секреты замаскированы). В профилях caps виден ВСЕГДА (ALWAYS_ON); явные CAMOUFOX_TOOLS_ONLY / CAMOUFOX_TOOL_HIDE сильнее и могут его убрать. НЕ: это не метрика «какими тулами пользуются» (её даёт ~/.cache/camoufox-research/tool_usage.json) и не здоровье сервера (его даёт ping).

NameRequiredDescriptionDefault
limitNo

Output Schema

NameRequiredDescription
resultYes
table_extractИзвлечение таблицA
Read-onlyIdempotent

КОГДА: на странице есть — прайсы, характеристики, сравнения. ЧТО: CSV-текст таблиц (до max_tables) по CSS-селектору. НЕ: нужных данных в таблице нет → extract; таблиц нет вовсе → fetch_page; JS-грид на div'ах → extract / snapshot.

NameRequiredDescriptionDefault
urlYes
selectorNotable
max_tablesNo

Output Schema

NameRequiredDescription
resultYes

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 50 tool updatesv0.21.1
    • Changedbatch_fetch1 field changed
      • changedInput schema / properties / max_chars / default
        Previous value: -4000New value: +12000
    • Removedbrowser_click
    • Removedbrowser_navigate
    • Removedbrowser_type
    • Removedcitation_pack
    • Removedcitation_report
    • Changedexport1 field changed
      • addedInput schema / properties / format / enum
        Added value: +[
        +  "json",
        +  "csv",
        +  "md",
        +  "markdown"
        +]
    • Changedextract2 fields changed
      • addedInput schema / properties / schema / anyOf
        Added value: +[
        +  {
        +    "type": "string"
        +  },
        +  {
        +    "additionalProperties": true,
        +    "type": "object"
        +  }
        +]
      • removedInput schema / properties / schema / type
        Removed value: -"string"
    • Changedfetch_page1 field changed
      • changedInput schema / properties / max_chars / default
        Previous value: -6000New value: +12000
    • Changedpaper_search3 fields changed
      • addedInput schema / properties / sources / anyOf
        Added value: +[
        +  {
        +    "items": {
        +      "enum": [
        +        "arxiv",
        +        "semantic",
        +        "crossref",
        +        "wiki"
        +      ],
        +      "type": "string"
        +    },
        +    "type": "array"
        +  },
        +  {
        +    "type": "string"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • changedInput schema / properties / sources / default
        Previous value: -"arxiv,semantic"New value: +null
      • removedInput schema / properties / sources / type
        Removed value: -"string"
    • Removedprofile_load
    • Removedprofile_save
    • Changedresearch10 fields changed
      • changedInput schema / properties / fetch_top / default
        Previous value: -0New value: +3
      • changedInput schema / properties / max_chars / default
        Previous value: -4000New value: +12000
      • addedInput schema / properties / mode
        Added value: +{
        +  "default": "",
        +  "enum": [
        +    "",
        +    "быстро",
        +    "fast",
        +    "quick",
        +    "lite",
        +    "полно",
        +    "full",
        +    "normal",
        +    "глубоко",
        +    "deep",
        +    "max"
        +  ],
        +  "title": "Mode",
        +  "type": "string"
        +}
      • addedOutput schema / properties / meta
        Added value: +{
        +  "type": "object"
        +}
      • addedOutput schema / properties / notes
        Added value: +{
        +  "type": "array"
        +}
      • removedOutput schema / properties / result / title
        Removed value: -"Result"
      • addedOutput schema / properties / sources
        Added value: +{
        +  "type": "array"
        +}
      • addedOutput schema / properties / texts
        Added value: +{
        +  "type": "array"
        +}
      • removedOutput schema / required
        Removed value: -[
        -  "result"
        -]
      • removedOutput schema / title
        Removed value: -"researchOutput"
    • Removedresearch_critic
    • Removedresearch_digest
    • Removedresearch_index
    • Removedresearch_report
    • Removedresearch_resume
    • Removedresearch_start
    • Removedresearch_status
    • Removedscreenshot
    • Removedservice_route
    • Removedsession_back
    • Removedsession_block
    • Removedsession_click
    • Removedsession_console
    • Removedsession_download
    • Removedsession_end
    • Removedsession_eval
    • Removedsession_form_fill
    • Removedsession_key_press
    • Removedsession_links
    • Removedsession_navigate
    • Removedsession_network
    • Removedsession_resize
    • Removedsession_scroll
    • Removedsession_select_option
    • Removedsession_start
    • Removedsession_status
    • Removedsession_tabs
    • Removedsession_text
    • Removedsession_type
    • Removedsession_unblock
    • Removedsession_upload
    • Removedsession_wait_for
    • Removedset_proxy
    • Removedsnapshot
    • Removedtool_hint
    • Removedtool_usage
    • Changedweb_search3 fields changed
      • addedInput schema / properties / engines
        Added value: +{
        +  "anyOf": [
        +    {
        +      "items": {
        +        "type": "string"
        +      },
        +      "type": "array"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "title": "Engines"
        +}
      • addedInput schema / properties / proxy
        Added value: +{
        +  "default": "",
        +  "title": "Proxy",
        +  "type": "string"
        +}
      • addedInput schema / properties / transport
        Added value: +{
        +  "default": "auto",
        +  "enum": [
        +    "auto",
        +    "http",
        +    "browser"
        +  ],
        +  "title": "Transport",
        +  "type": "string"
        +}
  2. 15 tool updatesv0.18.1
    • Addedcitation_pack
    • Addedcitation_report
    • Changedextract1 field changed
      • addedInput schema / properties / llm
        Added value: +{
        +  "default": false,
        +  "title": "Llm",
        +  "type": "boolean"
        +}
    • Addedpaper_search
    • Changedresearch9 fields changed
      • addedInput schema / properties / academic
        Added value: +{
        +  "default": false,
        +  "title": "Academic",
        +  "type": "boolean"
        +}
      • addedInput schema / properties / as_json
        Added value: +{
        +  "default": false,
        +  "title": "As Json",
        +  "type": "boolean"
        +}
      • addedInput schema / properties / domains_limit
        Added value: +{
        +  "default": 0,
        +  "title": "Domains Limit",
        +  "type": "integer"
        +}
      • addedInput schema / properties / expand
        Added value: +{
        +  "default": false,
        +  "title": "Expand",
        +  "type": "boolean"
        +}
      • addedInput schema / properties / fetch_all
        Added value: +{
        +  "default": false,
        +  "title": "Fetch All",
        +  "type": "boolean"
        +}
      • addedInput schema / properties / llm_planner
        Added value: +{
        +  "default": false,
        +  "title": "Llm Planner",
        +  "type": "boolean"
        +}
      • addedInput schema / properties / quality_first
        Added value: +{
        +  "default": false,
        +  "title": "Quality First",
        +  "type": "boolean"
        +}
      • addedInput schema / properties / target_domains
        Added value: +{
        +  "default": 0,
        +  "title": "Target Domains",
        +  "type": "integer"
        +}
      • addedInput schema / properties / terms_wave
        Added value: +{
        +  "default": false,
        +  "title": "Terms Wave",
        +  "type": "boolean"
        +}
    • Addedresearch_critic
    • Addedresearch_digest
    • Addedresearch_index
    • Addedresearch_report
    • Addedresearch_resume
    • Addedresearch_start
    • Addedresearch_status
    • Addedservice_route
    • Addedtool_hint
    • Addedtool_usage
  3. 32 tool updatesv0.2.0
    • Changedbrowser_click1 field changed
      • addedInput schema / properties / ref
        Added value: +{
        +  "default": "",
        +  "title": "Ref",
        +  "type": "string"
        +}
    • Addedcheck_links
    • Addedcrawl
    • Addedexport
    • Addedextract
    • Changedfetch_page1 field changed
      • addedInput schema / properties / delta
        Added value: +{
        +  "default": false,
        +  "title": "Delta",
        +  "type": "boolean"
        +}
    • Addedmap_site
    • Addedpage_diff
    • Addedprofile_load
    • Addedprofile_save
    • Addedread_document
    • Addedrss
    • Addedscreenshot
    • Addedsession_block
    • Changedsession_click1 field changed
      • addedInput schema / properties / ref
        Added value: +{
        +  "default": "",
        +  "title": "Ref",
        +  "type": "string"
        +}
    • Addedsession_console
    • Addedsession_download
    • Addedsession_eval
    • Addedsession_form_fill
    • Addedsession_key_press
    • Addedsession_network
    • Addedsession_resize
    • Addedsession_select_option
    • Addedsession_tabs
    • Addedsession_unblock
    • Addedsession_upload
    • Addedsession_wait_for
    • Addedset_proxy
    • Addedsitemap
    • Addedsnapshot
    • Addedstats
    • Addedtable_extract
  4. 19 tool updatesv0.1.0
    • First observedbatch_fetch
    • First observedbrowser_click
    • First observedbrowser_navigate
    • First observedbrowser_type
    • First observedextract_links
    • First observedfetch_page
    • First observedping
    • First observedresearch
    • First observedsession_back
    • First observedsession_click
    • First observedsession_end
    • First observedsession_links
    • First observedsession_navigate
    • First observedsession_scroll
    • First observedsession_start
    • First observedsession_status
    • First observedsession_text
    • First observedsession_type
    • First observedweb_search

TDQS

A3.8/5.0

Scored across 18 tools

Disambiguation4/5

Most tools target clearly distinct stages of web research: search, fetch, crawl, extract, export, and monitoring. A few adjacent tools exist (fetch_page vs batch_fetch vs crawl; map_site vs sitemap vs extract_links; extract vs table_extract), but their descriptions explicitly clarify WHEN and NOT WHEN to use each.

Naming Consistency4/5

All tool names use consistent snake_case English, with no camelCase or mixed conventions. The set is mostly verb_noun or noun_noun, though a few single nouns/verbs (rss, sitemap, stats, ping, crawl, export) are minor deviations from a strict verb_noun pattern.

Tool Count4/5

18 tools is slightly above the ideal 3-15 range, but most earn their place by covering distinct research/scraping workflows. The set does not feel severely bloated, though a few specialized tools could arguably be consolidated.

Completeness3/5

Core research, fetching, crawling, extraction, document reading, and monitoring are well covered. However, several descriptions reference missing tools such as session_start, session_download, and snapshot, creating dead ends for interactive browsing, downloads, and selector discovery workflows.

Maintenance

ActivityNo data
ResponsivenessSyncing

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    D
    maintenance
    MCP server for controlling a local camofox-browser instance, enabling LLM agents to perform web automation tasks such as navigation, interaction, snapshotting, and content extraction.
    103 npm
    MIT
  • A
    license
    B
    quality
    D
    maintenance
    Browser automation MCP server using Camoufox anti-detect browser with fingerprint spoofing, geolocation/timezone spoofing, and human-like cursor movement.
    14
    1
    Apache 2.0
  • A
    license
    Not graded
    quality
    C
    maintenance
    MCP server for multi-engine web search and web page fetching, supporting parallel search, content extraction, and optional LLM-powered search summarization and deep search.
    5
    MIT