Skip to main content
Glama
README.md
# Avito MCP Server (Python 3.12+)

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

Поддерживает **Linux (серверы / VPS)**, **Docker**, **macOS** и **Windows**.

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

---

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

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

---

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

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

---

## Быстрый старт (Python 3.12+)

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

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

# Создание и активация виртуального окружения
python3 -m venv .venv
source .venv/bin/activate    # Linux / macOS
# или для Windows: .venv\Scripts\activate

# Установка зависимостей
pip install -r requirements.txt

# Установка браузера Chromium для Playwright
playwright install chromium
```

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

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

- **macOS / Linux:**
  ```bash
  python login_avito.py
  # или ./login_avito.sh
  ```
- **Windows:**
  ```cmd
  python login_avito.py
  :: или login_avito.bat
  ```

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

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

---

## 🐳 Развертывание в Docker (Production / VPS)

Сервер полностью готов к развертыванию в контейнере:

```bash
# 1. Поместите папку avito-data с авторизованной сессией в корень проекта
# 2. Сборка и фоновый запуск контейнера:
docker compose up --build -d

# Просмотр логов:
docker compose logs -f
```

Сессия, куки и профиль монтируются через том `./avito-data`, сохраняясь между перезапусками.

---

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

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

### macOS / Linux
```json
{
  "mcpServers": {
    "avito": {
      "command": "/полный/путь/к/avito-mcp-server/.venv/bin/python",
      "args": [
        "/полный/путь/к/avito-mcp-server/avito_server.py"
      ]
    }
  }
}
```

### Windows
```json
{
  "mcpServers": {
    "avito": {
      "command": "C:/полный/путь/к/avito-mcp-server/.venv/Scripts/python.exe",
      "args": [
        "C:/полный/путь/к/avito-mcp-server/avito_server.py"
      ]
    }
  }
}
```

---

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

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

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

1. **Разовый запуск в фоне:**
   ```bash
   python scripts/run_cdp.py
   ```

2. **Автозапуск через фоновый демон macOS (LaunchAgent):**
   Браузер будет автоматически запускаться при старте системы и висеть в фоне:
   ```bash
   python scripts/setup_daemon.py
   ```
   (Для отключения демона: `python scripts/uninstall_daemon.py`)

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

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

Если при частых запросах Авито показало капчу или слайдер-пазл:
```bash
python scripts/solve_captcha.py
```
Откроется окно браузера. Переместите слайдер (сложите пазл), скрипт автоматически определит прохождение капчи, обновит куки и перезапустит фоновый сервис.

---

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

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

---

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

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

---

## Лицензия

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 recent community issues