Plugin for managing a Keenetic router (RCI API): MCP server + skill for an AI agent (Claude Code / Codex)
Server has 23 tools with mostly complete schemas and descriptions in Russian. Naming follows verb_noun pattern (get_, list_, set_, add_, remove_, bind_, unbind_, export_, run_). Descriptions are detailed and contextual, averaging ~150 chars, well above the 34-char baseline minimum. However, several critical gaps: (1) descriptions lack actionable recovery guidance for error cases; (2) some parameters missing type constraints (e.g., 'target' in add_route accepts string but no format/pattern specified); (3) no documented output schemas for any tool, LLMs cannot predict response structure; (4) parameter descriptions occasionally reference external context (RCI ids, interface names) without explaining how to discover them; (5) no explicit idempotency or retry guidance for write operations. Read-only tools (11/23) are well-described. Write tools (12/23) lack confirmation/dry-run patterns except where explicitly noted (set_wifi_password, add_port_forward, etc. do have confirm/dryRun). Tool composition is sound, each tool has one responsibility. Security: credentials injected via environment (config.ts), not exposed as parameters. Batch file parser (routes-batch.ts) implements fail-closed validation, preventing command injection.
Создаёт policy-routing по доменным именам (не по IP): object-group fqdn + dns-proxy route.
Создаёт правило port forwarding с внешнего порта на внутренний IP:порт.
Добавляет статический маршрут в таблицу маршрутизации роутера.
Привязывает маршрут к существующему VPN-интерфейсу (policy-routing).
Проверяет через компонентный менеджер роутера, доступна ли новая версия KeeneticOS в настроенном канале обновлений. ТРЕБУЕТ прав основного аккаунта admin — под менее привилегированным аккаунтом роутер отвечает ошибкой "execute denied" (подтверждено вживую на роутере разработки под непривилегированным аккаунтом). Это ограничение самого RCI, а не баг инструмента: если получена такая ошибка, сообщи пользователю, что нужен admin-аккаунт в конфигурации MCP-сервера (ROUTER_LOGIN/ROUTER_PASSWORD), и не пытайся обойти это иначе.
No documented output schemas for any tool. LLMs cannot predict response structure, field names, or types. This forces agents to guess what data is available and risks failed downstream tool calls.
Parameter 'target' in add_route and bind_route_to_vpn accepts string but lacks format/pattern constraints. Description says 'interface name or IP gateway' but does not specify valid formats (CIDR notation, interface naming convention, etc.). LLMs may pass invalid values.
Read-only tools (get_*, list_*) lack pagination parameters (limit, offset, cursor). If a router has hundreds of devices or routes, responses could be truncated or blow context windows. No guidance on result limits.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | C | 61 | 2025-06-18+ | v2 |
Возвращает полный running-config роутера текстом (CLI-синтаксис) — та же информация, что и кнопка "Сохранить" у running-config в веб-интерфейсе (Управление → Настройки системы → Системные файлы). ВАЖНО: результат содержит секреты в открытом/слабо обфусцированном виде — хэши паролей пользователей, WPA-PSK Wi-Fi, параметры WireGuard. Перед вызовом предупреди пользователя об этом. После получения результата не пересказывай и не цитируй секретные значения без необходимости; если пользователь просит сохранить бэкап — предложи записать его в файл вне git-репозитория (в нём секреты в открытом виде), а не просто оставить текст в переписке.
Все сетевые интерфейсы роутера (WAN, Wi-Fi, VPN, мосты) и их состояние.
Аптайм, загрузка, память и т.п.
Версия KeeneticOS и модель роутера.
Состояние основного интернет-подключения.
Список устройств из таблицы DHCP/hotspot: MAC, IP, имя, интерфейс.
Статические привязки IP к MAC.
Текущие правила проброса портов.
Таблица статических маршрутов роутера.
Отфильтрованный список интерфейсов роутера — только VPN-туннели (WireGuard подтверждён вживую; OpenVPN/IKEv2/L2TP/PPTP/VLESS — по типу, не проверено на реальном роутере). Используй для последующей привязки маршрутов (bind_route_to_vpn).
Устройства, ассоциированные с точками доступа.
Перезагружает роутер.
Удаляет правило port forwarding.
Удаляет статический маршрут из таблицы маршрутизации роутера.
Применяет пакет маршрутов из batch-файла (ограниченный интерпретатор .bat-подобных файлов). Поддерживаемые команды: ROUTE ADD, ROUTE DELETE, VPN BIND, VPN UNBIND. Файл НЕ выполняется системным интерпретатором — это исключает произвольное исполнение команд ОС/роутера.
Поднимает или гасит указанную точку доступа (например гостевую сеть).
Устанавливает новый WPA-PSK пароль на указанной точке доступа.
Отвязывает маршрут от VPN-интерфейса.
Error handling descriptions are minimal. Tools reference RCI errors ('execute denied', 'not found') but do not provide recovery guidance. E.g., check_firmware_update mentions admin-account requirement but other tools do not explain what to do if a call fails.
Descriptions reference external discovery (e.g., 'RCI id of interface' in set_wifi_password) but do not explain how to obtain these IDs. Agents must call get_interfaces first, but this dependency is not documented in parameter descriptions.