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

Протокол Model Context Protocol

Model Context Protocol (MCP) — это открытый стандарт, позволяющий агентам искусственного интеллекта взаимодействовать с внешними сервисами и источниками данных. Он обеспечивает совместимость таких приложений, как Claude, Claude Code, Codex, и редакторов, таких как Zed, Cursor или Visual Studio Code, с Tuist.

Tuist размещает серверную точку входа Model Context Protocol по адресу https://tuist.dev/mcp. Подключив к ней ваш клиент, агенты смогут получать доступ к данным ваших проектов Tuist, включая аналитику тестов, анализ нестабильных тестов и многое другое. Большинство инструментов работают только в режиме чтения и имеют доступ исключительно к данным проектов Tuist после аутентификации. Инструменты настройки аккаунта могут перечислять аккаунты, создавать организации, создавать проекты и добавлять существующих пользователей в организации, если у аутентифицированного пользователя есть необходимые разрешения. Каждый инструмент предоставляет аннотации, указывающие, работает ли он только в режиме чтения, может ли он вызвать изменения, которые трудно отменить, и может ли он изменять состояние публичного интернета. Инструменты настройки аккаунта требуют аутентификации пользователя. Они недоступны для токенов проектов или обычных токенов аккаунтов. Когда пользователь авторизует клиент в браузере или подтверждает регистрацию через auth.md, Tuist связывает эти учетные данные с пользователем только в точке входа Model Context Protocol, чтобы инструменты настройки могли завершить запрошенный рабочий процесс.

Tuist реализует протокол версии 2026-07-28. Запросы являются безсостоятельными: клиенты отправляют метаданные протокола с каждым запросом и могут вызывать инструменты напрямую без инициализации. server/discover возвращает идентификатор сервера, его возможности, поддерживаемые версии и инструкции. Идентификаторы сессий или независимые потоки событий отсутствуют. Клиенты, использующие поток инициализации версий 2025-06-18 или 2025-03-26, по-прежнему поддерживаются; они также работают без серверных сессий.

Model Context Protocol против навыков (skills)#

Инструменты Model Context Protocol и навыки могут пересекаться по функциональности. Учитывая текущее перекрытие между ними, выбирайте один подход для каждого рабочего процесса и используйте его последовательно, вместо того чтобы смешивать оба в одном потоке.

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

Конфигурация#

Добавьте https://tuist.dev/mcp в качестве удаленного сервера Model Context Protocol в вашем клиенте. Инструкции по инициализации сервера и публичная карточка сервера описывают OAuth 2.0 с динамической регистрацией клиента и стандартный поток авторизации через браузер непосредственно в тексте, не требуя от агентов загружать или следовать внешним документам аутентификации. Эти общесерверные инструкции сохраняют рекомендации по рабочему процессу общими: аутентификация инструментов не аутентифицирует локальные инструменты командной строки или интеграции с системами сборки, и агенты должны проверять запрашиваемые изменения через соответствующие инструменты Tuist. Настройка и проверки аутентификации, специфичные для системы сборки, документированы в руководствах по интеграции и подсказках. Tuist по-прежнему предоставляет как метаданные обнаружения Open Authorization, так и текущий протокол auth.md по адресу https://tuist.dev/auth.md отдельно.

Точка входа принимает безсостоятельный жизненный цикл запросов Model Context Protocol версии 2026-07-28, включая server/discover, наряду со старым жизненным циклом на основе сессий. Существующие клиенты могут продолжать использовать свой текущий метод подключения.

Клиенты, поддерживающие события Model Context Protocol, могут подписываться на события проекта. См. раздел События для получения информации о доступных событиях и требованиях к доставке.

Клиенты, которые уже поддерживают удаленную аутентификацию через браузер, могут продолжать аутентифицироваться в браузере. Клиенты и агенты, поддерживающие auth.md, могут регистрироваться анонимно, предоставлять доверенное утверждение идентичности провайдера или начинать процесс подтверждения электронной почты с аутентификацией сервиса. Регистрация возвращает утверждение идентичности, подписанное Tuist, которое агент обменивает на стандартной конечной точке токенов на часовой токен доступа. Tuist публикует свой открытый ключ подписи и поддерживает стандартное отзывание токенов и доставку событий безопасности от провайдера.

Неаутентифицированный агент должен прочитать заголовок WWW-Authenticate, возвращаемый точкой входа Model Context Protocol, получить метаданные защищенного ресурса, получить метаданные сервера авторизации и перейти по URL-адресу agent_auth.skill. Tuist также возвращает тот же локальный URL-адрес auth_md в теле ответа об отказе в доступе, чтобы клиенты, управляемые языковыми моделями, могли обнаружить этот поток без reliance на нативную интеграцию клиента. Локальный для развертывания документ является источником истины для имен конечных точек, тел запросов, опроса подтверждений и обмена утверждениями.

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

Точка входа использует группу областей видимости mcp. Анонимные учетные данные до подтверждения могут обнаруживать возможности и читать публичные руководства по интеграции, но они не рассматриваются как вошедшие в систему пользователи. После авторизации через браузер или подтверждения, учетные данные получают область видимости пользователя, и каждый инструмент применяет те же проверки авторизации, что и панель управления. Подробности см. в документации по группам областей видимости.

Инструменты работают с проектами, к которым у аутентифицированного пользователя уже есть доступ. Инструменты сборки для Xcode и Gradle принимают UUID сборки или URL-адрес дашборда. UUID должен однозначно идентифицировать один проект; если он встречается в нескольких проектах, инструмент возвращает ошибку «не найдено», вместо того чтобы выбирать отчёт другого проекта. Чтение данных через дашборд и API в рамках проекта остаётся доступным. Идентификаторы действующих лиц — это непроверенные метки, а не учётные данные или дополнительные права доступа.

Инструменты списка сборок и детализации предоставляют необязательные метаданные tuist_version: CLI Tuist для Xcode и Cargo, плагин Tuist Gradle для Gradle и библиотека tuist_ex для Mix. Xcode также предоставляет tuist_generation_version из связанного события генерации проекта, которое может отличаться от версии CLI, выполнившего загрузку. Отсутствующие значения равны null и не выводятся из данных сервера или другого отчёта. Bazel использует свой существующий bazel_version; детали запуска Once предоставляют once_version. Эти поля описывают сообщаемые версии, а не проверенную идентификацию или версии контракта взаимодействия. REST-эндпоинты сборок предоставляют те же метаданные. Существующие интеграции и навыки работы с нестабильными тестами не зависят от полей версий и не требуют изменений в рабочем процессе.

Операторы Tuist, исследующие аккаунт клиента, делают это через внутренние инструменты операций Tuist, которые записывают каждый вызов; прямое подключение к этой точке входа не даёт доступа сверх членства самого пользователя.

Claude Code

Выполните:

bash
claude mcp add --transport http tuist https://tuist.dev/mcp

Если безголовый клиент Claude Code не передаёт модели информацию о неудачном подключении к нативному серверу, потребуйте от агента проверить неаутентифицированный ответ протокола передачи гипертекста настроенной точки входа перед поиском в размещённой документации или редактированием проекта. Ответ направляет модель к локальному документу auth.md развёртывания, даже если аутентификация через браузер недоступна.

Codex

Выполните:

bash
codex mcp add tuist --url https://tuist.dev/mcp
codex mcp login tuist

Завершите вход через браузер перед запуском нового codex exec. Codex считывает инструкции сервера Tuist во время инициализации, поэтому запросы на оптимизацию Gradle автоматически получают рабочий процесс аутентификации и проверки.

Claude Desktop

Откройте Settings → Connectors → Add custom connector, затем установите:

  • Name:tuist
  • URL:https://tuist.dev/mcp

При появлении запроса завершите Open Authorization в браузере.

Pi

Pi не включает клиент Model Context Protocol. Вы можете установить стороннее расширение pi-mcp-adapter после изучения его исходного кода и последствий для безопасности:

bash
pi install npm:pi-mcp-adapter

Добавьте файл .mcp.json на уровне проекта:

json
{
"mcpServers": {
"tuist": {
"url": "https://tuist.dev/mcp",
"auth": false
}
}
}

Установка auth в значение false предотвращает скрытие неавторизованного ответа Tuist обработчиком аутентификации браузера адаптера. После этого безголовый агент может прочитать возвращённый URL auth_md и следовать процессу регистрации Tuist, обмена утверждением идентичности и опроса подтверждения. Настройте полученный токен доступа как bearer-токен или позвольте агенту выполнять аутентифицированные вызовы Model Context Protocol напрямую.

Если вы предпочитаете аутентификацию через браузер, установите auth в значение "oauth". Для этого потока держите один процесс активным с помощью режима удалённого вызова процедур Pi до завершения аутентификации:

bash
pi --mode rpc

Не разделяйте ожидающую аутентификацию браузера между отдельными вызовами pi --print, так как процесс, владеющий состоянием обратного вызова, уже завершился.

OpenCode

Добавьте сервер Tuist Model Context Protocol в opencode.json:

json
{
"$schema": "https://opencode.ai/config.json",
"mcp": {
"tuist": {
"type": "remote",
"url": "https://tuist.dev/mcp"
}
}
}

Затем аутентифицируйте сервер:

bash
opencode mcp auth tuist
Cursor

Откройте Cursor Settings → Tools & Integrations → Model Context Protocol Tools и добавьте:

  • Name:tuist
  • URL:https://tuist.dev/mcp
Visual Studio Code

Используйте Command Palette → MCP: Add Server, затем настройте сервер протокола передачи гипертекста со следующими параметрами:

  • Name:tuist
  • URL:https://tuist.dev/mcp
Zed

Откройте Agent panel → Settings → Add Custom Server, затем установите:

  • Name:tuist
  • URL:https://tuist.dev/mcp

Если ваш агент поддерживает auth.md, он может начать работу анонимно без открытия браузера. Доверенная идентичность провайдера также может завершить процесс без браузера, если идентичность провайдера уже связана. Для электронной почты с аутентификацией сервиса, анонимного подтверждения или первой ссылки на провайдера агент показывает вам ссылку на проверку Tuist и шестизначный код. Откройте ссылку, войдите в систему и введите код агента на странице Tuist. Никогда не отправляйте код обратно агенту. Метаданные сервера авторизации Tuist указывают непосредственно на собственный /auth.md развёртывания, который содержит точные формы запросов и опроса.

Интеграции систем сборки используют два набора учётных данных#

Учётные данные, используемые для инструментов Model Context Protocol, не аутентифицируют плагин Gradle или удалённые сервисы Bazel. Перед тем как агент изменит или проверит интеграцию Gradle или Bazel, он должен выполнить:

bash
tuist auth whoami --url https://tuist.dev

Если эта команда не аутентифицирована, агент должен остановиться и попросить пользователя выполнить:

bash
tuist auth login --url https://tuist.dev

Для локального или самостоятельно размещённого развёртывания замените URL в обеих командах и в tuist.toml. Сохраняйте одинаковое написание имени хоста везде. Например, localhost и 127.0.0.1 используют отдельные сохранённые учётные данные.

Возможности#

Инструменты#

Следующие инструменты доступны через сервер Tuist Model Context Protocol:

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

Инструменты, принимающие идентификатор одной записи, такой как build_run_id, test_run_id, test_case_id, bundle_id, run_id, generation_id или cache_run_id, также принимают URL-адрес этой записи из панели управления Tuist. Вставьте URL прямо из браузера вместо того, чтобы извлекать из него идентификатор.

Поиск по документации и сообществу#

Этот инструмент только для чтения выполняет поиск по документации Tuist, справочнику прикладного программного интерфейса, релизам на GitHub, форуму сообщества и задачам на GitHub через тот же поисковый движок, который работает на сайте документации. Результаты поиска по релизам включают продукт, версию, дату публикации и статус предварительной версии. По умолчанию выполняется поиск по стабильным релизам, предварительные релизы можно включить с помощью include_prereleases. Инструмент доступен только на сервере, размещённом Tuist, по адресу https://tuist.dev/mcp.

ИнструментОписаниеОбязательные параметры
search_tuistПоиск по публичной документации Tuist, справочнику прикладного программного интерфейса, релизам на GitHub, обсуждениям в сообществе и задачам на GitHub. При необходимости ограничьте поиск одним source (docs, api_reference, releases, forum, issues).query

Обратная связь#

Агенты могут сообщить команде Tuist, если инструмент или подсказка Tuist не сработали так, как они ожидали, например, выдали непонятный результат, ошибку, отсутствующие данные или недостающую возможность. Агентам предлагается предложить отчёт и отправить его только после вашего согласия. Каждый отчёт открывает диалог со службой поддержки Tuist, которая может ответить вам по электронной почте. Отчёт включает то, что ожидал агент, что произошло, необязательное предложение, ваш идентификатор пользователя Tuist, имя пользователя и электронную почту, а также организации, к которым вы принадлежите. Агенты также могут указать аккаунт и проект, в которых возникла проблема, чтобы команда знала, с какой организацией связаться; принимаются только аккаунты, к которым вы имеете доступ. Отчёты могут отправлять только агенты, вошедшие в систему как пользователь Tuist, и каждый пользователь может открывать до 10 отчётов в час. Инструмент доступен только на сервере, размещённом Tuist, по адресу https://tuist.dev/mcp.

ИнструментОписаниеОбязательные параметры
report_feedbackСообщить о проблеме с инструментом или подсказкой Tuist. При необходимости укажите tool_name, account_handle и project_handle, в которых это произошло, и добавьте suggestion.category, expected, actual

Ответы на основе исходного кода#

Эти инструменты только для чтения позволяют агентам использовать точную публичную ревизию исходного кода Tuist, развёрнутую вместе с размещённым сервером, в качестве источника истины для ответов, зависящих от текущего поведения. Они доступны только по адресу https://tuist.dev/mcp.

Совместимые клиенты получают фактические описания ревизии исходного кода инструментов, ссылки и ограничения результатов во время инициализации вместе с информацией об аутентификации OAuth. Эти описания не предписывают стиль ответа или рабочий процесс проверки. Пользователи могут задать вопрос напрямую, не вызывая сначала подсказку ask_tuist; подсказка остаётся доступной для явного рабочего процесса на основе исходного кода.

Каждая операция имеет фиксированные ограничения на параллелизм, длительность, обход, количество прочитанных байтов и размер ответа. Результаты поиска и списков включают поля truncated и truncation_reason. Если результат усечён, сузьте путь, шаблон файла или поисковый запрос вместо того, чтобы считать результат исчерпывающим.

ИнструментОписаниеОбязательные параметры
search_tuist_codeОтвечайте на вопросы о текущем поведении, значениях по умолчанию, конфигурации, функциональных флагах, обработке ошибок или недокументированных деталях, выполняя поиск по файлам исходного кода. Результаты включают окружающие строки, ссылки на исходный код, привязанные к ревизии, и статистику сканирования.pattern
list_tuist_filesОбнаруживайте подсистему исходного кода или близлежащие тесты, когда соответствующий путь неизвестен. Списки имеют ограниченную глубину и количество результатов.Нет
read_tuist_fileПросматривайте определённый диапазон строк в файле реализации, месте вызова или тесте после нахождения соответствующего пути. Усечённые ответы предоставляют next_start_line для продолжения.path

Проекты#

ИнструментОписаниеОбязательные параметры
list_accountsПеречисляет имена личных аккаунтов и аккаунтов организаций, доступные аутентифицированному пользователю, включая информацию о том, может ли каждый аккаунт создавать проекты.Нет
get_organizationПолучить список участников организации. Ожидающие приглашения требуют тех же прав администратора, что и панель управления; токены принятия приглашений никогда не возвращаются.account_handle
create_organizationСоздать организацию Tuist для аутентифицированного пользователя.handle
create_projectСоздать проект Tuist под аккаунтом, к которому имеет доступ аутентифицированный пользователь.account_handle, project_handle
add_organization_memberДобавить существующего пользователя Tuist в организацию или обновить роль существующего участника. Принимает user (по умолчанию), admin или viewer, где наблюдатель может читать панели управления и запуски, но не может ничего изменять.organization_handle, email
invite_organization_memberПригласить адрес электронной почты в организацию, независимо от того, принадлежит ли он существующему пользователю Tuist. Tuist отправляет по электронной почте ссылку для принятия, которая истекает через 14 дней; когда сервер не может отправить электронное письмо, email_sent имеет значение false, и ссылку необходимо скопировать из панели управления. Принимает user (по умолчанию), admin или viewer. Требуются права администратора организации.organization_handle, email
cancel_organization_invitationОтменить ожидающее приглашение в организацию, чтобы его ссылка больше не могла быть принята. Требуются права администратора организации.organization_handle, email
list_projectsПеречислить все проекты, доступные аутентифицированному пользователю.Нет
get_projectПолучить конфигурацию проекта и URL подключенного репозитория.account_handle, project_handle
connect_project_repositoryСвязать проект с репозиторием GitHub, к которому имеет доступ установка GitHub App аккаунта. Проект использует ветку по умолчанию репозитория. Требуются права администратора проекта.account_handle, project_handle, repository_full_handle
disconnect_project_repositoryУдалить связь проекта с его репозиторием GitHub. Требуются права администратора проекта.account_handle, project_handle

Токены аккаунта#

ИнструментОписаниеОбязательные параметры
list_account_tokensПеречислить метаданные токенов аккаунта без раскрытия значений токенов.account_handle
get_account_tokenПолучить метаданные токена аккаунта без раскрытия его значения.account_handle, token_id
list_project_tokensПеречислить метаданные токенов проекта без раскрытия значений токенов.account_handle, project_handle

Раннеры непрерывной интеграции#

ИнструментОписаниеОбязательные параметры
list_runner_jobsПеречислить задачи раннеров непрерывной интеграции для аккаунта.account_handle
get_runner_jobПолучить задачу раннера непрерывной интеграции.account_handle, workflow_job_id
list_runner_job_stepsПеречислить шаги, записанные для задачи раннера непрерывной интеграции.account_handle, workflow_job_id
list_runner_job_metricsПеречислить метрики машины, записанные для задачи раннера непрерывной интеграции.account_handle, workflow_job_id
list_runner_job_logsПеречислить до 500 захваченных строк лога для задачи раннера непрерывной интеграции.account_handle, workflow_job_id
list_runner_workflowsПеречислить сводки рабочих процессов непрерывной интеграции для аккаунта.account_handle
list_runner_profilesПеречислить профили раннеров непрерывной интеграции для аккаунта с меткой runs-on каждого.account_handle
get_runner_catalogПеречислить конфигурации машин и версии Xcode, которые может использовать профиль раннера.account_handle
create_runner_profileСоздать профиль раннера с указанием платформы, конфигурации машины и, для macOS, версии Xcode. При необходимости укажите, для каких веток сохранять изменения томов кэша. Требуются права администратора аккаунта или область действия account:runners:write.account_handle, name, platform, vcpus, memory_gb
update_runner_profileИзменить конфигурацию машины, версию Xcode профиля раннера или ветки, для которых сохраняются изменения пользовательского тома кэша. Пропущенные поля сохраняют свои значения. Требуются права администратора аккаунта или область действия account:runners:write.account_handle, profile_name
delete_runner_profileУдалить профиль раннера после подтверждения пользователем. Профили по умолчанию удалить нельзя. Требуются права администратора аккаунта или область действия account:runners:write.account_handle, profile_name

Инструменты томов раннера предоставляют те же данные, что и панель управления Volumes. Инструменты чтения требуют доступа к раннеру; очистка требует прав администратора аккаунта или области действия account:runners:write, а также подтверждения пользователя.

ИнструментОписаниеОбязательные параметры
list_runner_volumesФильтрация по имени и репозиторию, сортировка и пагинация томов.account_handle
get_runner_volumeРепозиторий, платформа, емкость, используемое пространство и последнее использование.account_handle, volume_id
list_runner_volume_jobsПагинированные ссылки на задачи и рабочие процессы, статус кэша, результат попадания и время монтирования.account_handle, volume_id
list_runner_job_volumesТома, смонтированные задачей.account_handle, workflow_job_id
get_runner_volume_analyticsСерии хранения, запуски задач, процент попаданий и тенденции. Необязательные параметры volume_id, start и end (ISO 8601); по умолчанию семь дней, максимум 90.account_handle
clear_runner_volumeОчистить сохраненное содержимое. Выполняющиеся задачи сохраняют свои приватные копии, но не могут их сохранить; последующие задачи начинаются с пустыми томами.account_handle, volume_id

Списки принимают параметры page и page_size (до 100). Инвентарь томов также принимает параметры name и repository (точные совпадения, объединяются через AND), sort_by (volume, repository, used_space, capacity, last_used) и sort_order (asc, desc). Неизвестные измерения и результаты попаданий остаются null. Статус кэша описывает, были ли сохранены изменения тома, а не успех задачи.

Вебхуки#

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

ИнструментОписаниеОбязательные параметры
list_webhook_endpointsСписок конечных точек вебхуков для аккаунта.account_handle
get_webhook_endpointПолучить конечную точку вебхука.account_handle, webhook_endpoint_id
list_webhook_delivery_attemptsСписок попыток доставки для конечной точки.account_handle, webhook_endpoint_id
get_webhook_delivery_attemptПолучить информацию о попытке доставки.account_handle, webhook_endpoint_id, delivery_attempt_id

Сборки Xcode#

Инструменты детализации сборок для Xcode, Gradle, Bazel, Mix и Cargo предоставляют существующую структуру custom_metadata: {tags, values}, включая данные об инфраструктуре, если они сообщаются. Значения остаются строками, а неизвестные ключи сохраняются. Например, tuist.cpu.available_processors описывает доступные во время выполнения логические процессоры, тогда как tuist.gradle.max_workers — это ограничение на количество рабочих процессов Gradle, а tuist.jvm.max_heap_bytes — ограничение кучи JVM, а не объем памяти хоста. Это ненадежные наблюдения клиента, а не проверенные идентификаторы раннеров. Отсутствующие наблюдения остаются отсутствующими; импортированные логи и старые клиенты могут не иметь метаданных инфраструктуры. Обновление метаданных ожидает согласованного обновления клиента/протокола.

ИнструментОписаниеОбязательные параметры
list_xcode_buildsСписок запусков сборок Xcode для проекта.account_handle, project_handle
get_xcode_buildПолучить подробную информацию о конкретном запуске сборки Xcode, включая временный URL-адрес для скачивания архива с исходным файлом .xcactivitylog.build_run_id
list_xcode_build_targetsСписок целей сборки для конкретного запуска сборки Xcode.build_run_id
list_xcode_build_filesСписок скомпилированных файлов для конкретного запуска сборки Xcode.build_run_id
list_xcode_build_stepsСписок записанных шагов сборки с указанием времени и результатов, без текста логов.build_run_id
get_xcode_build_stepПолучить один записанный шаг сборки, включая его лог и флаг усечения.build_run_id, step_id
list_xcode_build_issuesСписок проблем сборки (предупреждения и ошибки) для конкретного запуска сборки.build_run_id
list_xcode_build_cache_tasksСписок кэшируемых задач (попадания/промахи кэша) для конкретного запуска сборки Xcode.build_run_id
list_xcode_build_cas_outputsСписок выводов хранилища с адресацией по содержимому для конкретного запуска сборки Xcode.build_run_id

list_xcode_build_steps по умолчанию возвращает страницы по 20 шагов (максимум 100 через page_size), с параметрами page и pagination_metadata для навигации. Используйте search для поиска по заголовкам, проектам или целям, либо фильтруйте по точному совпадению project, target, category (например, swiftCompilation) и status (success или failure). Сортируйте по duration_ms для отображения самых медленных сначала (по умолчанию) или по start_ms для хронологического порядка. ID шагов используются для разрешения ничьих и возвращаются в виде десятичных строк для сохранения полной 64-битной точности. ID привязаны к сборке и не должны сопоставляться между разными сборками.

Необязательные параметры start_ms и end_ms выбирают шаги, попадающие в диапазон времени в миллисекундах от начала сборки; конец диапазона исключается. Оба инструмента принимают UUID сборки или URL панели управления в качестве build_run_id. Передайте полученный id шага без изменений в качестве step_id для получения его лога. Логи хранят до 64 КиБ на шаг, при этом log_truncated указывает на усеченный вывод.

Шаги собираются по умолчанию при обработке сборок Xcode. Записанные данные шагов хранятся 90 дней. Ответ списка включает поле availability: available, если записанные шаги существуют, даже если фильтры ничего не находят; processing, если сборка еще обрабатывается и шагов пока нет; или unavailable, если шаги не были записаны или срок их хранения истек.

Те же операции доступны через HTTP API по адресам GET /api/projects/{account_handle}/{project_handle}/xcode/builds/{build_id}/steps и GET /api/projects/{account_handle}/{project_handle}/xcode/builds/{build_id}/steps/{step_id}, с теми же фильтрами и пагинацией. Для обоих требуется доступ на чтение к проекту сборки.

Сборки Gradle#

ИнструментОписаниеОбязательные параметры
get_gradle_integration_guideВозвращает полную информацию об аутентификации, настройке проекта, плагине Gradle, политике кэширования и процессе проверки двумя сборками. Агенты должны вызывать этот метод перед редактированием существующего проекта Android или Gradle.Нет
list_gradle_buildsСписок запусков сборок Gradle для проекта, включая пользовательские метаданные. Фильтрация по пользовательскому тегу с помощью необязательного параметра tag.account_handle, project_handle
get_gradle_buildПолучить метаданные сборки и количество задач/попаданий кэша.build_run_id
list_gradle_build_tasksСписок результатов задач, идентификатора композитной сборки, возможности кэширования и статуса инкрементальной сборки.build_run_id
list_gradle_build_stepsСписок задач с замерами времени, конфигурации и преобразований, с поиском, метаданными и фильтрами по пересекающимся временным интервалам.build_run_id
get_gradle_build_stepПросмотр метаданных записанного шага по непрозрачному ID; логи отдельных шагов недоступны.build_run_id, step_id

Списки шагов Gradle и Bazel по умолчанию возвращают 20 результатов (максимум 100), поддерживают search, точное совпадение project, target, category и status, фильтры по пересекающимся интервалам start_ms / end_ms (конец исключается) и сортировку по duration_ms или start_ms. Передавайте полученные ID без изменений; они привязаны к своей сборке. Списки содержат поля time_origin и coverage. Старые отчеты Gradle используют first_recorded_timestamp, так как время начала сборки не было загружено. Профили Bazel содержат все записанные интервалы с покрытием trace_profile и profile_start в качестве начала отсчета времени. Для старых сборок используются сохраненные сводки BEP. Исходные записи истекают через 90 дней. Детали Bazel включают очищенные логи действий, если они опубликованы; поле log для деталей Gradle равно null. Подсказка compare_builds использует это покрытие, чтобы отличать полные трассировки Bazel от сохраненных сводок, и направляет агентов к деталям шагов для получения результатов действий и логов перед проверкой общего вывода вызова.

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

Вызовы Bazel#

ИнструментОписаниеОбязательные параметры
get_bazel_integration_guideВозвращает информацию об аутентификации, настройке проекта, конфигурации Bazel и процессе верификации.Нет
list_bazel_invocationsСписок завершенных вызовов протокола событий сборки Bazel с метриками сборки, ограниченной временной шкалой выполнения, диагностикой критического пути и коррелированными итогами удаленного кэша для проекта.account_handle, project_handle
get_bazel_invocationПолучить один завершенный вызов Bazel с метриками сборки, ограниченной временной шкалой выполнения, диагностикой критического пути и коррелированными итогами удаленного кэша.account_handle, project_handle, invocation_id
list_bazel_build_stepsСписок записанных интервалов профиля Bazel с фильтрами и явным указанием покрытия.account_handle, project_handle, invocation_id
get_bazel_build_stepПросмотр записанного шага Bazel, его опубликованного результата действия и очищенного лога.account_handle, project_handle, invocation_id, step_id
list_bazel_invocation_logsСписок очищенных логов тестов, захваченных для вызова Bazel, в порядке выполнения.account_handle, project_handle, invocation_id
get_bazel_invocation_logПолучить один очищенный лог теста, захваченный для вызова Bazel.account_handle, project_handle, invocation_id, invocation_log_id
list_bazel_cache_eventsСписок сырых наблюдений удаленного кэша Bazel с указанием операции, конечной точки и времени наблюдения, с возможностью фильтрации по вызову, результату или операции.account_handle, project_handle
get_bazel_cache_eventПолучить одно сырое наблюдение удаленного кэша Bazel.account_handle, project_handle, cache_event_id

Сборки Cargo#

ИнструментОписаниеОбязательные параметры
list_cargo_buildsСписок сборок Cargo для проекта, от новых к старым. Фильтрация по git_branch, status, is_ci или command. Результаты выполнения тестов Cargo доступны через инструменты тестирования, а не через этот список сборок.account_handle, project_handle
get_cargo_buildПолучить метаданные сборки, агрегированные счетчики кэша и до 500 записанных задач компилятора с диагностикой. compilations_truncated указывает на пропущенные задачи; диагностика охватывает только возвращенные задачи.account_handle, project_handle, build_id

Установите include_cache_inspection: true в get_cargo_build, чтобы получить проверенные решения задач и операции CAS, ограниченные 4 МБ. По умолчанию, а также при отсутствии или некорректности записей, cache_inspection равно null. Учитывайте флаг частичного захвата truncated; передачи не определяют локальное или удаленное происхождение каждого попадания в кэш задачи. HTTP-эндпоинт деталей принимает тот же параметр запроса.

Сборки Mix#

ИнструментОписаниеОбязательные параметры
list_mix_buildsСписок сборок компиляции Mix (Elixir) для проекта, от новых к старым, включая пользовательские метаданные. Фильтрация по git_branch, status, is_ci или mix_env.account_handle, project_handle
get_mix_buildПолучить метаданные сборки, количество диагностических сообщений и сводку кэша зависимостей.account_handle, project_handle, build_id

Трассировки сборок#

ИнструментОписаниеОбязательные параметры
get_build_traceПолучить ссылку для скачивания временной шкалы сборки Xcode, Gradle, Bazel или Mix в виде файла трассировки, который можно открыть в Perfetto.account_handle, project_handle, build_id

build_id — это ID запуска сборки (ID вызова для Bazel) или URL сборки в дашборде. Возвращаемый trace_url предоставляет JSON-файл Chrome Trace Event. Любой, у кого есть ссылка, может скачать трассировку этой сборки без других учетных данных до момента expires_at, который наступает через час после вызова. Агенты могут скачать её с помощью curl, передать вам для открытия в Perfetto или запросить через trace_processor Perfetto. Трассировка содержит записанные шаги, сгруппированные по параллельности, дорожку, охватывающую всю сборку, а также счетчики CPU и памяти, если сборка записывала метрики машины. Она содержит те же данные, что и инструменты шагов выше, но без логов. Дашборд предлагает тот же файл на вкладке Timeline каждой сборки.

Запуски Once#

ИнструментОписаниеОбязательные параметры
list_once_runsСписок запусков Once для проекта, от новых к старым. Фильтрация по kind (build, test или generic), status, is_ci или git_branch. Запуски, которые еще не завершены, имеют статус in_progress.account_handle, project_handle
get_once_runПолучить запуск с итоговыми данными по действиям, сводкой кэша и, для тестовых запусков, итоговыми данными по тестам.account_handle, project_handle, run_id

ID сборок Cargo, сборок Mix и запусков Once уникальны в пределах проекта. Те же данные для чтения доступны через HTTP API по адресам GET /api/projects/{account_handle}/{project_handle}/cargo/builds, .../mix/builds и .../once/runs, каждый из которых имеет эндпоинт деталей для одного ID.

Задачи, действия, модули и файлы#

Эти инструменты, работающие в контексте проекта, исследуют постоянные идентификаторы сборок across запусков. Начните с list_build_entities, затем передайте полученный стабильный id с тем же kind в get_build_entity или list_build_entity_history вместе с account_handle и project_handle. Идентификатор сборки или вызова не требуется.

ИнструментОписаниеОбязательные параметры
list_build_entitiesСписок задач, модулей, действий или файлов одного типа, обнаруженных в сборках проекта.account_handle, project_handle, kind
get_build_entityПолучить одну сущность сборки с её нативным идентификатором и аналитикой за выбранный период.account_handle, project_handle, kind, id
list_build_entity_historyСписок записанных выполнений, компиляций или событий кэша для одной сущности сборки, от новых к старым.account_handle, project_handle, kind, id
kindИнструментарийСписки истории
bazel_actionsДействия BazelВыполнения действий, сообщённые через BEP
gradle_tasksЗадачи GradleВыполнения задач
xcode_modulesМодули XcodeКомпиляции и события кэша модулей
once_actionsДействия OnceВыполнения
mix_filesСкомпилированные файлы MixКомпиляции
mix_modulesСкомпилированные модули MixКомпиляции
cargo_cratesКрейты CargoЗаписанные вызовы rustc

Эти инструменты внедряются постепенно и возвращают данные только для проектов, где они включены; для остальных проектов возвращается ошибка вместо пустого результата. Тип доступен только для проектов, использующих соответствующий инструментарий сборки. Инструменты принимают ограниченные фильтры start_at/end_at, environment (any, ci или local) и точный branch. list_build_entities принимает q; list_build_entity_history поддерживает непрозрачные курсоры after/before. Неизвестные наблюдения времени или кэша остаются недоступными, а не превращаются в нули или промахи. История ссылается на записанного родителя и нативное выполнение для детализации с использованием существующих инструментов запусков.

Метрики get_build_entity включают duration_samples — количество наблюдений с записанным временем: подлинные нулевые длительности учитываются, отсутствующее время — нет. Это количество может быть меньше количества наблюдений; недоступная статистика длительности остаётся null.

Длительности модулей Xcode получены из измеренных компиляций целей в логах сборки. Разрешения кэша модулей и цели без работы по компиляции не вносят вклад в выборки длительности. Наблюдения компиляции ссылается на сборку Xcode; события кэша — на команду генерации или кэша.

Действия Bazel идентифицируются по метке цели, мнемонике и настроенному первичному выводу, сохраняя раздельные действия и конфигурации различными без опоры на зависящие от ввода дайджесты кэша. История записывает выполнения, сообщённые через BEP, а не поиски в кэше или фазы трассировки. Полное покрытие выполнения требует --build_event_publish_all_actions; доставка артефактов выполняется по принципу best effort, поэтому отсутствующие наблюдения не являются доказательством того, что работа не выполнялась. Старые payloads Kura без стабильной идентичности или начала выполнения всё ещё принимаются, но не индексируются. Отсутствующие измерения времени окончания остаются недоступными, а подлинные нулевые длительности учитываются.

Длительности модулей Mix измеряют компиляцию содержащего файла, а не независимо измеренную работу модуля. Действия Once используют объявленные слоты target/capability/index, когда клиент сообщил сопоставления целей; одни лишь диагностические метки не являются стабильными идентификаторами. Существующие клиенты и инструменты уровня запуска поддерживаются без изменений.

Крейты Cargo группируются по точно записанному корню крейта, имени и типу. Изменения пути checkout могут разделять истории, а профили сборки, возможности и тройки целей не различаются. История измеряет вызовы rustc, а не работу по файлам или попадания в кэш; отсутствующие задания не устанавливают удаления или полную инвентаризацию рабочего пространства.

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

Новые наблюдения индексируются после развертывания; эта функция не заполняет ретроспективно существующую телеметрию запусков. Метаданные идентичности хранятся дольше отдельных наблюдений в соответствии с политикой хранения данных.

Тесты#

ИнструментОписаниеОбязательные параметры
list_test_runsСписок запусков тестов для проекта. Поля query — это git_branch, scheme и status: field:"value" соответствует точно, field~"value" соответствует подстроке без учёта регистра, а ведущий - отрицает любой оператор. Например, -git_branch~"gh-readonly-queue" исключает ветки очереди слияния. Фильтры запроса, разделённые пробелами, и явные аргументы объединяются с семантикой AND.account_handle, project_handle
get_test_runПолучить подробные метрики для запуска теста, включая временные URL-адреса для скачивания его пакета результатов (.xcresult) и архива сессии.test_run_id
list_test_module_runsСписок запусков тестовых модулей для конкретного запуска теста.test_run_id
list_test_suite_runsСписок запусков тестовых наборов для конкретного запуска теста, с возможностью фильтрации по модулю.test_run_id
list_test_casesСписок тест-кейсов для проекта (поддерживает фильтры, такие как flaky).account_handle, project_handle
get_test_caseПолучить подробные метрики для тест-кейса, включая уровень надёжности, уровень нестабильности и количество запусков.test_case_id или identifier + account_handle + project_handle
list_test_case_runsСписок запусков тест-кейсов с возможностью фильтрации по тест-кейсу или запуску теста.account_handle, project_handle
get_test_case_runПолучить подробную информацию об ошибках и повторениях для конкретного запуска тест-кейса.test_case_run_id
list_test_case_run_attachmentsСписок вложений для запуска тест-кейса. Каждое вложение содержит временный URL-адрес для скачивания.test_case_run_id
list_test_case_eventsСписок изменений состояния тест-кейса, таких как игнорирование сбоев или пропуск.test_case_id
update_test_caseОбновить состояние тест-кейса или классификацию нестабильности. Изменение может отправить событие на настроенные конечные точки вебхуков, включая внешние сервисы.test_case_id или identifier + account_handle + project_handle
list_xcode_test_targetsСписок результатов целей выборочного тестирования для запуска теста.test_run_id
get_coverageПолучить покрытие кода проекта с его целями для конкретного коммита или последнего полного коммита ветки. Без git_commit_sha или branch считывается информация из ветки по умолчанию.account_handle, project_handle
list_coverage_filesСписок файлов, измеренных покрытием кода коммита, с их построчным покрытием, для конкретного коммита или последнего полного коммита ветки. Поддерживает search, сортировку и пагинацию.account_handle, project_handle
get_coverage_fileПолучить покрытие кода файла и его функций для конкретного коммита или последнего полного коммита ветки. Установите include_lines, чтобы получить количество выполнений для каждой строки.account_handle, project_handle, path

Инструменты покрытия кода доступны аккаунтам с включенным покрытием кода.

Бандлы#

ИнструментОписаниеОбязательные параметры
list_bundlesСписок бандлов (бинарных файлов приложений) для проекта. С возможностью фильтрации по git_branch и tags (все теги должны совпадать точно).account_handle, project_handle
get_bundleПолучить подробную информацию о конкретном бандле, включая пользовательские теги.bundle_id
get_bundle_artifact_treeПолучить полное дерево артефактов для бандла в виде плоского списка, отсортированного по пути.bundle_id

list_bundles принимает tags: ["paid", "production"] для различения вариантов сборки или окружений. Теги — это метки с учётом регистра, содержащие буквы, цифры, дефисы или знаки подчёркивания, не более 10 тегов и 50 символов на тег. Результаты списков и деталей включают custom_metadata.tags. Счётчики пагинации и фильтры по веткам применяются к результатам с тегами; отсутствие tags сохраняет поведение без фильтрации. Неверные фильтры тегов возвращают ошибку вместо расширения запроса.

Генерации#

ИнструментОписаниеОбязательные параметры
list_generationsСписок запусков генераций для проекта.account_handle, project_handle
get_generationПолучить подробную информацию о конкретном запуске генерации.generation_id

Запуски кэша#

ИнструментОписаниеОбязательные параметры
list_cache_runsСписок запусков кэша для проекта.account_handle, project_handle
get_cache_runПолучить подробную информацию о конкретном запуске кэша.cache_run_id
list_xcode_module_cache_targetsСписок целей кэша модулей для генерации или запуска кэша, показывающий статус попаданий/промахов кэша для каждой цели и хеши диагностических компонентов, включая дополнительные входные данные для хеширования.run_id

Превью#

ИнструментОписаниеОбязательные параметры
list_previewsСписок доступных для обмена превью приложений для проекта.account_handle, project_handle
get_previewПолучить превью и временные URL-адреса для скачивания его сборок.preview_id
get_latest_previewНайти последнее превью для работающего бинарного файла приложения.account_handle, project_handle, binary_id, build_version

Автоматизации#

ИнструментОписаниеОбязательные параметры
list_automation_alertsСписок оповещений автоматизации для проекта.account_handle, project_handle
get_automation_alertПолучить оповещение автоматизации.alert_id
list_automation_alert_revisionsСписок истории изменений для оповещения автоматизации. Учетные данные действий скрыты.alert_id
list_project_notification_alertsСписок правил оповещений уведомлений проекта. Требуются те же права администратора, что и на странице настроек дашборда. Адреса вебхуков скрыты.account_handle, project_handle

События#

Клиенты, использующие жизненный цикл Model Context Protocol без сохранения состояния 2026-07-28, могут вызывать events/list для обнаружения событий и их схем полезной нагрузки:

СобытиеКогда отправляетсяФильтр подписки
test_case.marked_flakyТест-кейс меняется с нестабильного на стабильный или наоборот.account_handle, project_handle
build.failedЛокальная сборка или сборка в системе непрерывной интеграции Xcode, Gradle или Bazel завершается с ошибкой.account_handle, project_handle
test_run.failedЛокальный запуск тестов или запуск тестов в системе непрерывной интеграции завершается с ошибкой, включая объединенный шардированный запуск или заброшенный запуск.account_handle, project_handle
ci_job.failedЗадача раннера Tuist завершается с ошибкой.account_handle

Для подписки клиент вызывает events/subscribe с именем события, хэндлами, указанными выше в arguments, и доставкой webhook, содержащей URL обратного вызова https:// и секрет подписи whsec_. События проекта требуют членства в аккаунте и доступа на чтение к соответствующим данным тестов или сборок; события задач раннера требуют членства в аккаунте и доступа на чтение к раннеру. Заявленные токены доступа auth.md, заявленные токены аккаунта и гранты авторизации браузера могут создавать подписки; доставка останавливается, когда связанные учетные данные больше не активны. Каждый пользователь может иметь до 25 активных подписок. Tuist отправляет проверочный запрос на обратный вызов перед сохранением подписки. Обратный вызов должен вернуть объект, содержащий то же значение challenge. Подписка действует семь дней по умолчанию, может быть обновлена путем повторной подписки и прекращает доставку при удалении доступа или учетных данных пользователя. Необязательный параметр ttlMs ограничен диапазоном от одного часа до 30 дней. Tuist повторяет попытки вызова тайм-аута и отменяет подписку после как минимум трех последовательных тайм-аутов в течение пяти минут; подпишитесь снова после восстановления обратного вызова.

При возникновении события Tuist отправляет его идентификатор ресурса и URL дашборда на обратный вызов. Ошибки сборки и запуска тестов также включают is_ci и git_branch, поэтому клиенты могут игнорировать локальные ошибки или фильтровать по ветке. События сборки включают build_system; события задач раннера включают как workflow_job_id, так и workflow_run_id. Запрос включает идентификатор подписки и заголовки подписи Standard Webhooks, чтобы клиент мог проверить его происхождение. Tuist повторяет неудачные доставки, поэтому клиентам следует использовать стабильный eventId для отбрасывания дубликатов. Полезная нагрузка не содержит имен тестов, логов и сообщений об ошибках; клиент может получить эти детали через инструменты выше и решить, уведомлять ли команду или начать отладку. Клиенты могут остановить доставку с помощью events/unsubscribe.

Подсказки#

ПодсказкаОписание
fix_flaky_testНаправляет вас через процесс исправления нестабильного теста, анализируя шаблоны сбоев, выявляя первопричину и применяя целенаправленное исправление.
compare_buildsНаправляет вас через процесс сравнения сборок для выявления регрессий производительности, изменений кэша и проблем сборки. Использует нативные инструменты для проектов Xcode, Gradle, Bazel и Cargo. Сравнения Cargo сохраняют частичное покрытие компилятора и различают оценочную работу компилятора от сэкономленного времени.
compare_test_runsНаправляет вас через процесс сравнения двух запусков тестов для выявления регрессий, новых сбоев и нестабильных тестов.
compare_bundlesНаправляет вас через процесс сравнения двух бандлов для выявления изменений размера по всему дереву артефактов.
compare_test_caseНаправляет вас через процесс сравнения поведения тест-кейса в двух ветках или временных периодах.
compare_generationsНаправляет вас через процесс сравнения двух запусков генераций для выявления регрессий производительности и изменений кэша модулей.
compare_cache_runsНаправляет вас через процесс сравнения двух запусков кэша для выявления изменений эффективности кэша и регрессий на уровне целей.
integrate_gradle_projectНаправляет вас через процесс интеграции Tuist в существующий проект Gradle. Включает отдельную аутентификацию инструмента и Gradle, обнаружение аккаунта, создание проекта, политику удаленного кэша, аналитику сборки и проверку считыванием.
integrate_bazel_projectНаправляет вас через процесс создания или выбора проекта Bazel, аутентификации командной строки, настройки удаленного кэша и аналитики сборки, а также проверки интеграции через данные сборки Tuist.
integrate_xcode_projectНаправляет вас через процесс интеграции Tuist в существующий проект Xcode. Поддерживает кэш Xcode, аналитику сборки, аналитику тестов и шардирование тестов.
ask_tuistОтвечает на вопрос о Tuist, используя общедоступные материалы для контекста и сфокусированные доказательства реализации и тестирования как источник истины для текущего поведения. Требуется question и ссылается на доказательства, привязанные к ревизии.

Подсказки с данными проекта принимают account_handle и project_handle для ограничения исследования конкретным проектом. Подсказки сравнения также принимают аргументы base и head для указания двух сравниваемых элементов (по ID, URL дашборда или имени ветки). ask_tuist принимает question вместо параметров проекта. integrate_gradle_project также принимает features, список интеграций Gradle через запятую: remote_cache, build_insights, test_insights, flaky_tests и test_sharding. integrate_bazel_project принимает необязательный server_url для самостоятельного размещения или локальных установок. integrate_xcode_project принимает features с xcode_cache, build_insights, test_insights и test_sharding.

Возможности подсказки интеграции Gradle#

Подсказка integrate_gradle_project и инструмент get_gradle_integration_guide документируют полный рабочий процесс настройки. Инструмент также упоминается в инструкциях инициализации сервера, что делает его обнаруживаемым агентами, которые не перечисляют подсказки.

ВозможностьЧто настраивает агент
remote_cacheВключает кэш сборки Gradle, настраивает политику загрузки удаленного кэша Tuist и рекомендует загружать только с раннеров непрерывной интеграции с локальным доступом только для чтения.
build_insightsПрименяет плагин Tuist Gradle и при необходимости настраивает поведение загрузки аналитики сборки.
test_insightsПрименяет плагин Tuist Gradle, чтобы результаты задачи Gradle Test автоматически загружались.
flaky_testsРуководит настройкой обнаружения нестабильных тестов, опционального использования плагина Gradle Test Retry и конфигурации карантина тестов.
test_shardingДобавляет рабочий процесс непрерывной интеграции для tuistPrepareTestShards, генерации матрицы шардов и выполнения тестов на основе TUIST_SHARD_INDEX.

Когда features пропущен, подсказка просит агента уточнить, какие интеграции хочет пользователь, или определить минимально полезный набор из запроса перед редактированием проекта Gradle.

Возможности подсказки интеграции Xcode#

Подсказка integrate_xcode_project документирует все интеграции с Xcode, которые поддерживает Tuist:

ВозможностьЧто настраивает агент
xcode_cacheНастраивает tuist setup cache, параметры кэша сгенерированного проекта, ручные настройки сборки кэша Xcode и политику загрузки, ограниченную раннерами непрерывной интеграции.
build_insightsНастраивает tuist inspect build, tuist xcodebuild, -resultBundlePath и опциональные метрики машины через tuist setup insights.
test_insightsНастраивает tuist inspect test, пост-действия тестирования схем и генерацию бандлов результатов для запусков тестов в непрерывной интеграции.
test_shardingДобавляет рабочий процесс планирования шардов для Xcode или сгенерированного проекта и выполнения шардов с TUIST_SHARD_INDEX.

Если features не указан, подсказка просит агента уточнить, какие интеграции нужны пользователю, или вывести минимально полезный набор из запроса перед редактированием проекта Xcode.