Skip to main content
Glama
wxs-lang

webscout-mcp

by wxs-lang

webscout-mcp

Инструменты веб-поиска и загрузки страниц для ИИ-агентов в виде MCP-сервера. Поиск, загрузка, обход сайтов и извлечение структурированных данных из интернета — без API-ключей, без платы за каждый запрос, всё остаётся на вашей машине.

Установка

pip install webscout-mcp

Требуется Python 3.10+.

Related MCP server: Crawl4AI RAG MCP Server

Быстрый старт

Добавьте в конфигурацию вашего MCP-клиента (Claude Code, Cursor, Codex и т.д.):

{
  "mcpServers": {
    "webscout": {
      "command": "webscout-mcp",
      "args": []
    }
  }
}

Вот и всё. Ваш агент получает шесть инструментов:

  • web_search — поиск через Bing с автоматическим переходом на HTML-версию DuckDuckGo, ключ не нужен

  • web_fetch — загрузка страницы и извлечение основной статьи (markdown/text/html)

  • web_crawl — параллельный обход BFS с ограничениями по глубине и количеству страниц, учитывает robots.txt

  • web_extract — извлечение структурированных данных с помощью CSS-селекторов, атрибутов и регулярных выражений

  • cache_stats — просмотр локального кэша

  • cache_clear — очистка кэша

Использование CLI

Помимо работы в качестве MCP-сервера, webscout-mcp можно использовать напрямую из командной строки:

# Search the web (outputs JSON)
webscout-mcp search "python async libraries" --max-results 5

# Fetch a page (raw content)
webscout-mcp fetch https://example.com --extract --format markdown --raw

# Crawl a site
webscout-mcp crawl https://example.com --depth 2 --pages 10

# Start MCP server (default if no command given)
webscout-mcp serve --transport stdio

Примеры использования

Поиск

web_search(query="best python async libraries", max_results=5)

Возвращает структурированные результаты с заголовком, URL, сниппетом и указанием бэкенда, обработавшего запрос (bing или duckduckgo). Если Bing не срабатывает или меняет свою разметку, движок автоматически переключается на HTML-версию DuckDuckGo — никакой настройки не требуется.

Загрузка страницы

web_fetch(url="https://example.com", extract=true, output_format="markdown")

extract=true запускает trafilatura (с автоматическим запасным вариантом на readability-lxml), чтобы убрать навигацию, рекламу и боковые панели — вы получаете чистое содержимое статьи, а не сырой HTML.

Извлечение структурированных данных

web_extract(
  url="https://example.com/products",
  rules='[
    {"name": "titles", "selector": ".product h2", "multiple": true},
    {"name": "prices", "selector": ".price", "regex": "\\$([\\d.]+)", "multiple": true},
    {"name": "links", "selector": "a.product", "attribute": "href", "multiple": true}
  ]'
)

Каждое правило поддерживает selector, attribute, multiple, regex и default.

Обход сайта

web_crawl(seed_url="https://example.com", max_depth=2, max_pages=10, concurrency=5)

Страницы каждого уровня глубины загружаются параллельно (управляется параметром concurrency, по умолчанию 5). Краулер по умолчанию учитывает robots.txt — запрещённые URL пропускаются и учитываются в skipped_robots. Ограничение тем же доменом включено по умолчанию.

Использование в качестве Python-библиотеки

import asyncio
from webscout_mcp import Config, Fetcher, SearchEngine

async def main():
    config = Config.from_env()
    config.ensure_dirs()

    fetcher = Fetcher(config)
    result = await fetcher.fetch("https://example.com", extract=True)
    print(result.title)
    print(result.content[:500])
    await fetcher.close()

    search = SearchEngine(config)
    results = await search.search("python async", max_results=5)
    for r in results:
        print(f"{r.position}. {r.title} - {r.url} ({r.backend})")
    await search.close()

asyncio.run(main())

Как это работает

  • Поиск сначала пробует Bing, затем HTML-версию DuckDuckGo — оба через прямой HTTP-скрапинг, без API-ключа. Результаты кэшируются по каждому запросу.

  • Загрузка использует httpx с повторами по экспоненциальной задержке (все ошибки httpx + HTTP 5xx), ограничением скорости запросов по алгоритму token bucket для каждого домена и лимитом 5 МБ на объём контента.

  • Извлечение контента использует trafilatura в качестве основного механизма и readability-lxml как автоматический запасной вариант — те же библиотеки, на которых работают многие сервисы отложенного чтения.

  • Кэширование — это SQLite с TTL и ограничением размера; старые записи удаляются автоматически. Повторные загрузки и поисковые запросы ничего не стоят.

  • Обход сайтов — это параллельный BFS с настраиваемыми глубиной, количеством страниц, степенью параллелизма, ограничением по домену и соблюдением robots.txt. Используется сырой HTML из первоначальной загрузки, чтобы не загружать каждую страницу дважды.

  • Поддержка прокси — маршрутизация всех HTTP/HTTPS-запросов через прокси с помощью конфигурации или переменных окружения.

  • Логирование — структурированное, настраивается через WEBSCOUT_LOG_LEVEL (DEBUG/INFO/WARNING/ERROR); установите WEBSCOUT_LOG_JSON=1 для вывода в формате JSON.

Всё работает локально. Никакие данные не покидают вашу машину.

Конфигурация

Все параметры имеют разумные значения по умолчанию. Их можно переопределить через переменные окружения (префикс WEBSCOUT_), TOML-файл конфигурации или флаги CLI.

Файл конфигурации

Создайте ~/.config/webscout/config.toml (или $XDG_CONFIG_HOME/webscout/config.toml):

[cache]
ttl = 7200
max_size_mb = 512

[fetch]
timeout = 15.0
max_retries = 3

[proxy]
http = "http://proxy:8080"
https = "http://proxy:8080"

[search]
max_results = 10
backends = ["bing", "duckduckgo"]

[crawler]
max_depth = 2
max_pages = 20
concurrency = 5
respect_robots = true

[logging]
level = "WARNING"
json = false

Переменные окружения имеют приоритет над значениями из файла конфигурации.

Переменные окружения

Переменная

По умолчанию

Назначение

WEBSCOUT_CACHE_DIR

~/.cache/webscout

Где хранится кэш SQLite

WEBSCOUT_CACHE_TTL

7200

Время жизни записи кэша в секундах

WEBSCOUT_CACHE_MAX_SIZE_MB

512

Максимальный размер кэша до вытеснения

WEBSCOUT_REQUEST_TIMEOUT

15.0

Таймаут HTTP в секундах

WEBSCOUT_MAX_RETRIES

3

Количество повторов на запрос

WEBSCOUT_RATE_LIMIT_PER_SECOND

2.0

Максимум запросов в секунду на домен

WEBSCOUT_SEARCH_MAX_RESULTS

10

Количество результатов поиска по умолчанию

WEBSCOUT_SEARCH_BACKENDS

bing,duckduckgo

Порядок бэкендов через запятую

WEBSCOUT_CRAWLER_MAX_DEPTH

2

Глубина обхода по умолчанию

WEBSCOUT_CRAWLER_MAX_PAGES

20

Максимум страниц за обход по умолчанию

WEBSCOUT_CRAWLER_CONCURRENCY

5

Параллельные загрузки на каждом уровне глубины

WEBSCOUT_RESPECT_ROBOTS

true

Учитывает ли краулер robots.txt

WEBSCOUT_EXTRACT_OUTPUT_FORMAT

markdown

Формат вывода извлечения по умолчанию

WEBSCOUT_PROXY_HTTP

(empty)

URL HTTP-прокси

WEBSCOUT_PROXY_HTTPS

(empty)

URL HTTPS-прокси

WEBSCOUT_LOG_LEVEL

WARNING

Подробность логирования

WEBSCOUT_LOG_JSON

0

Установите 1 для логов в формате JSON

Флаги CLI имеют приоритет над переменными окружения:

webscout-mcp --cache-ttl 3600 --cache-dir /tmp/webscout serve

Транспорты

# stdio (default - works with Claude Code, Cursor, etc.)
webscout-mcp

# SSE (for remote or browser-based clients)
webscout-mcp serve --transport sse --host 0.0.0.0 --port 8000

Журнал изменений

0.3.0

  • Поддержка TOML-файла конфигурации: настройка через ~/.config/webscout/config.toml в дополнение к переменным окружения

  • Поддержка HTTP/HTTPS-прокси: маршрутизация всех запросов через прокси

  • Двойное извлечение контента: trafilatura как основной механизм, readability-lxml как автоматический запасной вариант

  • Дедупликация результатов поиска: повторяющиеся URL удаляются, позиции перенумеровываются

  • Поиск с учётом региона: параметр region теперь действительно передаётся в Bing и DuckDuckGo

  • Производительность краулера: устранена двойная загрузка каждой страницы — обход стал быстрее в ~2 раза

  • Улучшенная логика повторов: повторные попытки при всех ошибках httpx и HTTP 5xx

  • Исправлено определение content-type: корректное определение HTML/XML

0.2.0

  • Многобэкендный поиск: Bing + HTML-версия DuckDuckGo с автоматическим переключением

  • Параллельный краулер с настраиваемой степенью параллелизма

  • Соблюдение robots.txt (настраивается, включено по умолчанию)

  • Подкоманды CLI: search, fetch, crawl, serve

  • Структурированное логирование с консольным и JSON-форматтерами

  • Собственная иерархия исключений для более качественной обработки ошибок

  • Новые параметры: WEBSCOUT_SEARCH_BACKENDS, WEBSCOUT_CRAWLER_CONCURRENCY, WEBSCOUT_RESPECT_ROBOTS

0.1.0

  • Первый выпуск: web_search, web_fetch, web_crawl, web_extract, cache_stats, cache_clear

  • Кэш SQLite с TTL и вытеснением по размеру

  • Ограничение скорости по алгоритму token bucket для каждого домена

  • Повторы с экспоненциальной задержкой

  • Извлечение контента через trafilatura

Разработка

git clone https://github.com/wxs-lang/webscout-mcp.git
cd webscout-mcp
pip install -e ".[dev]"
pytest

Лицензия

MIT

Install Server
A
license - permissive license
A
quality
B
maintenance

Maintenance

Maintainers
Response time
Release cycle
Releases (12mo)
Commit activity

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Servers

View all related MCP servers

Related MCP Connectors

  • Reliable web access for AI agents: smart HTTP, rotating proxies, and full-browser rendering.

  • Web search for AI agents — one tool across 6 engines, routed to the cheapest + cached.

  • Live web search for AI agents. $0.001/call, x402 on Base, no API key.

View all MCP Connectors

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/wxs-lang/webscout-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server