avito-mcp-ru
# avito-mcp-ru
<!-- mcp-name: io.github.ilyautov/avito-mcp-ru -->
API Авито для ИИ-ассистентов: объявления и статистика, чаты с покупателями, заказы и Авито Доставка, автозагрузка, продвижение, отзывы. Каталог исполняется сервером.
[](https://pypi.org/project/avito-mcp-ru/)
[](https://github.com/ilyautov/avito-mcp-ru/actions/workflows/ci.yml)
[](LICENSE)
[](#карта-методов)
[](https://marketplaces-mcp-ru.aifrontier.tech/avito-api.html)
[](https://github.com/ilyautov/avito-mcp-ru/stargazers)
<p align="center">
<a href="https://marketplaces-mcp-ru.aifrontier.tech/avito-api.html">
<img src="assets/social-preview.png" alt="avito-mcp-ru: API Авито в ИИ-ассистенте. 64 метода" width="760">
</a>
</p>
Пакет поднимает один сервер, Авито, и ничего больше. Сервер, каталог и
ядро приходят зависимостью из [`marketplaces-mcp-ru`](https://github.com/ilyautov/marketplaces-mcp-ru):
здесь имя, точка входа и документация под один маркетплейс.
## Установка
Первый релиз на PyPI выпускается тегом `v0.5.3`, до этого пакет ставится прямо из репозитория:
```bash
uvx --from git+https://github.com/ilyautov/avito-mcp-ru avito-mcp-ru
```
После релиза строка короче:
```bash
uvx avito-mcp-ru
```
Claude Desktop, `claude_desktop_config.json`:
```json
{
"mcpServers": {
"avito": {
"command": "uvx",
"args": ["--from", "git+https://github.com/ilyautov/avito-mcp-ru", "avito-mcp-ru"],
"env": { "AVITO_CLIENT_ID": "...", "AVITO_CLIENT_SECRET": "..." }
}
}
}
```
Третий путь, если агент умеет скиллы: он поставит сервер и настроит клиент сам.
```bash
npx skills add ilyautov/avito-mcp-ru
```
## Ключи
**Где взять пару.** На `avito.ru`: **Для бизнеса**, раздел **Интеграции**, пункт **API**. Там выдаётся `client_id` и `client_secret`. Хост запросов `api.avito.ru`.
**Как это превращается в токен.** Пара меняется на access-токен по OAuth2, срок жизни ограничен. Сервер обновляет токен сам, вручную ничего перевыпускать не нужно.
**Где всё лежит.** В `~/.marketplace-mcp/cabinets.json` с правами `chmod 600`, локально.
| переменная | секрет | что это |
|---|---|---|
| `AVITO_CLIENT_ID` | да | client_id из раздела Для бизнеса → Интеграции → API. |
| `AVITO_CLIENT_SECRET` | да | client_secret оттуда же, меняется на токен по OAuth2. |
Ключи можно не держать в окружении: сервер умеет кабинеты и кладёт их в
`~/.marketplace-mcp/cabinets.json` с правами 600, вне репозитория. Магазинов
подключается сколько нужно, переключение прямо из чата.
## Карта методов
Каталог лежит в зависимости как `avito_mcp/endpoints.yaml`:
**64 метода**, из них 40 на чтение, 22 на запись и 2 необратимых.
Сервер исполняет ровно этот файл, поэтому таблица не может разойтись с кодом.
| тема | методов | чтение | запись | необратимые |
|---|---:|---:|---:|---:|
| Мессенджер (чаты с покупателями) | 13 | 5 | 7 | 1 |
| Автозагрузка (выгрузка объявлений файлом) | 12 | 10 | 2 | 0 |
| Заказы и Авито Доставка | 12 | 6 | 6 | 0 |
| Объявления и статистика | 11 | 7 | 4 | 0 |
| Продвижение объявлений (реклама) | 7 | 6 | 1 | 0 |
| Рейтинг и отзывы | 4 | 2 | 1 | 1 |
| Пользователь, баланс и операции | 3 | 3 | 0 | 0 |
| Остатки в объявлениях | 2 | 1 | 1 | 0 |
Подробный разбор с параметрами и лимитами: [https://marketplaces-mcp-ru.aifrontier.tech/avito-api.html](https://marketplaces-mcp-ru.aifrontier.tech/avito-api.html)
## Что спросить в чате
- покажи статистику по объявлениям за неделю
- какие заказы Авито Доставки в работе
- собери непрочитанные сообщения из мессенджера
- обнови остатки по объявлениям
## Частые ошибки
**401 после того, как всё работало.** Токен Авито живёт ограниченное время. Если запрос идёт мимо сервера, своим кодом, токен надо обновлять; через сервер это происходит само.
**403 на методе, который есть в документации.** У Авито доступ к разделам выдаётся по заявке и не одинаков у всех аккаунтов. Мессенджер и Авито Доставка открываются не каждому бизнесу.
**Ошибка в имени поля.** Каталог собран из официальных документов, живой прогон на реальных кабинетах ещё не делался. `describe_method` покажет схему, `avito_get_raw` даст поправить запрос на месте.
## Чем это отличается от marketplaces-mcp-ru
Ничем, кроме состава. `marketplaces-mcp-ru` ставит четыре маркетплейса сразу и держит их
под одним сервером, `avito-mcp-ru` ставит один. Код общий: правка в ядре доезжает
сюда обновлением зависимости, а не копированием.
| нужно | пакет |
|---|---|
| только Авито | `avito-mcp-ru` |
| все четыре маркетплейса | `marketplaces-mcp-ru` |
## Кто это сделал
[Илья Утов](https://github.com/ilyautov), лаборатория
[AI Frontier](https://aifrontier.tech). Как эти инструменты устроены внутри,
пишу в [Telegram](https://t.me/gorilla_under_hood) и
[LinkedIn](https://www.linkedin.com/in/ilyautov).
Рядом стоят [**business-mcp-ru**](https://github.com/ilyautov/business-mcp-ru)
(hh.ru, VK, Диадок, СБИС, Честный знак),
[**moysklad-mcp-ru**](https://github.com/ilyautov/moysklad-mcp-ru) и
[**humanizer-ru**](https://github.com/ilyautov/humanizer-ru).
Все проекты одним списком, разобранные по назначению:
[ilyautov.github.io](https://ilyautov.github.io/).
## Лицензия
MIT, см. [LICENSE](LICENSE).
TDQS
Scored across 30 tools
The catalog navigation tools (avito_list_sections, avito_get_section, avito_search_methods, avito_describe_method) overlap somewhat in purpose, but descriptions clarify their roles. More problematically, read/write/delete execution tools come in both catalog-based (avito_call_method/avito_write_method/avito_delete_method) and raw-path (avito_get_raw/avito_write_raw/avito_delete_raw) variants, creating two parallel execution surfaces that could be confused.
Most tools follow an avito_verb_noun pattern (avito_list_sections, avito_get_items, avito_update_price), but there are inconsistencies: avito_map, avito_whoami, avito_fetch_all, and avito_set_key break the verb_noun convention. The call/write/delete_method vs get/write/delete_raw naming is also not parallel (call vs get), which undermines predictability.
30 tools is heavy for a marketplace MCP server, and many are meta-tools (sections, methods, raw execution, cabinets) rather than domain operations. The six raw/catalog execution variants could be consolidated, while domain-specific getters are duplicated by generic call_method. It feels over-engineered and over-scoped.
Core read operations are covered (items, orders, stocks, stats, reviews, chats, balance) and write operations exist for price and stock. However, the domain lacks common lifecycle operations like creating/editing listings, responding to reviews, messaging buyers, or acting on orders, which a marketplace seller would expect.