Skip to main content
Glama
theriskus
by theriskus
README.md
# mcp_web_search

MCP-сервер для веб-поиска, получения контента и скрапинга страниц. Работает через [Model Context Protocol](https://modelcontextprotocol.io/) — подключается к Claude Desktop и другим MCP-совместимым клиентам.

## Возможности

| Инструмент | Описание |
|---|---|
| `web_search` | Поиск через DuckDuckGo HTML (без API-ключа). Возвращает заголовки, URL и сниппеты |
| `web_fetch` | Загрузка страницы и извлечение текстового содержимого. Опционально — список ссылок |
| `web_scrape` | Скрапинг через Playwright для динамических/JS-сайтов. Поддержка скриншотов |
| `open_url` | Открытие страницы в headless-браузере: заголовок, HTTP-статус, превью контента |

### Защита от блокировок

- Случайные User-Agent, Accept-Language, Sec-Ch-Ua и другие заголовки
- Случайные задержки между запросами
- Разные профили браузера при каждом запуске Playwright

## Установка

```bash
git clone <repo-url> mcp_web_search
cd mcp_web_search
npm install
npm run build
```

Для Playwright необходимо установить Chromium:

```bash
npx playwright install chromium
```

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

### Ручной запуск

```bash
npm run build   # Сборка TypeScript → dist/
npm start       # Запуск через stdio
```

### dev-режим (без сборки)

```bash
npm run dev
```

### Подключение к Claude Desktop

Добавь в `claude_desktop_config.json`:

```json
{
  "mcpServers": {
    "mcp_web_search": {
      "command": "node",
      "args": ["/путь/к/mcp_web_search/dist/index.js"]
    }
  }
}
```

## Инструменты

### `web_search`

Поиск через DuckDuckGo HTML. Не требует API-ключа.

```json
{ "query": "TypeScript MCP server", "maxResults": 10 }
```

### `web_fetch`

Загрузка страницы и извлечение текста. Быстрее, чем `web_scrape`, но без поддержки JavaScript.

```json
{ "url": "https://example.com", "withLinks": true, "maxContentLength": 5000 }
```

### `web_scrape`

Полноценный браузерный скрапинг через Playwright Chromium. Для сайтов, которые рендерят контент на клиенте (React, Vue и т.д.).

```json
{
  "url": "https://example.com",
  "waitForSelector": ".article-body",
  "timeout": 30000,
  "maxContentLength": 15000,
  "takeScreenshot": false
}
```

### `open_url`

Лёгкое открытие страницы — возвращает заголовок, HTTP-статус и краткое превью.

```json
{ "url": "https://example.com", "timeout": 15000 }
```

## Стек

- [TypeScript](https://www.typescriptlang.org/) (ES2022, ESM)
- [@modelcontextprotocol/sdk](https://www.npmjs.com/package/@modelcontextprotocol/sdk) — MCP-сервер
- [Playwright](https://playwright.dev/) — headless-браузер для динамических страниц
- [Cheerio](https://cheerio.js.org/) — парсинг HTML
- [Zod](https://zod.dev/) — валидация параметров

## Скрипты

| Команда | Описание |
|---|---|
| `npm run build` | Компиляция TypeScript |
| `npm start` | Запуск скомпилированного сервера |
| `npm run dev` | Запуск через tsx (без компиляции) |

## Лицензия

ISC

TDQS

A3.5/5.0

Scored across 4 tools

Disambiguation4/5

Tools are mostly distinct: web_search for search results, web_fetch for static content, web_scrape for dynamic pages, open_url for a quick preview. However, open_url and web_fetch have overlapping functionality (both fetch a URL), which could cause slight confusion if descriptions are not carefully read.

Naming Consistency3/5

Three tools use the 'web_' prefix (web_fetch, web_scrape, web_search), but open_url breaks the pattern. Verbs are inconsistent (open, fetch, scrape, search). A uniform naming convention like 'web_search', 'web_fetch', 'web_scrape', 'web_preview' would be clearer.

Tool Count5/5

Four tools is an appropriate number for a web search MCP server. Each tool serves a distinct purpose (search, static fetch, dynamic scrape, quick preview), and no tool feels unnecessary. The count is well-scoped.

Completeness4/5

The tool surface covers the main workflows: searching the web, retrieving content from static pages, and handling dynamic pages. A minor gap is the lack of a dedicated tool for metadata extraction or advanced search filtering, but the core functionality is complete for typical usage.

Maintenance

ActivityInactive
ResponsivenessNo issues