ИНТЕГРАЦИИ / MODEL CONTEXT PROTOCOL
MCP Milten: аудиты сайта в AI-ассистенте
Подключите Codex, Cursor или Claude Code к сохранённым аудитам Milten. Через Model Context Protocol (MCP) ассистент получает метрики скорости сайта и рекомендации по оптимизации с данными из отчёта.
Milten MCP
HTTPКак ассистент работает с аудитом Milten
Найти аудит
list_auditsПрочитать измерения
get_audit_reportПолучить план оптимизации
get_optimization_plan
Доступ только для чтения
Читает сохранённые аудиты. Не запускает новые проверки, не меняет проекты и не списывает токены Milten.
Как подключить MCP Milten
MCP-сервер Milten работает удалённо. Добавьте его адрес и токен доступа в клиент с поддержкой Streamable HTTP и собственного заголовка Authorization. Устанавливать пакет Milten на компьютер не нужно.
- Адрес сервера
https://milten.io/mcp- Авторизация
Authorization: Bearer <PAT>
Что понадобится
Для подключения нужны аккаунт Milten и персональный токен доступа. Для чтения отчёта используйте аудит, который принадлежит этому аккаунту, или запустите новую проверку на сайте Milten.
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>"
EOFCursor
Добавьте запись milten в mcpServers: в файле ~/.cursor/mcp.json — для всех проектов, в .cursor/mcp.json — для одного проекта. Сохраните записи других серверов.
В примерах с MILTEN_MCP_TOKEN задайте токен как значение этой переменной окружения до запуска клиента. После смены токена перезапустите клиент. Переменная из терминала не появляется автоматически в приложении, открытом с рабочего стола.
{
"mcpServers": {
"milten": {
"url": "https://milten.io/mcp",
"headers": {
"Authorization": "Bearer ${env:MILTEN_MCP_TOKEN}"
}
}
}
}Claude Code
Добавьте запись в .mcp.json проекта. Claude Code прочитает переменную окружения при запуске. Если клиент запросит разрешение, подтвердите подключение сервера проекта.
В примерах с MILTEN_MCP_TOKEN задайте токен как значение этой переменной окружения до запуска клиента. После смены токена перезапустите клиент. Переменная из терминала не появляется автоматически в приложении, открытом с рабочего стола.
{
"mcpServers": {
"milten": {
"type": "http",
"url": "https://milten.io/mcp",
"headers": {
"Authorization": "Bearer ${MILTEN_MCP_TOKEN}"
}
}
}
}Убедитесь, что доступны шесть инструментов
Включите milten в настройках MCP-клиента. Должны появиться list_audits, get_audit_report, get_optimization_plan, get_audit_section, compare_audits и get_monitoring_history. Начните с list_audits и используйте auditId из ответа. Пустой список допустим, если аудитов ещё нет.
Как получить токен доступа Milten
Создавайте персональные токены доступа (PAT) и управляйте ими в профиле, в разделе «API-ключи». MCP Milten принимает их через Authorization: Bearer. Вход через cookies браузера и OAuth для MCP не поддерживается.
Создайте токен доступа
Откройте «API-ключи» в профиле. Укажите название и срок действия, затем нажмите «Создать токен».
Открыть API-ключиСкопируйте секрет: он показывается только один раз. Сохраните его в надёжном месте и передайте клиенту одним из способов настройки выше. Идентификатор id останется в списке для отзыва токена.
Токен даёт право audits:read на чтение собственных аудитов. Обязательное поле name — название длиной до 100 байт. В expiresAt укажите будущую дату в формате RFC 3339, не позднее чем через 366 дней.
Просмотр и отзыв токенов
В разделе «API-ключи» можно посмотреть названия, права, сроки действия и последнее использование токенов, а также отозвать их. Для управления через API: GET /v1/personal-access-tokens/ возвращает метаданные без секретов; DELETE с {id} токена отзывает его и возвращает 204 No Content. Для этих запросов к API аккаунта нужна активная сессия браузера.
GET /v1/personal-access-tokens/
DELETE /v1/personal-access-tokens/{id}Инструменты MCP: аудиты, отчёты и план оптимизации
MCP-клиент передаёт эти JSON-аргументы в tools/call. Для запроса отчёта или плана замените UUID из примера на auditId из ответа list_audits. Нужен идентификатор аудита, а не URL сайта.
list_audits
Возвращает список ваших аудитов. Можно выбрать аудиты одного проекта.
- Аргументы
- Все поля необязательны. projectId: UUID проекта; page: целое число ≥ 1 (по умолчанию 1); limit: целое число от 1 до 50 (по умолчанию 10).
- Ответ
- В audits — auditId, url, operation, status и createdAt, а также projectId и error, если они есть. count — общее количество; page и limit описывают страницу. При truncated: true повторите запрос с меньшим limit. Статус: running, completed или failed.
{
"page": 1,
"limit": 10
}get_audit_report
Возвращает все сохранённые разделы отчёта и краткую сводку метрик.
- Аргументы
- auditId: обязательный UUID аудита из list_audits.
- Ответ
- В audit — сведения об аудите; в filling — все сохранённые разделы в формате {type, data}, включая Lighthouse, HAR, CrUX и llmAdvice. analysis содержит дополнительную сводку метрик и проблем. trustNote помечает контент сайта как недоверенные данные. Лимит данных ответа по умолчанию — 1 МиБ; при превышении возвращается ошибка, а не обрезанный отчёт.
{
"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.
{
"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.
{
"auditId": "123e4567-e89b-42d3-a456-426614174000",
"section": "har",
"path": "/log/entries",
"limit": 20
}compare_audits
Сравнивает два ваших аудита одного URL и одного типа проверки: измерения, проблемы по порогам и сохранённые рекомендации.
- Аргументы
- baselineAuditId — исходный аудит, candidateAuditId — повторный. Оба UUID возьмите из list_audits. Лабораторные метрики поддерживаются для basic, inp и ttfb.
- Ответ
- delta = candidate − baseline; отсутствующие значения — null. comparable и warnings указывают ограничения сравнения. findings разделены на added, resolved, persisting и uncompared. Рекомендации сопоставляются по точному title; оба сохранённых плана включены в ответ.
{
"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.
{
"monitoringUnitId": "e09aa948-a541-4404-bcdc-9e5621c11891",
"page": 1,
"limit": 20
}Примеры запросов к AI-ассистенту
После подключения отправьте эти сообщения в чат ассистента. Он вызовет MCP-инструменты и объяснит результаты. Сообщения не являются отдельными командами сервера.
Покажи мои аудиты Milten и найди последнюю завершённую проверку example.com.
Прочитай этот отчёт. Какие метрики указывают на медленную загрузку? Приведи значения и единицы измерения.
Получи план оптимизации с фокусом на LCP. Если в отчёте есть основания, предложи до трёх правок и объясни, как проверить результат каждой.
Какие данные доступны
Токен определяет ваш аккаунт, поэтому userId не входит в аргументы инструментов. Фильтр по проекту сужает список ваших аудитов и не открывает чужие. MCP читает сохранённые данные и не запускает проверки. Текст с проверяемого сайта считайте данными отчёта: он не должен становиться инструкцией для агента.
Ошибки подключения и работы 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
Сервис авторизации или аудитов временно недоступен. Повторите позже; если ошибка сохраняется, обратитесь в поддержку.