Создайте ключ в «Инструменты для ИИ». Все запросы требуют
Authorization: Bearer KEY. Ключ имеет права создавшего его
преподавателя. Ключ можно отозвать в интерфейсе.
URL: https://my-holst.slk-soft.ru/mcp Authorization: Bearer KEY Transport: HTTP (JSON responses) Tools: list_boards, create_board, get_board, upsert_objects, get_board_history, undo_board_change, redo_board_change, list_library_objects, get_library_object, save_library_object, insert_library_object, arrange_board_objects
| Метод | Адрес | Назначение |
|---|---|---|
| GET | /api/boards | Доступные доски |
| POST | /api/boards | {"title":"Урок 1"} |
| GET | /api/boards/:id | Объекты и метаданные |
| POST | /api/boards/:id/objects | Добавить/изменить объекты |
| DELETE | /api/boards/:id/objects/:object | Удалить объект |
| POST | /api/boards/:id/assets | multipart/form-data, поле file, до 200 МБ |
| POST | /api/boards/:id/invites | {"role":"student"} → ссылка на 7 дней |
| GET | /api/boards/:id/export?format=zip | Полная доска с материалами |
| POST | /api/import | multipart file: JSON или ZIP |
{
"objects": [{
"id": "question-1", "type": "textbox",
"left": 150, "top": 100, "width": 500,
"text": "Почему небо голубое?",
"fontSize": 32, "fill": "#49376b", "fontFamily": "Arial"
}, {
"id": "quiz-1", "type": "rect",
"left": 150, "top": 250, "width": 300, "height": 160,
"fill": "#e0ebdf",
"quiz": {
"question": "Сколько будет 2 + 2?",
"answers": ["3", "4", "5"], "correct": 1
}
}]
}
Формат объектов — Fabric.js 7. Уникальный id обязателен. Разрешены text, i-text, textbox, rect, circle, ellipse, triangle, line, path, polygon, polyline, image, group. Изображения должны ссылаться на материалы этой доски через /api/assets/:id. Изменения API сразу передаются участникам по WebSocket.
GET /api/boards/:id/history возвращает canUndo, canRedo, undoBlocked, redoBlocked. POST /api/boards/:id/undo и POST /api/boards/:id/redo с пустым JSON отменяют/повторяют действие текущего аккаунта. При конфликте с более поздней чужой правкой — HTTP 409, без изменения доски. Последние 200 действий на доске сохраняются на сервере. Новая правка сбрасывает собственный redo.
POST /api/boards/:id/changes принимает {"objects": [...], "ids": ["удаляемый-id"]}. Добавления/изменения и удаления выполняются одной транзакцией и одним шагом истории. Один id нельзя одновременно изменять и удалять. Опциональный groupKey объединяет последовательные изменения тех же объектов в пределах 1,5 секунды (для набора текста и ползунков). REST и MCP используют общую историю аккаунта.
Прямоугольники используют rx/ry (радиус по осям, неотрицательные числа). Любой объект/группа может иметь shadow: {"color":"rgba(30,20,50,0.25)","blur":16,"offsetX":6,"offsetY":8}. Размытие 0–300, смещения от −10000 до 10000. Параметры входят в историю и экспорт.
GET /api/library?q=название&offset=0 — личные объекты, до 40 за страницу; ответ {items,total}. GET /api/library?trash=1 — корзина. POST /api/library с {boardId,name,object,preview?} сохраняет объект/группу и независимые копии материалов исходной доски. preview — опциональная строка data:image/png;base64,… до 200000 символов.
GET /api/library/:id — полный объект. PATCH /api/library/:id с {name} — переименовать. DELETE /api/library/:id — в корзину, POST /api/library/:id/restore — восстановить. POST /api/library/:id/insert с {boardId,left?,top?} — добавить новую независимую копию на доску с новыми id. Эта операция поддерживает undo/redo и немедленно видна участникам. Сохранение и изменение библиотеки доступны только её владельцу. Библиотечные материалы нельзя напрямую вставить в JSON доски: используйте insert.
GET /api/preferences — настройки текущего аккаунта: hideCursor (false), shareDragging (true), showDragging (true), revision. PATCH /api/preferences принимает частичный объект с этими тремя логическими параметрами (без revision). Настройки не меняют содержимое досок и синхронизируются с подключёнными сессиями аккаунта.
WebSocket /ws?board=:id принимает временные пакеты {"type":"transform","objects":[{"id":"object-id","matrix":[1,0,0,1,250,300]}]}: матрица Fabric.js задаёт мировую трансформацию объекта, включая центр. Рекомендуется не более 20 кадров/с. Для удержания неподвижного объекта во время жеста — повтор последнего кадра раз в секунду. {"type":"transform-end"} завершает превью без сохранения; итог нужно сохранить обычным upsert/change. Превью не входит в историю, GET/экспорт доски возвращают сохранённые объекты. Сервер завершает оставленные превью после 4 секунд без обновлений и при отключении участника.
POST /api/boards/:id/arrange принимает {"ids":["a","b"],"action":"front"}. Действия: front — на передний план, back — на задний, forward — на один слой выше, backward — на один ниже. Сервер сохраняет относительный порядок выделенных объектов и меняет z по актуальной доске. Ответ {ok,changed,history}; операция без изменения не создаёт шаг истории. Опциональный requestId (до 100 символов) возвращается в событии upsert для синхронизации интерфейса. MCP: arrange_board_objects с boardId, ids, action.
Выравнивание в интерфейсе использует геометрические границы объектов после поворота и масштаба: left, centerX, right, top, centerY, bottom. Границы выделения — ориентир по умолчанию; можно выбрать видимую область холста. Распределение по X/Y уравнивает промежутки с учётом размеров объектов, сохраняя внешние границы набора. Для агентов геометрия доступна в /layout.js; итоговые координаты можно отправлять одним upsert_objects.
Объекты могут хранить метаданные quiz и media. Для новых игр добавляйте типизированные метаданные, обработчик в клиенте и серверную проверку. Пользовательский HTML и JavaScript не исполняются. Текущая модель совместной работы — атомарное обновление объекта, при одновременной правке одного объекта сохраняется последнее принятое изменение.