mcp/complete

Завершить запрос с согласием или отказом. Требуется обычный IQ session token пользователя. Возвращает redirect_url; форма показывает результат, автоматически не перенаправляет.

POST JSON /mcp-auth.php?method=complete

Параметры

НазваниеОписаниеТипОбязательный
iq_bearerОбычный IQ session token. Передаётся только в заголовке Authorization: Bearer, не в теле/URL. Для inspect до входа необязателен.СтрокаДа
request_idИдентификатор запроса из ссылки /login?type=mcp&request_id=…СтрокаДа
approvedСогласие: boolean true или false. Фронт вызывает complete только после обязательной галочки с true; false поддерживается протоколом для отказа.BooleanДа

Пример запроса

Условные значения REQUEST_ID_FROM_LOGIN_URL, IQ_SESSION_TOKEN, ONE_TIME_CODE и MCP_ACCESS_TOKEN замените своими. Пример PKCE-пары иллюстративный; агент создаёт собственную случайную пару для каждого подключения.

POST https://api.iq.academy/mcp-auth.php?method=complete
Authorization: Bearer IQ_SESSION_TOKEN
Content-Type: application/json

{
  "request_id": "REQUEST_ID_FROM_LOGIN_URL",
  "approved": true
}

Результат

HTTP/1.1 200 OK
Content-Type: application/json

{
  "ok": true,
  "data": {
    "status": "approved",
    "redirect_url": "http://127.0.0.1:49231/callback?code=ONE_TIME_CODE&state=RANDOM_STATE&iss=https%3A%2F%2Fapi.iq.academy",
    "code_expires_in": 120
  }
}

Фронт перенаправляет пользователя через window.location.replace(data.redirect_url). Форме ниже переход не выполняет: она только показывает ответ. При approved=false протокол возвращает status=denied и redirect_url с error=access_denied; текущий фронт требует галочку и отправляет true.

Пример результата при отказе

{
    "ok": true,
    "data": {
        "status": "denied",
        "redirect_url": "http://127.0.0.1:49231/callback?error=access_denied&state=RANDOM_STATE&iss=https%3A%2F%2Fapi.iq.academy"
    }
}

Коды ошибок

КодОписание
VALIDATION_ERRORНекорректные параметры.
TOKEN_NOT_FOUNDТребуется действующая сессия IQ.
FORBIDDENАккаунту или курсу недоступен MCP.
CONFLICTЗапрос истёк или уже завершён.
RATE_LIMITEDСлишком много попыток.
FEATURE_UNAVAILABLE / UPSTREAM_ERRORПодключение временно недоступно.

Как в существующем API: ошибка возвращается с HTTP 200, error — строка с кодом. Проверяйте поле error, одного HTTP-статуса недостаточно.

Пример ошибки

{"error": "TOKEN_NOT_FOUND"}

Тест запроса

Доступ требует enable_mcp=yes у авторизованного пользователя и выбранного курса, а также роли владельца или администратора. Секреты не сохраняются формой. Для реального запроса используйте request_id и PKCE-параметры своего приложения агента.

Введите данные и нажмите выполнить