Как внешние AI-клиенты (клиенты MCP, скрипты, другие инструменты) интегрируются с AITM через серверы MCP и REST/GraphQL API.

AITM MCP & API

Серверы MCP

AITM предоставляет два сервера MCP:

  • aitm-core (35 инструментов) — проекты (onboarding, list_projects, get_project_status), CRUD Task (create_task, list_tasks, get_task, update_task, delete_task, search_tasks), жизненный цикл (run_task, stop_task, stop_project_tasks, stop_all_tasks, resume_task, skip_step, requeue_task — деструктивно, archive_task, restore_task, reorder_task), данные Task (get_task_result, get_task_console, get_task_logs, get_pipeline_status), оптимизация промптов (optimize_prompt, apply_optimization), поиск по архиву (search_archive), настройки (get_settings, update_settings), лицензия (license_status, license_activate, license_deactivate, license_upload_offline_token, license_remove_offline_token) и server_restart/server_stop.
  • aitm-extended (43 инструмента) — тестовая среда (test_env_status, test_app_build, test_app_start, test_app_stop, test_project_pull, get_test_history), скриншоты (get_screenshot_manifest, get_screenshot, get_screenshot_history), Contracts (search_contracts, get_contract_detail, get_module_summary, find_precedent_tasks, get_danger_zones, investigate_variable, blast_radius, context_for, contracts_health, contracts_resync), документация и переменные (search_docs, get_docs_for_variable, get_behavior_chain, search_variables, get_variable_tree, get_dom_page, search_dom), самопроверка (run_selfcheck) и резервное копирование (create_backup), диалоги (list_conversations, get_conversation, delete_conversation), сообщения Chat/Brainstorm (send_chat_message, send_brainstorm_message), Skills (list_skills, skill_create, skill_list, skill_search, skill_get, skill_update, skill_delete), Merge queue (get_merge_queue), resolve_conflict и состояние сервисов (get_service_health).

Транспорты: stdio (локальный, по умолчанию для обоих серверов) и Streamable HTTP на порту 3335 (по умолчанию, переопределяется через --mcp-port) с обязательным bearer-токеном (AITM_MCP_TOKEN или config.mcp.httpAuthToken, fail-closed — сервер отказывается запускаться в режиме HTTP без него) и необязательным TLS (--tls-cert/--tls-key). В стандартном .mcp.json этого репозитория (stdio) зарегистрирован только aitm-core; aitm-extended запускается отдельно (при необходимости с --http).

Пример: подключение клиента MCP (stdio)

{
  "mcpServers": {
    "aitm-core": {
      "command": "npx",
      "args": ["tsx", "src/mcp/AitmCoreMcpServer.ts", "--rest-url", "http://localhost:3333"]
    }
  }
}

Пример: удалённый клиент MCP (HTTP)

{
  "mcpServers": {
    "aitm-core-remote": {
      "url": "https://your-host:3335",
      "headers": { "Authorization": "Bearer <AITM_MCP_TOKEN>" }
    }
  }
}

REST API

База http://localhost:3333, JSON. Порты: 3333 REST/GraphQL/UI, 3334 HTTPS, 3335 MCP Streamable HTTP.

EndpointНазначение
GET /api/onboardingСамоинициализация Agent
GET /api/tasksСписок Task (projectId?, limit?)
GET /api/tasks/allСписок Task с постраничной навигацией и фильтрами
POST /api/tasksСоздать Task
POST /api/tasks/chainСоздать цепочку зависимых Task
GET /api/tasks/:idДетали Task
PATCH /api/tasks/:idЧастично обновить Task
DELETE /api/tasks/:idБезвозвратно удалить Task
POST /api/tasks/:id/runЗапустить ожидающий Task
POST /api/tasks/:id/stopОстановить один Task
POST /api/tasks/stop-allГлобальная остановка (необязательный фильтр tabId/projectId)
POST /api/projects/:projectId/tasks/stop-allОстановить все Task одного проекта
POST /api/tasks/:id/resumeВозобновить Task в состоянии failed/stopped/conflict
POST /api/tasks/:id/skipПропустить определённый шаг Pipeline
POST /api/tasks/:id/archiveАрхивировать завершённый Task
POST /api/tasks/:id/restoreВосстановить архивированный Task (отклоняется, если ветка уже влита или удалена)
POST /api/tasks/:id/requeue, /reorderПовторная постановка в очередь / изменение порядка очереди
GET /api/tasks/:id/result|console|logs|pipelineРезультат Task, вывод консоли, логи и состояние Pipeline
GET /api/archiveПоиск по архивированным Task
GET /api/statusСтатус Tab/проектов (кэш stale-while-revalidate)
GET /api/projectsСписок Tab/проектов
GET/PUT/PATCH /api/settingsЧтение и обновление настроек
POST /api/backup/createСоздать резервную копию
GET /api/merge/queueСостояние Merge queue
GET /api/service-healthСостояние отслеживаемых сервисов
GET /api/versionВерсия сервера (semver, дата сборки, режим релиза)
GET /api/license/statusСтатус лицензии
POST /api/license/activateАктивировать лицензию (licenseKey, instanceLabel, email)
POST /api/server/restart|stopПерезапустить или остановить сервер
POST /graphqlEndpoint знаний — Contracts, переменные, документация

Это отобранный набор наиболее используемых endpoint'ов, а не полный список — у REST API более 100 endpoint'ов в src/rest/RestApi.ts и отдельных маршрутизаторах (Skills, Contracts, теги DOM, i18n, скриншоты, тестовая инфраструктура, релизы и другие).

Справочник параметров — наиболее используемые операции

ОперацияПараметры
POST /api/taskstabId, projectId, title (≤ 60 символов), prompt (≤ 50 КБ), необязательные priority (low|medium|high, по умолчанию medium), useWorktree/usePipeline/autoMergeDev (по умолчанию true), skipSteps, dependsOn, overridePreFlight
POST /api/tasks/chainмассив объектов той же формы, что и POST /api/tasks — каждый последующий элемент автоматически получает dependsOn:[previous id]
POST /api/tasks/:id/stopreason?
POST /api/tasks/:id/resumefromStepIndex?, instructions?, skipSteps? — без fromStepIndex первый шаг в состоянии failed/stopped определяется автоматически
POST /api/tasks/:id/skipstepIndex или stepName (требуется один из них) — шаг должен быть pending либо failed/stopped у невыполняющегося Task
POST /api/tasks/:id/archiveforce?, reason? — только из состояний finished/stopped/failed/conflict
POST /api/tasks/:id/restoreбез тела — только архивированные Task; 409, если ветка уже merged или branch-missing
Инструмент MCPПараметры
create_tasktitle, prompt, tabId, projectId (обязательные), необязательные priority, useWorktree, usePipeline, autoMergeDev, skipSteps[], dependsOn[]
list_tasksstatus?, tabId?, projectId?
get_taskid
run_taskid
resume_taskid, необязательные fromStepIndex, instructions, skipSteps

Пример: создание Task

curl -X POST http://localhost:3333/api/tasks \
  -H 'Content-Type: application/json' \
  -d '{"title":"Fix auth bug","prompt":"READ CLAUDE.md first...","tabId":"ctm","projectId":"ctm-dashboard","priority":"high","useWorktree":true,"usePipeline":true,"autoMergeDev":true}'

Примечание: title не более 60 символов, prompt не более 50 КБ; значения по умолчанию useWorktree/usePipeline/autoMergeDev равны true, priority по умолчанию — medium.

Пример: цепочка зависимых Task

curl -X POST http://localhost:3333/api/tasks/chain \
  -H 'Content-Type: application/json' \
  -d '[
    {"title":"Add DB column","prompt":"...","tabId":"ctm","projectId":"ctm-dashboard"},
    {"title":"Use column in API","prompt":"...","tabId":"ctm","projectId":"ctm-dashboard"}
  ]'

Второй Task ждёт, пока первый не будет влит в dev, поскольку каждый последующий элемент автоматически получает dependsOn:[previous id].

Пример: остановка и возобновление Task

curl -X POST http://localhost:3333/api/tasks/42/stop \
  -H 'Content-Type: application/json' -d '{"reason":"manual stop"}'

curl -X POST http://localhost:3333/api/tasks/42/resume \
  -H 'Content-Type: application/json' -d '{}'

Советы

  • Для локальной интеграции (на той же машине) лучше использовать транспорт stdio — он проще и не требует токена.
  • Для удалённого доступа всегда нужно задавать AITM_MCP_TOKEN — без него сервер fail-closed и отказывается запускаться в режиме HTTP.
  • Для обнаружения Contracts и переменных лучше использовать инструменты aitm-extended, а не вызывать /graphql вручную.
  • GET /api/status отвечает мгновенно из кэша и обновляется в фоне — не стоит считать, что он всегда отражает самое свежее состояние.