Avito MCP Server
# 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
Scored across 6 tools
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.
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.
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.
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.