Skip to main content
Glama
README.md
# Avito MCP Server

Кроссплатформенный Model Context Protocol (MCP) сервер для интеграции AI-ассистентов (Claude, Cursor, Antigravity и др.) с платформой **Авито (Avito.ru)**.

Поддерживает **Windows**, **macOS** и **Linux**.

Позволяет агенту искать объявления, анализировать состояние товаров и продавцов, читать чаты и вести диалог / торговаться от имени вашего аккаунта.

---

## Возможности (Tools)

- `avito_search` — поиск по ключевым словам, городу, диапазону цен и сортировке (с превью-фотографиями)
- `avito_get_item_details` — получение полной карточки товара (фотогалерея лота, описание, характеристики, статус бронирования, наличие Авито Доставки, рейтинг продавца)
- `avito_download_images` — выгрузка фотографий объявления на диск для визуального анализа AI-моделью (осмотр состояния, чипов, разъемов, маркировок)
- `avito_send_message` — отправка сообщения продавцу в чат по объявлению (для торга или уточнения деталей)
- `avito_list_chats` — список недавних диалогов в мессенджере с превью и статусом непрочитанных
- `avito_get_chat_history` — чтение истории сообщений в конкретном чате

---

## Требования

- **Node.js** >= 18
- Установленный браузер: **Google Chrome**, **Microsoft Edge** или **Chromium** (на macOS и Windows находится автоматически; на Linux ищутся стандартные пути в `/usr/bin/` или задаются через переменную).

---

## Установка и запуск

### **Простая установка**

Задайте вашему ии-ассистенту этот промт:

```text
Привет моя дорогая нейросеть! Можешь пожалуйста установить MCP сервер авито из этого репозитория : https://github.com/foorsee/avito-mcp-server. Сделай все хорошо, чтоб я даже руками ничего не трогал, потому что я в тебя верю. Спасибо!
```

### 1. Клонирование и установка зависимостей

```bash
git clone https://github.com/foorsee/avito-mcp-server.git
cd avito-mcp-server
npm install
```

### 2. Разовая авторизация

Для того чтобы сервер мог писать продавцам и читать чаты от вашего имени:

- **Windows:** запустите `login_avito.bat` или выполните:
  ```bash
  npm run login
  ```
- **macOS / Linux:** выполните:
  ```bash
  chmod +x login_avito.sh
  ./login_avito.sh
  # или
  npm run login
  ```

Откроется окно браузера. Войдите в свой профиль на Авито по номеру телефона / СМС и нажмите `ENTER` в консоли. Сессия сохранится локально в папке `avito-data` (эта папка находится в `.gitignore` и никогда не попадает в репозиторий).

> **Для headless Linux серверов (без дисплея):**
> Авторизуйтесь на компьютере с монитором (Windows или macOS), а затем просто скопируйте созданную папку `avito-data` на ваш Linux-сервер в корень проекта.

---

## Настройка MCP клиента

### Antigravity / Claude Desktop / Cursor

Добавьте сервер в ваш файл конфигурации (`mcp_config.json` или `claude_desktop_config.json`):

#### Windows
```json
{
  "mcpServers": {
    "avito": {
      "command": "node",
      "args": [
        "C:/Users/<Username>/Documents/avito-mcp-server/avito_server.mjs"
      ]
    }
  }
}
```

#### macOS / Linux
```json
{
  "mcpServers": {
    "avito": {
      "command": "node",
      "args": [
        "/home/<username>/avito-mcp-server/avito_server.mjs"
      ]
    }
  }
}
```

---

## Работа в Gemini Desktop и песочнице macOS (CDP Режим)

Если вы используете **Gemini Desktop** на macOS, приложение запускает MCP-серверы внутри защищенной песочницы (Seatbelt Sandbox), которая блокирует прямой запуск сторонних процессов через Mach Ports.

Сервер автоматически поддерживает подключение к Chrome через **Chrome DevTools Protocol (CDP)**:

1. **Запуск в фоне (разово в терминале):**
   ```bash
   npm run cdp
   ```

2. **Либо установка фонового демона на macOS (LaunchAgent):**
   Браузер будет автоматически запускаться при входе в систему и работать в фоне:
   ```bash
   npm run daemon:install
   ```
   (Для удаления: `npm run daemon:uninstall`)

Сервер `avito_core.mjs` автоматически обнаружит запущенный на порту `9222` браузер и подключится к нему через CDP.

### 3. Решение капчи / Разблокировка при «Проблеме с IP»

Если при частых запросах Авито временно заблокировало доступ («Доступ ограничен: проблема с IP») или запросило решение слайдер-пазла (GeeTest):
```bash
npm run solve
```
Откроется окно браузера. Переместите слайдер (сложите пазл), скрипт автоматически определит прохождение капчи, обновит куки и перезапустит фоновый сервис.

---

## Переменные окружения (Опционально)

- `AVITO_DATA_DIR` — путь к директории хранения сессии (по умолчанию папка `./avito-data` в корне проекта).
- `AVITO_CHROME_PATH` (а также `CHROME_PATH`, `PUPPETEER_EXECUTABLE_PATH`) — путь к конкретному исполняемому файлу браузера (Chrome/Chromium), если он установлен в нестандартном месте.
- `AVITO_HEADLESS` — принудительно включить (`true`) или выключить (`false`) headless-режим. По умолчанию на десктопах с монитором браузер работает в окне за пределами экрана, а на серверах Linux без дисплея — безголовым.
- `AVITO_CDP_URL` — адрес для подключения по CDP (по умолчанию `http://127.0.0.1:9222`).
- `AVITO_CDP_PORT` — порт отладки для скрипта `npm run cdp` (по умолчанию `9222`).
- `AVITO_NO_SANDBOX` — принудительно включить флаг `--no-sandbox` (на Linux под root или в Docker включается автоматически).

---

## Безопасность и приватность

- Все куки, токены авторизации и профиль браузера сохраняются исключительно локально на вашем компьютере в директории `avito-data/`.
- Папка `avito-data/` внесена в `.gitignore`. Никакие персональные данные, телефоны или пароли не передаются третьим лицам и не сохраняются в репозитории.
- Сервер запускает системный браузер локально в фоне, обходя детекты автоматизации и проверки безопасности (Qrator).

---

## Лицензия

MIT License.

TDQS

A3.8/5.0

Scored across 6 tools

Disambiguation5/5

Each tool targets a distinct resource+action: search (query listings), get_item_details (single listing), send_message (outbound messaging), list_chats (conversation index), get_chat_history (messages within a chat), download_images (media retrieval). The messaging trio is cleanly separated by scope (send vs. list vs. read), and download_images has no overlap with anything else.

Naming Consistency5/5

All six tools use the same avito_ prefix followed by a snake_case verb_noun pattern (get_item_details, send_message, list_chats, get_chat_history, download_images). The single bare verb (avito_search) is still read as a domain-scoped action and is consistent with the rest of the set.

Tool Count5/5

Six focused tools cover a marketplace browse-and-message workflow without redundancy; every tool maps to a real step in the search → inspect → contact → follow-up loop. Nothing feels padded or missing from a count perspective.

Completeness4/5

The core lifecycle (search, listing details, image inspection, send message, list chats, read history) is covered with no dead ends for the main workflow. Minor gaps remain: authentication is pushed to an external 'npm run login' step with no tool to trigger or verify login state, and there is no favorites/watchlist or own-listings retrieval.

Maintenance

ActivityMaintained
ResponsivenessNo issues