Справочник API
MCP-сервер и API-токены
Подключите ИИ-агентов к рабочему пространству perfscale по Model Context Protocol
Обзор
@perfscale/controlplane-mcp — сервер Model Context Protocol,
дающий ИИ-агентам (Claude Code, Claude Desktop и другим MCP-клиентам) доступ
на чтение к вашему рабочему пространству perfscale — машины, тесты, прогоны с
полными метриками и логами, OTEL-ряды, дашборды и журнал аудита — а также
возможность запускать тесты.
Исходный код: Perfscale/mcp. Для локального запуска тестов через open-source CLI см. OSS MCP-сервер.
API-токены
Сервер аутентифицируется персональным API-токеном. Создайте его в
дашборде: Settings → API Tokens (нужно право manage_api_tokens — по
умолчанию у владельцев и администраторов, настраивается в Access Controls).
- Токен в открытом виде (
psk_...) показывается один раз при создании — сохраните его в менеджере секретов. - Лимиты токенов на пользователя зависят от плана: Scale — 1, Enterprise — 5. План Starter не включает API-доступ.
- Токен действует от вашего имени с вашей ролью в рабочем пространстве, где он создан, и только пока это пространство активно.
- Отзывайте токены в любой момент на той же странице настроек; каждое использование обновляет отметку last used, а создание и отзыв попадают в журнал аудита.
Токены работают и для всего REST API:
curl https://perfscale.ru/api/v1/machines \
-H "Authorization: Bearer psk_..."
Настройка
{
"mcpServers": {
"perfscale-cloud": {
"command": "npx",
"args": ["-y", "@perfscale/controlplane-mcp"],
"env": {
"PERFSCALE_API_URL": "https://perfscale.ru",
"PERFSCALE_API_TOKEN": "psk_..."
}
}
}
}
Если ваше рабочее пространство на perfscale.su — укажите его как базовый URL.
Инструменты
| Инструмент | Доступ | Что возвращает |
|---|---|---|
whoami | чтение | Текущий пользователь, пространство, роль, права |
limits | чтение | План, лимиты машин/тестов, retention, использование хранилища |
usage | чтение | Использование AI tool-call бюджета за текущий месяц |
list_machines / get_machine | чтение | Парк машин: статус, железо, версия агента, бенчмарк-ёмкость, регион |
list_tests / get_test | чтение | Определения тестов с config JSON |
list_configs | чтение | Конфигурации нагрузки воркспейса (пресеты vus/duration или stages) |
list_runs / get_run | чтение | Прогоны с p50/p95/p99, error rate, RPS, числом запросов |
get_run_logs | чтение | Полные логи прогона |
runs_by_machine | чтение | История прогонов по машине |
metrics_catalog / query_metrics | чтение | Доступные метрики; time-series с фильтром по label'ам |
get_otel_timeseries | чтение | OTEL-метрики, собранные во время прогона |
list_dashboards | чтение | Кастомные дашборды метрик |
list_git_repos | чтение | Подключённые репозитории и статус синхронизации |
list_env_vars | чтение | Ключи переменных окружения — значения всегда маскируются |
audit_log | чтение | Журнал активности: действие, актор, цель, время |
write_test | запись | Создание или обновление теста (native-шаги или k6-скрипт) |
write_config | запись | Создание или обновление именованной конфигурации нагрузки |
run_test | запись | Запуск теста на машинах; возвращает task ID и URL лог-стримов |
sync_git_repo | запись | Запуск синхронизации тестов из репозитория |
Инструменты записи уважают RBAC — run_test требует право run_tests,
ровно как в дашборде. Каждый вызов инструмента списывается из месячного
AI tool-call бюджета воркспейса (задаётся планом; смотрите usage).
Композитный режим: свои MCP-серверы
Подключите удалённые MCP-серверы к воркспейсу в Settings → AI → MCP
Servers (только админы): имя, streamable-HTTP URL и опциональные заголовки
(шифруются at rest и больше не показываются). Их инструменты появятся — с
префиксом имени сервера, например grafana_search_dashboards — в ASK AI у
каждого участника воркспейса и в perfscale-controlplane-mcp при запуске с
админ-токеном. Недоступный сервер пропускается; базовые инструменты работают
всегда.
HTTP-endpoint
Предпочитаете URL вместо npm-пакета? Тот же композитный сервер доступен на
/api/mcp (streamable HTTP, stateless):
{
"mcpServers": {
"perfscale": {
"url": "https://perfscale.su/api/mcp",
"headers": { "Authorization": "Bearer psk_..." }
}
}
}