Оновлено:

Afina MCP Server#

MCP-сервер Afina підключає AI-агента до локального HTTP API Afina через стандартний Model Context Protocol. Агент отримує не "чат із підказками", а набір реальних інструментів: читання акаунтів і скриптів, запуск браузерів, перевірка проксі, робота з RPA-модулями, групами задач, логами, cookies та міграцією з інших антидетект-браузерів.

  • Transport: stdio
  • Пакет: npx -y afina-mcp
  • Afina API: http://localhost:50778 або http://127.0.0.1:50778
  • Аутентифікація: змінна середовища AFINA_API_KEY
  • Live-перевірка: afina-mcp повертає Tools: 92, resources: 5

Як працює Afina MCP#

Afina MCP Server - це stdio-сервер для AI-клієнтів, який транслює MCP-виклики у HTTP-запити до локального API Afina. Коли Afina запущена, десктопний застосунок піднімає локальний HTTP-сервер на порту 50778; якщо порт зайнятий, Afina пробує наступні порти в діапазоні.

Afina MCP Server

AI-клієнт не ходить у базу Afina напряму і не редагує файли профілів вручну. Він викликає MCP tool, afina-mcp перевіряє аргументи, робить HTTP-запит до Afina з x-api-key, отримує відповідь і повертає її агенту у форматі MCP.

afina-mcp є окремим npm-пакетом. Він не зберігає стан сесії Afina і живе стільки, скільки його тримає запущеним MCP-клієнт.

Передумови#

Перед підключенням перевірте локальне середовище.

ЩоЯк перевіритиНавіщо потрібно
Afina запущеназастосунок відкритий локальноПіднімає HTTP API
API-ключ AfinaНалаштування → Основні → API ключПередається як AFINA_API_KEY
Node.js 18+node --versionЗапускає npx
npxnpx --versionЗавантажує afina-mcp
Claude Codeclaude --versionMCP-клієнт для підключення

Без валідного AFINA_API_KEY більшість /api/* endpoint-ів Afina повернуть 401 Unauthorized або закриють з'єднання. MCP-сервер теж не стартує коректно без цієї змінної.

Підключення через CLI#

Afina MCP підключається до будь-якого AI-агента однаково: клієнт запускає npx -y afina-mcp як локальний процес із транспортом stdio і отримує доступ до всіх 92 інструментів Afina через змінну AFINA_API_KEY. Різниця між клієнтами - лише в тому, де зберігається конфіг.

Claude Code

Для поточного проєкту (рекомендовано):

powershell

Для всіх проєктів поточного користувача:

powershell

Перевірка підключення:

powershell
text

Codex CLI та інші CLI-клієнти

CLI-клієнти без вбудованої команди mcp add підключають MCP через конфіг-файл. Для Codex CLI це ~/.codex/config.yaml:

yaml

Для Gemini CLI - ~/.gemini/settings.json або .gemini/settings.json у проєкті (JSON-формат у наступному розділі).

Підключення через агента#

Не хочете вводити команди вручну? Скопіюйте промпт нижче, замініть [ВСТАВИТИ_КЛЮЧ] на свій API-ключ і відправте агенту - він виконає всі кроки сам.

text

Якщо Ви використовуєте --scope project, додайте .mcp.json у .gitignore. У цьому файлі зберігається AFINA_API_KEY, тому його не можна комітити в репозиторій. Аналогічно виключайте з git будь-який конфіг-файл, що містить ключ.

Після підключення перезапустіть клієнт. MCP tools завантажуються під час старту нової сесії - сервер може бути доданий правильно, але інструменти не з'являться до перезапуску.

Налаштування конфігураційних файлів#

Якщо MCP-клієнт очікує JSON-конфіг, використовуйте стандартний stdio-формат. Він однаковий для всіх клієнтів, що підтримують специфікацію MCP.

json
КлієнтШлях до конфігурації
Claude Desktop (Windows)%APPDATA%\Claude\claude_desktop_config.json
Claude Desktop (macOS)~/Library/Application Support/Claude/claude_desktop_config.json
Cursor.cursor/mcp.json у корені проєкту або ~/.cursor/mcp.json глобально
Windsurf~/.codeium/windsurf/mcp_config.json
Gemini CLI.gemini/settings.json у проєкті або ~/.gemini/settings.json глобально
ClineНалаштування MCP у GUI розширення VS Code
Continue.continue/config.json у проєкті

Поле "type": "stdio" може бути опціональним - деякі клієнти визначають транспорт автоматично, якщо задано command. Якщо клієнт не розпізнає конфіг, перевірте документацію для конкретної версії.

Конфіг-файли, що містять AFINA_API_KEY, треба виключати з системи контролю версій. Для командної роботи зберігайте ключ у менеджері секретів або змінних оточення CI/CD.

Як агент викликає інструменти#

Коли Ви пишете агенту "покажи список акаунтів", Claude Code не виконує shell-команди самостійно. Він надсилає JSON-RPC виклик у stdin процесу afina-mcp.

json

afina-mcp перетворює це на HTTP-запит до локальної Afina, додає x-api-key, отримує JSON-відповідь і повертає її агенту.

Для прямої діагностики без перезапуску Claude Code можна виконати tools/list вручну.

powershell

Live-відповідь tools/list підтверджує 92 інструменти й 5 resources. Якщо локальний список відрізняється, пріоритет має Ваш поточний afina-mcp, а не ця сторінка.

Доступні інструменти#

Нижче наведено групи інструментів, підтверджені live tools/list. Назви tools і параметрів залишаються англійською, бо це частина executable API.

Акаунти й профілі#

ToolОбов'язкові параметриЩо робить
list_accounts-Повертає акаунти з фільтрами groupId, tagId, isRunning
resolve_accountqueryПеретворює UUID, назву, numberId або DB id на повний акаунт
get_accountaccountIdЧитає один акаунт за UUID
create_account-Створює постійний профіль із fingerprint, proxy, tags, groups, settings
create_one_time_profile-Створює disposable-профіль, запускає браузер і видаляє після зупинки
update_account-PATCH-оновлення акаунта за id або accountId
delete_accountaccountIdSoft-delete акаунта
hard_delete_account-Безповоротне видалення за id, ids, accountId або accountIds

Якщо користувач просить "тимчасовий", "одноразовий", "disposable" або "one-time" профіль, агент має викликати create_one_time_profile, а не create_account. Звичайний create_account створює постійний акаунт.

Браузерна сесія й сторінка#

ToolОбов'язкові параметриЩо робить
start_browserprofileIdЗапускає браузер і повертає wsEndpoint
stop_browserprofileIdЗакриває браузер через CDP
eval_in_browserprofileId, codeВиконує JavaScript у поточній вкладці
find_clickableprofileId, textШукає клікабельний елемент за текстом
find_inputprofileId, queryШукає поле вводу
get_current_urlprofileIdПовертає URL активної вкладки
get_page_textprofileIdЧитає текст сторінки, підтримує selector і maxChars
take_screenshotprofileIdРобить скриншот поточної вкладки

Ця група дає агенту режим "одноразової AI-сесії": запустити акаунт, відкрити потрібну сторінку, прочитати текст, зробити скриншот, знайти кнопку або поле і закрити браузер без написання RPA-скрипта.

Cookies#

ToolОбов'язкові параметриЩо робить
set_cookiesaccountId, cookiesСтавить cookies у чергу імпорту для акаунта
export_cookies-Експортує cookies за id, ids, accountId або accountIds

set_cookies корисний для перенесення авторизованих сесій. Якщо акаунт не запущений, cookies застосуються під час наступного старту браузера.

RPA-скрипти#

ToolОбов'язкові параметриЩо робить
list_scripts-Повертає список скриптів
get_scriptidЧитає повну структуру одного скрипта
create_scriptname, settingsСтворює RPA-скрипт
update_scriptidОновлює скрипт
run_scriptprofileId, scriptIdЗапускає скрипт на одному профілі; опціонально closeBrowserAfter
get_run_logsuuidЧитає логи прямого запуску
stop_running_scriptuuidЗупиняє running script

Скриптова структура використовує settings.elements[], settings.connections[], рівно один start:true і settings.startElement. Перед генерацією складного скрипта агент має читати resource afina://docs/rpa-blocks і схему afina://docs/script-schema.

Модулі executeModule#

ToolОбов'язкові параметриЩо робить
list_modules-Повертає список JS-модулів
get_module-Читає модуль за id або hash
create_modulenameСтворює модуль і папку з файлами
update_moduleidОновлює ряд модуля в БД
resign_moduleidПерераховує Ed25519-підпис модуля
delete_module-Soft-delete модуля
hard_delete_module-Видаляє ряд і папку модуля

Після редагування файлів модуля завжди потрібен resign_module. Без свіжого підпису executor може повернути modules.error.signature_invalid.

Групи задач, задачі й запуск на масиві акаунтів#

ToolОбов'язкові параметриЩо робить
list_task_groups-Повертає групи задач
get_task_groupidЧитає групу задач
get_task_group_tasksgroupIdЧитає задачі конкретної групи
create_task_group-Створює групу з розкладом, timeout і parallelism
update_task_groupidОновлює групу задач
start_task_groupidАктивує scheduler групи
restart_task_groupidПовертає завершені задачі у waiting
stop_task_groupidЗупиняє групу
delete_task_groupidSoft-delete групи
hard_delete_task_group-Безповоротне видалення групи
add_tasks_to_groupgroupId, scriptId, accountIdsДодає задачі в групу
run_script_on_accountsscriptId, accountIdsКомпозитно створює/використовує групу і запускає скрипт
list_tasks-Фільтрує задачі за status, groupId, accountId, scriptId, limit
get_active_tasks-Показує активні задачі
get_task_logstaskUuidЧитає логи задачі
update_taskidОновлює status, executeAt, additionalData, sort, tag, description
delete_tasks-Видаляє задачі
stop_tasks-Зупиняє задачі, опційно closeBrowser

Ключові поля orchestration: schedule, timeFrom, timeTo, scheduleTime, startHour, endHour, isRepeatable, repeatCount, timeout, activeSession, waitForOtherTaskCompletion.

Проксі, email, бази даних і змінні#

ToolОбов'язкові параметриЩо робить
check_proxies-Перевіряє проксі акаунтів за accountIds, groupId або tagId
check_all_proxies-Перевіряє всі збережені проксі
add_proxyhost, portДодає проксі після перевірки
list_emails-Повертає IMAP-облікові дані без паролів
toggle_emailemail, isActiveВмикає або вимикає IMAP-моніторинг
list_databases-Повертає підключення до БД
get_databaseidЧитає одне підключення
create_databasenameСтворює підключення до SQLite/Postgres/MySQL/MSSQL/MongoDB/Redis
update_databaseidОновлює підключення
delete_database-Soft-delete БД
hard_delete_database-Видаляє ряд і файл, якщо є filePath
list_global_vars-Повертає глобальні змінні
create_global_varname, valueСтворює змінну
update_global_varidОновлює змінну
delete_global_var-Видаляє змінні
list_keys-Повертає каталог ключів
delete_keys-Видаляє імена ключів з каталогу
get_account_vars-Читає змінні акаунта за account reference
set_account_varkey, valueЗаписує plain або encrypted змінну
delete_account_varkeyВидаляє змінну акаунта

Для акаунтів агенту краще спершу викликати resolve_account, якщо користувач називає акаунт за іменем, номером або коротким текстовим посиланням. resolve_account повертає обидва поля: UUID accountId і числовий id. UUID підходить для більшості tools (start_browser, get_account, export_cookies тощо). Виняток: run_script_on_accounts, add_tasks_to_group і check_proxies приймають числовий id, а не UUID - використовуйте поле id з відповіді resolve_account для цих трьох tools.

Міграція з інших антидетект-браузерів#

ToolОбов'язкові параметриЩо робить
set_vendor_credentialsvendor, tokenЗберігає токен Vision, AdsPower або Dolphin
list_vendor_credentials-Показує, які vendor credentials налаштовані
delete_vendor_credentialsvendorВидаляє vendor credentials
vision_list_folders-Список папок Vision
vision_list_profilesfolderIdСписок профілів Vision
vision_get_profilefolderId, profileIdПовний профіль Vision
vision_list_proxiesfolderIdПроксі Vision
vision_export_cookiesfolderId, profileIdCookies Vision
vision_import_profilesfolderId, profileIdsBulk-import Vision у Afina
adspower_list_groups-Групи AdsPower
adspower_list_profiles-Профілі AdsPower
adspower_get_profileuserIdПовний профіль AdsPower
adspower_export_cookiesuserIdCookies AdsPower
adspower_import_profilesuserIdsBulk-import AdsPower
dolphin_whoami-Перевірка Dolphin token
dolphin_list_profiles-Список профілів Dolphin
dolphin_get_profileprofileIdПовний профіль Dolphin
dolphin_export_cookiesprofileIdCookies Dolphin
dolphin_import_profilesprofileIdsBulk-import Dolphin

Імпорт підтримує dryRun, withCookies, tagNames, accountGroupNames і vendor-specific throttling для cookie export.

CDP-інструменти#

ToolОбов'язкові параметриЩо робить
cdp_inspect_browserportЧитає /json/version у будь-якого Chromium із CDP
cdp_export_cookiesport або wsEndpointЕкспортує cookies через CDP
migrate_via_cdpport або wsEndpointСтворює Afina-акаунт і переносить cookies із running Chromium

CDP-підхід потрібен, коли джерело не має публічного API для експорту cookies або коли потрібно швидко перенести поточну авторизовану сесію.

Вбудовані resources#

Afina MCP також віддає resources. Це не tools для дії, а довідники, які агент має читати перед складними операціями.

URIКоли читати
afina://docs/rpa-blocksПеред генерацією або редагуванням RPA-скрипта
afina://docs/script-schemaПеред create_script або update_script
afina://docs/tools-cheatsheetКоли незрозуміло, який MCP tool відповідає запиту
afina://docs/import-mappingПеред імпортом з Vision, AdsPower, Dolphin, MoreLogin, Octo, Linken Sphere
afina://docs/new-vendor-templateКоли потрібно додати імпорт із нового vendor-а

Для скриптів і міграцій resources є частиною робочого процесу. Коректний агент спочатку читає довідник, а вже потім викликає write-tool.

Практичні сценарії#

Перевірити всі проксі перед запуском активності#

text

Агент викликає check_all_proxies, групує результати за result.status, показує повільні проксі окремо і не переходить до destructive action без підтвердження.

Запустити браузер і прочитати сторінку без RPA-скрипта#

text

Типовий flow: resolve_accountstart_browser → навігація через eval_in_browser або CDP → get_page_texttake_screenshotstop_browser.

Запустити скрипт на групі акаунтів#

text

Агент має спочатку знайти скрипт через list_scripts, розв'язати акаунти через resolve_account або list_accounts, а потім використати run_script_on_accounts з activeSession: 10, schedule: true, timeFrom: "09:00", timeTo: "15:00" і timeout.

Розібрати помилки у виконанні#

text

Агент використовує list_task_groups, get_task_group, get_task_group_tasks і get_task_logs. Якщо причина у скрипті, він читає get_script; якщо причина у проксі, викликає check_proxies для конкретних акаунтів.

Оновити JS-модуль після зміни API#

text

Мінімальний правильний flow: list_modulesget_module → редагування модуля через доступний write path → update_module за потреби → resign_module. Без resign_module модуль може не пройти перевірку підпису.

Імпортувати профілі з Dolphin#

text

Правильний flow: set_vendor_credentials якщо токен ще не збережений → dolphin_list_profilesdolphin_import_profiles з dryRun: true → підтвердження → dolphin_import_profiles без dryRun.

Перенести сесію з будь-якого Chromium через CDP#

text

Агент використовує cdp_inspect_browser, потім migrate_via_cdp або зв'язку cdp_export_cookiescreate_accountset_cookies.

Безпека й обмеження#

  • Агент не має бачити зашифровані значення паролів і секретних змінних; він працює з назвами, metadata і дозволеними API-відповідями.
  • delete_account є soft-delete, а hard_delete_account безповоротно видаляє рядки й файли профілю.
  • delete_module, delete_task_group, delete_database є soft-delete; hard_delete_* варіанти фізично видаляють дані.
  • create_one_time_profile автоматично hard-delete-ить профіль після зупинки браузера.
  • Для дій зі знищенням даних варто просити агента спочатку показати список target-об'єктів і чекати підтвердження.
  • .mcp.json, claude_desktop_config.json і .cursor/mcp.json можуть містити AFINA_API_KEY; не публікуйте ці файли.

Не передавайте агенту "видали все", "очисти всі профілі" або "hard delete без підтвердження" як перший запит. Спочатку попросіть dry-run список: які accountId, ids, модулі або групи будуть зачеплені.

Troubleshooting#

ПроблемаЙмовірна причинаЩо зробити
AFINA_API_KEY env is requiredНе передано env-зміннуДодайте -e AFINA_API_KEY=... або env у JSON-конфіг
401 UnauthorizedНевірний API-ключСкопіюйте ключ заново з Afina
afina не з'являється в toolsClaude Code не перезапущеноЗакрийте сесію і відкрийте нову
npx: command not foundNode.js або npm не встановленоВстановіть Node.js 18+
MCP підключений, але Afina tools падаютьAfina не запущена або порт іншийЗапустіть Afina і перевірте AFINA_URL
Браузер не стартуєНевірний profileId або акаунт уже в проблемному станіВикористайте resolve_account, потім start_browser з UUID
Модуль після редагування не запускаєтьсяНе виконано resignВикличте resign_module
Імпорт vendor-а не працюєНемає credentials або неправильний baseUrlПеревірте list_vendor_credentials і set_vendor_credentials

Мінімальний чек-лист#

text

Після цього агент може працювати з Afina як із керованою системою: читати стан, запускати браузери, створювати задачі, аналізувати логи, редагувати скрипти й переносити сесії без ручного копіювання між інтерфейсами.

Пов'язані терміни глосарія