Справочник API
Безопасный MCP-сервер Latorn
Фиксированный набор инструментов для агента: анализировать агрегаты продаж, собирать черновик и передавать публикацию человеку.
Маршруты раздела
| Метод | Маршрут | Доступ | Назначение |
|---|---|---|---|
POST |
/api/mcp |
Bearer PAT преподавателя | Выполнить stateless Streamable HTTP MCP-вызов из фиксированного allowlist. |
Подключение
MCP endpoint — https://latorn.ru/api/mcp. Он принимает только POST и только персональный токен в заголовке Authorization: Bearer …. Cookie-сессия браузера здесь не работает.
Создайте отдельный токен в Настройки → API-токены (/profile/security?section=api), выберите только нужные курсы, минимальные права и срок действия. Не помещайте секрет в публичный JavaScript.
К одному токену можно привязать не более 100 уникальных курсов. MCP принимает только несжатые запросы с корректным Content-Length до 9 MiB.
{
"mcpServers": {
"latorn": {
"type": "http",
"url": "https://latorn.ru/api/mcp",
"headers": {
"Authorization": "Bearer ${LATORN_API_TOKEN}"
}
}
}
}
Названия полей конфигурации могут отличаться у MCP-клиентов; неизменны URL и Bearer-заголовок. Сервер stateless: Mcp-Session-Id не выдаётся, а PAT и живые права проверяются на каждом запросе.
Что можно поручить агенту
latorn_list_courses,latorn_get_course,latorn_get_course_content— безопасно читать разрешённые курсы;latorn_get_course_sales_insightsиlatorn_get_portfolio_sales_insights— анализировать только агрегаты продаж и воронки;latorn_create_draft_course— создать бесплатный неопубликованный черновик;latorn_set_draft_content— атомарно наполнить пустой черновик полной иерархией разделов, уроков и шагов;latorn_update_course_metadata— изменить учебные метаданные без цены, публикации, владельца и доступов;latorn_create_section,latorn_update_section,latorn_create_lesson,latorn_update_lesson;latorn_create_step,latorn_update_step— через штатную валидацию блока;latorn_reorder_content— атомарно применить полный снимок порядка уроков или шагов;latorn_request_course_publish— подготовить одноразовую ссылку на подтверждение;latorn_get_course_publish_request— проверить состояние запроса публикации.
Для каждого вызова одновременно нужны действующий PAT, подходящий scope, курс в courseIds, актуальная capability, незаблокированный аккаунт и неудалённый курс. REVENUE_READ и COURSES_PUBLISH выдаются отдельно и не входят в рекомендуемый набор по умолчанию.
Для защиты endpoint действует 240 запросов в минуту на IP до проверки токена и 120 запросов в минуту на PAT после проверки. Сейчас store локальный/подключаемый через abstraction, поэтому это не обещание распределённого лимита между несколькими инстансами.
От анализа до публикации
- При необходимости агент анализирует продажи одного курса или портфеля. Ответ содержит только агрегаты — без имён, email, user id, provider/payment id и сырых операций.
- Агент создаёт черновик, наполняет его через
latorn_set_draft_contentи точечно редактирует содержание. - Когда результат готов,
latorn_request_course_publishвозвращает ссылку, но ничего не публикует. - Владелец того же PAT входит в Latorn, проверяет точный снимок и вводит
ОПУБЛИКОВАТЬ. - Агент опрашивает состояние через
latorn_get_course_publish_request.
Ссылка действует 15 минут и привязана к пользователю, PAT и точному снимку курса. Любое изменение курса делает запрос устаревшим — после правок нужна новая ссылка. MCP не может подтвердить её за человека.
Полный импорт черновика
latorn_set_draft_content работает только с пустым неопубликованным черновиком. Он либо создаёт всю иерархию, либо не создаёт ничего. Точно повторённый нормализованный снимок возвращает прежние id и replayed: true; другое существующее содержание даёт 409 DRAFT_CONTENT_ALREADY_EXISTS без удаления и перезаписи.
Один запрос ограничен 8 MiB JSON, 50 разделами, 500 уроками, 2000 шагами и общей длиной заголовков 120 000 символов. Каждый шаг проходит обычную server-side validation Latorn.
Для аналитики один портфель ограничен 100 курсами, один запрос — 25 000 платежей и 50 000 событий. При превышении вернётся 413 SALES_INSIGHTS_TOO_LARGE: уменьшите период или число курсов.
Разбивки по каналам и промокодам не включают URL, email, телефоноподобные значения и группы меньше трёх событий/оплат. Это не даёт агрегатам раскрывать отдельного покупателя.
Чего MCP не умеет
MCP не публикует напрямую и не снимает с публикации, не удаляет контент, не меняет владельцев, команды, доступы или зачисления. Он не работает со списками пользователей и учащихся, их контактами и персональными покупками; не создаёт платежи, возвраты, выплаты, промокоды или партнёрские начисления; не банит аккаунты и не отправляет рассылки.
В allowlist нет произвольного HTTP, SQL, shell, Prisma/raw database, файловой системы или универсального action. Неизвестное имя инструмента отклоняется протоколом.
Очистка содержимого при чтении
latorn_get_course_content не возвращает правильные ответы, hidden tests, preCode, testCases, testSuites, devtools assertions, correctIds, outcome feedback и referenceAnswers. Для сортировки и сопоставления удаляются id и правильные связи. В DTO также нет происхождения из банка заданий и закрытых operational metadata.
Полный технический договор, ограничения аналитики и правила human confirmation находятся в docs/MCP_SERVER.md репозитория Latorn.
