Перейти к содержимому

MCP

Сервер для ИИ-помощников

В ARMANOS встроен небольшой сервер MCP. Через него ИИ-помощник смотрит список профилей, создаёт и правит их, открывает и закрывает окна, обращаясь к тому же локальному API, что и ваши собственные скрипты.
10
Инструментов
127.0.0.1 по умолчанию
Куда обращается
stdio, JSON-RPC
Связь
Node.js
Нужно доустановить

Что здесь делает MCP

MCP это общий язык между ИИ-помощником и небольшими программами, которые делают настоящую работу. Помощник просит названное действие с названными доводами, программа выполняет его и отвечает.

В ARMANOS такая программа уже есть: один файл на Node без сторонних зависимостей. Ваш ИИ-инструмент сам запускает его и разговаривает с ним через обычный ввод и вывод.

Новой дороги к профилям нет

Сам сервер ничего не открывает в браузере. Каждый вызов инструмента превращается ровно в один запрос к локальному API на петле, к тому же самому, куда ходит ваш скрипт.

То есть помощнику не выдают новую дорогу к вашим профилям. Ему выдают ту, что и так была, с тем же токеном и по тем же правилам.

Программа всё равно должна быть открыта

Сервер MCP это переводчик, а не вторая копия ARMANOS. Если программа закрыта или локальный API выключен, каждый инструмент отвечает обычной фразой, что делать: открыть программу, если она закрыта, и включить локальный API, если он выключен.

Десять инструментов десять ходов

Инструментов ровно десять, и каждый указывает на ход, который локальный API уже умеет. Обещанного на будущее в списке нет.

У каждого инструмента есть описание, написанное для модели, а не для меню. В нём сказано, что вернётся, чтобы помощник выбирал, а не угадывал.

ИнструментЧто делаетКакой ход зовёт
get_statusПроверяет, отвечает ли локальный API, и говорит версиюGET /status
list_profilesВсе профили или страница по отбору: поиск, теги, группа, статус, открыт ли, а как в окне «Фильтры» ещё система, страна и IP выхода, ядро, без тегов и последний запуск. Заметок профиля не отдаётGET /api/v1/profile/list
get_active_profilesНомера профилей, у которых прямо сейчас открыто окноGET /api/v1/browser/active
launch_profileОткрывает окно и возвращает адрес канала отладкиPOST /api/v1/browser/start
stop_profileЗакрывает все окна профиля и считает ихPOST /api/v1/browser/stop
create_profileСоздаёт профиль по имени, сценарию использования, шаблону отпечатка, прокси, заметке, тегам и месту для сайтов; без presetId не присланное заполняет заготовка по умолчанию этого компьютера, а presetId none обходится без неё. Заметки профиля в ответе нет, и той, что положила заготовкаPOST /api/v1/profile/create
update_profileМеняет только присланные поля, с проверками окна профиля, в том числе ручные значения отпечатка, вход сайта и ключ 2FA. Заметок профиля в ответе нет, пароля сайта и ключа тожеPOST /api/v1/profile/update
delete_profileКладёт профиль в корзину, откуда его можно вернутьPOST /api/v1/profile/delete
get_one_time_codeТекущий код и сколько секунд ему осталосьGET /api/v1/profile/code
list_proxiesСохранённая библиотека прокси без паролейGET /api/v1/proxy/list

Что сказать помощнику

Всё, что вы пишете помощнику, уходит его поставщику. Пароли прокси, пароли сайтов и ключи 2FA вносите в программе, а не в разговор.

Восемь просьб ниже стоят и в программе, на экране «Для программистов», с кнопкой «Копировать». Каждую исполняют десять инструментов сервера MCP.

  • Проверь, что ARMANOS на связи, и скажи, какие профили сейчас открыты

  • Создай 5 профилей с именами от Shop-01 до Shop-05 в группе «Магазины», шаблон Windows

  • Открой все профили группы «Магазины» и скажи, какие не открылись и почему

  • Закрой все открытые профили

  • Покажи прокси из моей библиотеки, которые не прошли последнюю проверку

  • Сколько у меня профилей в каждой группе и какие из них закрыты паролем

  • Дай код двухфакторной защиты для профиля «Etsy-2»

  • Перенеси в корзину профили с тегом «test»

Профили с вашего экрана

Второго хранилища нет, и выгрузки тоже нет. Помощник видит те же записи, что и вы на экране профилей, а созданный им профиль сразу появляется в программе.

Помощник проходит те же проверки, что и вы, нажимая кнопку в программе. Запертая лицензия не даст запустить профиль, создание сверх тарифа откажет с той же причиной, что и в программе, и послабления для этой дороги нет.

В ответ на запуск приходит адрес канала отладки, если он есть. На ARMANOS Browser у каждого профиля свой адрес, поэтому внешний исполнитель подключается ровно к нужному профилю.

  • Опознаватели

    Номер профиля, имя и сценарий использования. Номер берут доводом запуск, остановка, удаление и код.

  • Группа и шаблон отпечатка

    Где лежит профиль и какой из пяти шаблонов на нём надет.

  • Сводка по прокси

    Вид связи, узел и порт. Логин и пароль остаются внутри программы.

  • Теги и время

    Достаточно, чтобы помощник отсортировал и выбрал, ничего не открывая.

Экран профилей ARMANOS со списком профилей, их группой, прокси и состоянием
Тот же список помощник получает строка в строку, а прокси в нём сведён к виду связи, узлу и порту.

Подключение в четыре шага

Всё, что вы вставляете, программа собирает за вас. Она знает путь к своему файлу сервера, адрес, на котором интерфейс вправду слушает, и ваш нынешний токен.

«Статус MCP» на панели следует за локальным API, а не за отдельной настройкой. «Готово» там стоит, только пока локальный API действительно слушает, поэтому вы не вставите настройку к серверу, которого нет.

  1. 1

    Нажмите «Включить локальный API»

    Откройте раздел «Для программистов» в ARMANOS и переведите переключатель.

  2. 2

    Поставьте Node.js

    Ваш ИИ-инструмент запускает сервер командой node.

  3. 3

    Скопируйте настройку

    Одна кнопка копирует весь блок с путём, адресом и токеном.

  4. 4

    Вставьте и перезапустите клиент

    Любой клиент MCP читает файл такого же вида.

Экран «Для программистов» в ARMANOS: адрес локального API и токен доступа
Экран «Для программистов»: адрес, токен, «Статус MCP» и блок настройки, который вы копируете.

Что лежит в настройке

Заводить у нас аккаунт не нужно, и ключа от нас тоже нет. У установленной программы вся настройка это две переменные окружения, и сервер читает их один раз при запуске. При каждом вызове он ещё ищет в папке данных программы порт, на котором интерфейс вправду слушает, и берёт его, если токен там совпал с его собственным.

Путь в доводах ведёт внутрь установленной программы. В сборках Linux, где этот путь меняется от запуска к запуску, программа кладёт файл сервера рядом со своими данными, и вписанная один раз настройка работает после перезапуска.

command
node
args[0]
…/Resources/mcp/armanos-mcp-server.js
env.ARMANOS_API_URL
http://127.0.0.1:50325
env.ARMANOS_API_TOKEN
токен с экрана «Для программистов»

Весь блок лежит под ключом mcpServers.armanos: такой вид читает большинство клиентов MCP.

Токен остаётся на машине

Интерфейс слушает только петлю и больше нигде. Пока вы его не включили, он выключен, а при первом запуске записывает случайный токен из 48 знаков в файл в папке вашей учётной записи.

Одной петли для границы мало. Страницы, которые вы открываете, работают на этой же машине, поэтому запрос с приметами страницы интерфейс отвергает ещё до хода состояния, и версии программы такая страница не узнаёт.

  • Только петля

    Другой компьютер до него не дотянется, и ничто в вашей сети тоже.

  • Токен на каждом вызове

    Идёт заголовком. Открыт только ход состояния, и только программе с этой машины.

  • Странице отказ

    Запрос с приметами страницы браузера интерфейс отвергает до хода состояния.

  • В ответах нет паролей

    Список прокси выбрасывает пароли, а в профиле остаются вид связи, узел и порт.

  • Коды а не ключи

    Инструмент кода отдаёт сам код и остаток секунд. Сам ключ двухфакторной защиты не покидает программу.

Другой конец это ваш ИИ-инструмент

И одна честная строка про другой конец. Сервер ничего не шлёт нам и не нуждается в интернете, но всё, что вернул инструмент, попадает в память вашего помощника, а где она обрабатывается, решает ваш ИИ-инструмент, а не мы.

Поэтому list_profiles, create_profile и update_profile не отдают заметки профилей, а list_profiles и не ищет по ним: люди держат там логины и коды восстановления. Инструментов с куки у сервера нет по той же причине.

Когда вызов не удался

Ни битый кадр, ни недоступный интерфейс, ни невнятный ответ вашего помощника не уронят. Вместо тишины он получит обычную ошибку инструмента и прочитает её вам.

Отказ интерфейса доходит своим текстом, а не в пересказе. Отказ про предел тарифа вы получите именно как предел тарифа, а не как безымянную неудачу.

Что случилосьЧто услышит помощник
Программа закрыта или локальный API выключенЧто по этому адресу локальный API не отвечает и что делать: открыть программу или включить локальный API.
Токен не сошёлсяОшибка интерфейса и подсказка сверить токен в настройке с токеном на панели.
Неизвестный номер профиляТот самый отказ, который выдал интерфейс, без пересказа.
Ответ больше пяти мегабайтПросьба сузить запрос вместо вызова, который никогда не вернётся.
Запуск идёт дольше девяноста секундОтказ по времени с именем интерфейса. Окно может всё же открыться, поэтому загляните в программу до повтора.

Чего это не делает

  • Не нажимает, не печатает и не переходит по ссылкам внутри страницы. Окно оно открывает и закрывает, а вести саму страницу должен клиент отладки, подключённый к адресу из ответа на запуск.
  • Не запускает ваши сохранённые сценарии. Такие ходы в локальном API есть, но ни один инструмент MCP их сегодня не зовёт.
  • Не ставит профилю пароль и куки. update_profile отказывает в этих полях, называя их, и они остаются работой в программе.
  • Не открывает профиль без окна на один раз. У launch_profile такого довода нет, а update_profile с headless: true велит профилю открываться без окна всегда.
  • Не работает через сеть. Интерфейс отвечает только на петлю, поэтому ИИ-инструмент и ARMANOS должны стоять на одном компьютере.

Как проверить

У каждого утверждения выше есть адрес в исходниках.

Десять инструментов, и каждый привязан к одному ходу локального API
apps/desktop/src/mcp/armanos-mcp-server.js
Застава по токену и отказ всему, что похоже на страницу браузера
apps/desktop/src/lib/local-api.js · apps/desktop/test/local-api-gate.js
Блок настройки, который собирает сама программа, вместе с путём, адресом и токеном
apps/desktop/src/manager/renderer.js · apps/desktop/src/main/main.js
Путь к файлу сервера остаётся верным после перезапуска, включая сборку AppImage
apps/desktop/src/main/main.js · apps/desktop/test/путь-mcp-переживает-перезапуск.js
Токен случайный, а локальный API выключен, пока вы его не включите
apps/desktop/src/lib/api-config.js
Сервер находит порт, на котором интерфейс вправду слушает, и говорит, выключен ли интерфейс или закрыта программа
apps/desktop/src/mcp/armanos-mcp-server.js · apps/desktop/test/mcp-находит-сдвинутый-порт.js
list_profiles отбирает профили доводами локального API и не отдаёт заметок
apps/desktop/src/mcp/armanos-mcp-server.js · apps/desktop/test/api-список.js
Отборы окна «Фильтры» в list_profiles и местном API дают те же профили, что само окно
apps/desktop/src/manager/отбор-списка.js · apps/desktop/test/api-отборы-окна-живьём.js
create_profile берёт заготовку по умолчанию этого компьютера, presetId none и другую заготовку; заметки заготовки в ответе нет; негодный presetId отвергается словами
apps/desktop/src/mcp/armanos-mcp-server.js · apps/desktop/test/заготовка-api-и-mcp-живьём.js

Вопросы

Сколько помощник ждёт ответа?
На запуск профиля отведено девяносто секунд, на любой другой вызов пятнадцать. Открытие окна на ARMANOS Browser ждёт, пока движок объявит свой канал отладки, а это дольше, чем прочитать список.
Собирает ли сервер вызовы в пачки?
Нет. Один вызов инструмента это один запрос и один ответ, поэтому в журнале вашего клиента видно ровно то, что спросили, и ровно то, что пришло.
А если обычный порт уже занят?
Программа займёт свободный и скажет об этом на панели. В скопированном блоке будет стоять тот порт, который вправду работает, а не тот, что не удался. В блоке, вставленном раньше, остаётся старый адрес, а новый порт сервер сам ищет в папке данных программы.
Я сменил токен, и вызовы перестали проходить. Почему?
В уже вставленном блоке остался прежний токен, и интерфейс отвергает его сразу. Скопируйте блок заново и перезапустите своего помощника.
Зачем помощник сначала просит список профилей?
Ваших номеров он не знает, поэтому начинает со списка и сверяет ваши слова с именами, группами и тегами. Только после этого он зовёт инструмент, которому нужен номер профиля.

Включите и подключите своего помощника

В ARMANOS откройте раздел «Для программистов», скопируйте блок настройки и вставьте его в свой ИИ-инструмент.