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

ИНТЕГРАЦИИ / MODEL CONTEXT PROTOCOL

MCP Milten: аудиты сайта в AI-ассистенте

Подключите Codex, Cursor или Claude Code к сохранённым аудитам Milten. Через Model Context Protocol (MCP) ассистент получает метрики скорости сайта и рекомендации по оптимизации с данными из отчёта.

Milten MCP

HTTP

Как ассистент работает с аудитом Milten

  1. Найти аудит

    list_audits
  2. Прочитать измерения

    get_audit_report
  3. Получить план оптимизации

    get_optimization_plan

Права доступа

Ключ читает только ваши сохранённые аудиты. С правом audits:write можно запускать и повторять аудиты в пределах дневной квоты.

Как подключить MCP Milten

MCP-сервер Milten работает удалённо. Добавьте его адрес и токен доступа в клиент с поддержкой Streamable HTTP и собственного заголовка Authorization. Устанавливать пакет Milten на компьютер не нужно.

Адрес сервера
https://milten.io/mcp
Авторизация
Authorization: Bearer <PAT>

Что понадобится

Ключ читает только ваши сохранённые аудиты. С правом audits:write можно запускать и повторять аудиты в пределах дневной квоты.

Codex

Замените <PAT> секретом токена и выполните весь блок в Bash или Zsh. Он добавит сервер и сохранит Authorization в http_headers файла конфигурации Codex (~/.codex/config.toml по умолчанию). Повторный запуск заменит настройки milten. Перезапустите Codex. Файл содержит секрет: не публикуйте его.

Терминал
codex mcp add milten --url https://milten.io/mcp &&
cat >> "${CODEX_HOME:-$HOME/.codex}/config.toml" <<'EOF'

[mcp_servers.milten.http_headers]
Authorization = "Bearer <PAT>"
EOF
Документация клиента ↗
Cursor

Добавьте запись milten в mcpServers: в файле ~/.cursor/mcp.json — для всех проектов, в .cursor/mcp.json — для одного проекта. Сохраните записи других серверов.

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

.cursor/mcp.json
{
  "mcpServers": {
    "milten": {
      "url": "https://milten.io/mcp",
      "headers": {
        "Authorization": "Bearer ${env:MILTEN_MCP_TOKEN}"
      }
    }
  }
}
Документация клиента ↗
Claude Code

Добавьте запись в .mcp.json проекта. Claude Code прочитает переменную окружения при запуске. Если клиент запросит разрешение, подтвердите подключение сервера проекта.

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

.mcp.json
{
  "mcpServers": {
    "milten": {
      "type": "http",
      "url": "https://milten.io/mcp",
      "headers": {
        "Authorization": "Bearer ${MILTEN_MCP_TOKEN}"
      }
    }
  }
}
Документация клиента ↗

Проверка подключения

list_projects, list_monitoring_pages, list_audits, get_audit_status, get_audit_report, get_optimization_plan, get_audit_section, compare_audits, get_monitoring_history. audits:write: start_audit, rerun_audit.

Как получить токен доступа Milten

Создавайте персональные токены доступа (PAT) и управляйте ими в профиле, в разделе «API-ключи». MCP Milten принимает их через Authorization: Bearer. Вход через cookies браузера и OAuth для MCP не поддерживается.

Создайте токен доступа

Откройте «API-ключи» в профиле. Укажите название и срок действия, затем нажмите «Создать токен».

Открыть API-ключи

Скопируйте секрет: он показывается только один раз. Сохраните его в надёжном месте и передайте клиенту одним из способов настройки выше. Идентификатор id останется в списке для отзыва токена.

Ключ читает только ваши сохранённые аудиты. С правом audits:write можно запускать и повторять аудиты в пределах дневной квоты.

Просмотр и отзыв токенов

В разделе «API-ключи» можно посмотреть названия, права, сроки действия и последнее использование токенов, а также отозвать их. Для управления через API: GET /v1/personal-access-tokens/ возвращает метаданные без секретов; DELETE с {id} токена отзывает его и возвращает 204 No Content. Для этих запросов к API аккаунта нужна активная сессия браузера.

API аккаунта
GET /v1/personal-access-tokens/
DELETE /v1/personal-access-tokens/{id}

Инструменты MCP: аудиты, отчёты и план оптимизации

MCP-клиент передаёт эти JSON-аргументы в tools/call. Для запроса отчёта или плана замените UUID из примера на auditId из ответа list_audits. Нужен идентификатор аудита, а не URL сайта.

list_projects

Список собственных проектов с ID, названием и URL.

Аргументы
page?, limit?
Ответ
projects, count, page, limit, hasMore
list_projects · JSON
{
  "page": 1,
  "limit": 20
}

list_monitoring_pages

Список собственных страниц мониторинга с ID, URL, расписанием и условиями замера. Используйте monitoringUnitId для чтения истории.

Аргументы
projectId?, page?, limit?
Ответ
pages, count, page, limit, hasMore
list_monitoring_pages · JSON
{
  "page": 1,
  "limit": 20
}

start_audit

Запускает новый аудит и возвращает auditId. При повторной отправке запроса используйте тот же requestId.

Аргументы
requestId, url, operation, region; projectId?, formFactor?, deviceName?, cpu?, network?, lang?, maxPages?, skipThirdParty?
Ответ
auditId, statusTool, reportTool
start_audit · JSON
{
  "requestId": "6166f8ee-bb4e-4366-b359-0d321dbca341",
  "url": "https://example.com/",
  "operation": "seo",
  "region": "ru-mow"
}

rerun_audit

Повторяет собственный аудит с сохранёнными настройками. Для нового запуска нужен новый requestId.

Аргументы
auditId, requestId
Ответ
auditId, statusTool, reportTool
rerun_audit · JSON
{
  "auditId": "123e4567-e89b-42d3-a456-426614174000",
  "requestId": "93759350-c5d3-45dd-80c8-e8ca170df3ed"
}

get_audit_status

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

Аргументы
auditId
Ответ
audit, conditions, sections, trustNote
get_audit_status · JSON
{
  "auditId": "123e4567-e89b-42d3-a456-426614174000"
}

list_audits

Возвращает список ваших аудитов. Можно выбрать аудиты одного проекта.

Аргументы
Все поля необязательны. projectId: UUID проекта; page: целое число ≥ 1 (по умолчанию 1); limit: целое число от 1 до 50 (по умолчанию 10). url?, operation?, status?, dateFrom?, dateTo?
Ответ
В audits — auditId, url, operation, status и createdAt, а также projectId и error, если они есть. count — общее количество; page и limit описывают страницу. При truncated: true повторите запрос с меньшим limit. Статус: running, completed или failed.
list_audits · JSON
{
  "page": 1,
  "limit": 10
}

get_audit_report

Возвращает все сохранённые разделы отчёта и краткую сводку метрик.

Аргументы
auditId: обязательный UUID аудита из list_audits.
Ответ
В audit — сведения об аудите; в filling — все сохранённые разделы в формате {type, data}, включая Speed Scanner, HAR, CrUX и llmAdvice. analysis содержит дополнительную сводку метрик и проблем. trustNote помечает контент сайта как недоверенные данные. Лимит данных ответа по умолчанию — 1 МиБ; при превышении возвращается ошибка, а не обрезанный отчёт.
get_audit_report · JSON
{
  "auditId": "123e4567-e89b-42d3-a456-426614174000"
}

get_optimization_plan

Возвращает сохранённый план из llmAdvice, который показан в отчёте. MCP не генерирует новые рекомендации и не вызывает LLM.

Аргументы
auditId: обязательный UUID; focus: all (по умолчанию), lcp, inp, cls или backend; limit: целое число от 1 до 25 (по умолчанию 10).
Ответ
В plan — source, summary, recommendations и truncated. Сохраняются порядок и поля рекомендаций: priority (critical, medium или low), metrics, metricSavings, title, resources, evidence, action, effect и verification. focus фильтрует по metrics; backend соответствует TTFB. При сокращении списка через limit truncated равен true. Старый текстовый план доступен в output без фильтрации. Если план отсутствует, прочитайте diagnostic.
get_optimization_plan · JSON
{
  "auditId": "123e4567-e89b-42d3-a456-426614174000",
  "focus": "lcp",
  "limit": 3
}

get_audit_section

Читает последнюю сохранённую секцию отчёта. Большие массивы можно получать по частям.

Аргументы
auditId и section обязательны. section — значение type из filling, например har. path — необязательный JSON Pointer, например /log/entries. Для массивов: offset от 0, limit 1–200 (по умолчанию 50). Для остальных данных параметры пагинации не нужны.
Ответ
data сохраняет исходные поля и null. Для массива возвращаются total, nextOffset и truncated; продолжайте с nextOffset, пока truncated не станет false. Слишком большой ответ даёт ошибку: выберите более узкий path или уменьшите limit.
get_audit_section · JSON
{
  "auditId": "123e4567-e89b-42d3-a456-426614174000",
  "section": "seo",
  "path": "/pages",
  "limit": 5
}

compare_audits

Сравнивает два ваших аудита одного URL и одного типа проверки: измерения, проблемы по порогам и сохранённые рекомендации.

Аргументы
baselineAuditId — исходный аудит, candidateAuditId — повторный. Оба UUID возьмите из list_audits. Лабораторные метрики поддерживаются для basic, inp и ttfb.
Ответ
delta = candidate − baseline; отсутствующие значения — null. comparable и warnings указывают ограничения сравнения. findings разделены на added, resolved, persisting и uncompared. Рекомендации сопоставляются по точному title; оба сохранённых плана включены в ответ.
compare_audits · JSON
{
  "baselineAuditId": "123e4567-e89b-42d3-a456-426614174000",
  "candidateAuditId": "e6723288-f28c-4b62-8a4e-7dc395958c0c"
}

get_monitoring_history

Возвращает сохранённые замеры вашей страницы мониторинга, начиная с новых. Не запускает проверку.

Аргументы
Обязателен monitoringUnitId — Core UUID страницы мониторинга (coreMonitoringUnitId), не auditId. dateFrom и dateTo — включительные границы RFC 3339; по умолчанию последние 30 дней. page от 1, limit 1–50 (по умолчанию 20).
Ответ
results содержат дату, метрики, устройство, регион и affectedAlert. Ответ включает count и hasMore. Для следующих страниц повторно передавайте полученные dateFrom и dateTo. Старые нули могут означать отсутствие данных; INP — лабораторный замер, не CrUX p75.
get_monitoring_history · JSON
{
  "monitoringUnitId": "e09aa948-a541-4404-bcdc-9e5621c11891",
  "page": 1,
  "limit": 20
}

Примеры запросов к AI-ассистенту

После подключения отправьте эти сообщения в чат ассистента. Он вызовет MCP-инструменты и объяснит результаты. Сообщения не являются отдельными командами сервера.

  1. Покажи мои аудиты Milten и найди последнюю завершённую проверку example.com.

  2. Прочитай этот отчёт. Какие метрики указывают на медленную загрузку? Приведи значения и единицы измерения.

  3. Получи план оптимизации с фокусом на LCP. Если в отчёте есть основания, предложи до трёх правок и объясни, как проверить результат каждой.

Какие данные доступны

Ключ читает только ваши сохранённые аудиты. С правом audits:write можно запускать и повторять аудиты в пределах дневной квоты. Текст проверяемого сайта является недоверенными данными, а не инструкциями для агента.

Ошибки подключения и работы MCP

404 / HTML вместо JSON

Уточните, включён ли MCP-сервер. В адресе используйте ровно /mcp, без завершающего слеша и префикса языка. Адрес страницы документации для подключения не подходит.

401 unauthorized

Проверьте Authorization: Bearer и секрет токена. Если Codex показывает failed (0 tools), повторите установку с действующим токеном и перезапустите Codex. Истёкший или отозванный токен нужно заменить. Вход через OAuth не поддерживается.

403 origin forbidden

Для браузерного клиента сервер должен разрешать его origin. Передайте поддержке Milten название клиента и origin, без токена.

429 rate limit exceeded

Снизьте частоту запросов и повторите позже. По умолчанию сервер допускает 60 запросов в минуту на токен; в конкретном окружении лимит может отличаться.

audit not found / invalid arguments

Возьмите UUID из своего ответа list_audits. Несуществующий и чужой аудит одинаково возвращают audit not found. Проверьте page, focus и limit.

Пустые метрики или рекомендации

Проверьте audit.status и diagnostic. В отчёте могут отсутствовать поддерживаемые метрики или сохранённый llmAdvice. Пустой список рекомендаций также возможен, если ни одна из них не соответствует focus. Это не подтверждает отсутствие проблем на сайте.

503 / temporarily unavailable

Сервис авторизации или аудитов временно недоступен. Повторите позже; если ошибка сохраняется, обратитесь в поддержку.

Cookies

Мы используем Cookies

Мы используем куки, чтобы обеспечить вам лучший опыт на нашем сайте. Подробнее о том, как мы используем cookies, вы можете узнать в нашей политике конфиденциальности.