StarLine MCP
by curlysasha
README.md
# StarLine MCP
MCP-сервер для управления автосигнализацией **StarLine** через ИИ-агента (Claude и др.).
Агент вызывает понятные инструменты (`list_devices`, `get_status`, `set_engine`…), а сервер
прячет всю «грязь»: 4-шаговую авторизацию StarLineID, кэш токенов и маппинг команд в облачный API.
```
AI-агент (Claude) ──tools──► StarLine MCP ──REST──► облако StarLine ──GSM──► блок в машине
```
## Архитектура
| Слой | Файл | Ответственность |
|------|------|-----------------|
| Конфиг | `config.py` | учётные данные из `.env` |
| Авторизация | `auth.py` | getCode → getToken → user/login → auth.slid, кэш `slnet` (24ч) |
| Клиент API | `client.py` | список/статус устройств, отправка команд, авто-переавторизация |
| MCP-сервер | `server.py` | инструменты для агента |
## Безопасность
Инструменты разделены на два класса:
- **read-only** (`list_devices`, `get_status`, `get_location`) — выполняются свободно.
- **команды управления** (`set_security`, `set_engine`, `set_heater`, `set_channel`) —
отказывают без `confirm=true`. Агент **не должен** подставлять `confirm` сам — подтверждение
исходит от человека. Рекомендуется дополнительно требовать approval на эти инструменты
в настройках хоста (Claude Desktop / Claude Code permissions).
> ⚠️ Запуск двигателя и снятие с охраны — физические действия с реальной машиной.
> Относитесь к ним как к необратимым.
## Установка
Изолированный venv обязателен: на машине бывает несколько Python, а голый `python`
в конфиге MCP-хоста резолвится непредсказуемо (главная причина «не запускается»).
```bash
cd "C:/GIT/StarLine MCP"
py -3.12 -m venv .venv
.venv/Scripts/python.exe -m pip install -e . # ставит пакет + зависимости в venv
cp .env.example .env # затем заполнить
```
После `-e .` пакет импортируется из venv — `PYTHONPATH` задавать **не нужно**.
Самодиагностика (проверяет импорты и конфиг, печатает в stderr):
```bash
.venv/Scripts/python.exe -m starline_mcp.server --healthcheck
```
`.env`:
```
STARLINE_APP_ID=... # из https://my.starline.ru/developer
STARLINE_APP_SECRET=...
STARLINE_LOGIN=... # аккаунт my.starline.ru
STARLINE_PASSWORD=...
```
## Проверка доступа
```bash
.venv/Scripts/python.exe -m starline_mcp.check_auth
```
Залогинится и выведет список ваших устройств со статусом. Это лучший первый шаг —
убедиться, что API-доступ реально работает, до подключения к агенту.
## Запуск MCP-сервера
```bash
.venv/Scripts/python.exe -m starline_mcp.server
```
Подключение к Claude Code: в корне уже лежит `.mcp.json` с **абсолютным путём к venv**
(не голый `python` — это принципиально):
```json
{
"mcpServers": {
"starline": {
"command": "C:/GIT/StarLine MCP/.venv/Scripts/python.exe",
"args": ["-m", "starline_mcp.server"],
"cwd": "C:/GIT/StarLine MCP",
"env": { "PYTHONIOENCODING": "utf-8" }
}
}
}
```
> Если хост (Hermes/Claude Code) «не видит модуль» — почти всегда это голый `python`
> в команде вместо абсолютного пути к `.venv/Scripts/python.exe`. Не подмешивай `PYTHONPATH`
> и не плоди wrapper-скрипты — после `pip install -e .` это не нужно.
## Подключение к Claude Code
В корне лежит `.mcp.json` — Claude Code подхватит сервер автоматически при запуске в этой папке.
Список инструментов появится после подтверждения подключения MCP-сервера.
> Рекомендация: в настройках прав потребуй approval на инструменты `set_*` (команды управления),
> чтобы каждое физическое действие с машиной подтверждалось вручную.
## Статус
- [x] Авторизация (4 шага) + кэш токенов
- [x] Чтение: список устройств, статус, GPS, баланс SIM
- [x] Команды с подтверждением: охрана, двигатель, подогреватель, доп. канал, поиск авто
- [x] Проверено на живом аккаунте
- [x] Авто-выбор команды под модель блока (`ign` vs `ign_start`/`ign_stop`)
- [x] Проверка поддержки команды конкретным блоком (по `controls`)
- [x] Кэш списка устройств (TTL 15с)
- [x] Конфиг `.mcp.json` для Claude Code
- [ ] Боевая проверка отправки команд (требует согласия владельца — физическое действие)
- [ ] Обработка 2FA в интерактиве (если включится на аккаунте)
## Источники
Эндпоинты и алгоритмы сверены по:
- <https://github.com/Anonym-tsk/starline> (pip-пакет `starline`)
- `homeassistant/components/starline`
- <https://developer.starline.ru/>
TDQS
A3.5/5.0
Scored across 8 tools
Disambiguation5/5
Each tool has a clearly distinct purpose: locating, status, listing, engine, security, heater, channel, and a find signal. No overlap between them.
Naming Consistency5/5
All tool names follow a consistent verb_noun pattern in snake_case, e.g., find_car, get_location, set_engine. No deviations.
Tool Count5/5
8 tools is an appropriate number for a car control server, covering essential operations without being overwhelming or too sparse.
Completeness4/5
Covers major functions like location, status, engine, security, heater, and channel. Missing door lock/unlock control, which is a common feature, but core workflows are well-covered.
Maintenance
ActivityStale
ResponsivenessNo issues