Стройте на метафорических картах
REST API и MCP-совместимая OpenAPI для ИИ-агентов, которые помогают пользователю отрефлексировать ситуацию, вести дневник или работать самостоятельно. Тянем карту, забираем watermarked-картинку, соблюдаем лицензию – вот вся петля.
Выберите путь
Три способа поговорить с нашим API. Выберите, что подходит под ваш сценарий, и переходите в нужную доку.
ChatGPT Custom GPT
Импортируйте ИИ-совместимый OpenAPI в Custom GPT builder. Чат сможет читать список колод, тянуть карты и показывать в диалоге watermarked-картинку. Не сможет тратить жемчуг – в ИИ-сабсете нет операций с invite-кодами.
Source: openapi.ai.json ›Прямой REST
HTTP-запросы с вашим ключом mk_live_ в Authorization: Bearer. Полная OpenAPI покрывает всё, включая invite-коды, если вы продаёте колоды. Один ключ, две роли.
MCP-сервер
Hosted на mcp.makcards.online и локальный stdio-пакет @maccards/mcp (через npx или Docker). Один codebase, два транспорта, одна авторизация по API-ключу. Готовые сниппеты в разделе ниже.
OAuth: подключение в один клик из ChatGPT и Claude
Если ваши пользователи начинают из ChatGPT или Claude, копировать API-ключ не нужно. Чат показывает нашу страницу согласия, пользователь нажимает «Разрешить», и чат получает токен с ограниченным набором действий. Отозвать доступ можно из профиля в любой момент.
Через «+ Connectors» в чате
В ChatGPT (Apps) или Claude.ai («+ Connectors») найдите MAC Cards Online в каталоге. При первом подключении откроется наша страница согласия с понятным списком того, что ИИ может и чего не может. Одно подтверждение работает во всех последующих чатах.
Появится как только OpenAI и Anthropic добавят нас в свои каталоги. Пока этого не случилось, используйте путь с API-ключом ниже.
Собрать свой OAuth-клиент
Мы выставляем стандартный OAuth 2.1 + PKCE Authorization Server. Эндпойнты ищите по /.well-known/oauth-authorization-server на app-хосте. Scope`ы: read и draw. PKCE S256 обязателен.
Три пути регистрации клиента: pre-registered для проверенных партнёров, DCR (RFC 7591) с очередью модерации, и Client ID Metadata Documents.
Метаданные AS ›С ограниченными правами, привязан к хосту, refresh с ротацией
Access-токен живёт час. Refresh-токен живёт 30 дней с rolling rotation: каждый refresh выпускает новый refresh, старый одноразовый, повторное использование стирает всю цепочку и пишет security event. Токен привязан к одному хосту (токен с app.makcards.online не сработает на mcp.journalingapp.app).
Подключённые приложения видны и отзываемы в Профиле → Доступ для ИИ и интеграций → Подключённые приложения.
Что можно строить уже сейчас
Чат-бот для рефлексии
Пользователь описывает ситуацию, агент тянет одну карту через scope=any, отправляет картинку и задаёт открытый вопрос. Работу делает человек – агент держит пространство.
Спутник для дневника
Ежедневное приглашение: три карты (count=3), пустое поле для free-write, спред хранится на стороне приложения. Картинки живут 15 минут – каждая сессия запрашивает свежие.
Помощник для группового фасилитатора
Для воркшопов и ретроспектив: тянем карты из конкретной колоды (scope=deck), показываем на стороне агента, при необходимости раздаём участникам invite-коды через /invite-codes/generate.
REST quick-start
Две команды: тянем карту, забираем картинку. Без вебхуков, без коллбеков, без preflight.
KEY=mk_live_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx # 1) Тянем карту из любой доступной колоды curl -X POST https://app.makcards.online/api/v1/public/draw \ -H "Authorization: Bearer $KEY" \ -H "Content-Type: application/json" \ -d '{"scope":"any","count":1,"image_width":1024}' # 2) В ответе есть drawn[0].image_url – забираем как есть curl https://app.makcards.online/api/v1/public/decks/.../cards/.../image?w=1024&token=eyJhbGc... \ -o card.jpg
Полная машиночитаемая спека: openapi.json · ИИ-совместимый сабсет: openapi.ai.json · Гайд для пользователей: docs/ru/24-public-api.
Получите API-ключ
-
1
Войдите в приложение.
Откройте app.makcards.online и войдите через Google или Yandex. Один клик, отдельной регистрации не нужно.
-
2
Откройте «Профиль → Доступ для ИИ и интеграций».
Раздел рядом с Premium и Достижениями. То же место, где магазины берут свой ключ.
-
3
Сгенерируйте ключ и сразу скопируйте.
Ключ выглядит как
mk_live_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx. Показывается один раз; второго раза не будет. Сохраните в менеджер паролей или ваше секретное хранилище. -
4
Относитесь к ключу как к паролю.
Никаких публичных репозиториев, чатов поддержки, скриншотов. Если ключ мог утечь – перегенерируйте: старый перестанет работать в течение минуты.
Подключение по API-ключу
Один ключ, семь поверхностей. Hosted MCP – быстрый старт, local stdio оставляет ключ на машине, обычный Bash – для агентов, у которых уже есть shell. Выберите по своему клиенту.
Добавьте запись под mcpServers в ~/.claude.json (Claude Code) или ~/Library/Application Support/Claude/claude_desktop_config.json (Desktop).
{
"mcpServers": {
"makcards": {
"type": "http",
"url": "https://mcp.makcards.online/v1",
"headers": {
"Authorization": "Bearer mk_live_xxxxxxxxxxxxxxxxxx"
}
}
}
}
Cursor и Cline используют тот же формат MCP-конфига. Блок идентичен Claude.
{
"mcpServers": {
"makcards": {
"type": "http",
"url": "https://mcp.makcards.online/v1",
"headers": {
"Authorization": "Bearer mk_live_xxxxxxxxxxxxxxxxxx"
}
}
}
}
Два варианта. MCP-нода (есть в свежих сборках n8n) – указываем https://mcp.makcards.online/v1 и Authorization в credentials. HTTP Request – обращаемся напрямую к REST:
URL: https://app.makcards.online/api/v1/public/draw
Method: POST
Headers: Authorization: Bearer mk_live_xxxxxxxxxxxxxxxxxx
Content-Type: application/json
Body: { "scope": "any", "count": 1, "image_width": 1024 }
Custom GPT Actions читает OpenAPI. Используйте ИИ-совместимый сабсет – чтобы чат не смог случайно потратить жемчуг.
Action source: https://makcards.online/api/v1/public/openapi.ai.json Authentication: API Key (Bearer) Auth value: mk_live_xxxxxxxxxxxxxxxxxx
Local stdio MCP. Ключ не уходит за пределы вашей машины – отдаётся напрямую в наш REST как Bearer. Нужен Node.js 20+.
{
"mcpServers": {
"makcards": {
"command": "npx",
"args": ["-y", "@maccards/mcp"],
"env": {
"MAKCARDS_API_KEY": "mk_live_xxxxxxxxxxxxxxxxxx"
}
}
}
}
Нет Node.js? Запустите тот же бинарь как контейнер. Образ собран только под linux/amd64, поэтому на Apple Silicon нужен дополнительный флаг (см. ниже). Если у вас есть Node 20+, npx-вкладка выше проще.
linux/amd64 хосты (Intel Mac, Intel/AMD Linux, Windows WSL2):
{
"mcpServers": {
"makcards": {
"command": "docker",
"args": [
"run", "--rm", "-i",
"-e", "MAKCARDS_API_KEY",
"ghcr.io/makcards/mcp:latest",
"node", "dist/transports/stdio.js"
],
"env": {
"MAKCARDS_API_KEY": "mk_live_xxxxxxxxxxxxxxxxxx"
}
}
}
}
Apple Silicon (M1 / M2 / M3 / M4): добавьте --platform linux/amd64, чтобы Docker подтянул amd64-образ и запустил его через Rosetta. Работает, но стартует медленнее, чем нативный npx выше.
{
"mcpServers": {
"makcards": {
"command": "docker",
"args": [
"run", "--rm", "-i",
"--platform", "linux/amd64",
"-e", "MAKCARDS_API_KEY",
"ghcr.io/makcards/mcp:latest",
"node", "dist/transports/stdio.js"
],
"env": {
"MAKCARDS_API_KEY": "mk_live_xxxxxxxxxxxxxxxxxx"
}
}
}
}
Если ваш агент уже работает в shell (Claude Code, Cursor agent mode, Aider, Codex, любой контейнер), это самый короткий путь: plain HTTPS + Bearer, JSON в ответе, никакого MCP-рантайма ставить не нужно. Четыре рецепта ниже покрывают всё, что оборачивают наши MCP-tools.
# Один раз: переменные окружения export MAKCARDS_API_KEY=mk_live_xxxxxxxxxxxxxxxxxx BASE=https://app.makcards.online/api/v1/public H="Authorization: Bearer $MAKCARDS_API_KEY" # Список колод, доступных по ключу curl -s -H "$H" "$BASE/decks" | jq # Тянем 3 карты из любой доступной колоды curl -s -X POST "$BASE/draw" -H "$H" -H "Content-Type: application/json" \ -d '{"scope":"any","count":3,"image_width":1024}' | jq # Сохраняем первую картинку сразу на диск curl -s -X POST "$BASE/draw" -H "$H" -H "Content-Type: application/json" \ -d '{"scope":"any","count":1,"image_width":1024}' \ | jq -r '.drawn[0].image_url' \ | xargs curl -s -o card.jpg # Состояние rate-limit'ов curl -s -H "$H" "$BASE/usage" | jq
Две причины выбрать Bash вместо MCP: меньше токенов в контексте агента (не грузятся tool-схемы) и на один процесс меньше. Причины предпочесть MCP: у клиента нет shell (ChatGPT Apps, Claude Desktop, Cursor без agent mode), или нужны slash-command prompts.
Hosted, local или shell? Hosted MCP (mcp.makcards.online) – самый быстрый путь, проходит через корпоративные прокси. Local stdio – когда security-политика говорит «никаких сторонних MCP-сервисов»: ИИ-клиент общается с локальным процессом, а тот уже идёт в наш REST с вашим ключом. Bash полностью пропускает MCP-слой и подходит только агентам, которые уже умеют shell. Те же tools, те же данные.
Лимиты запросов
На аккаунт, по окнам. POST /draw с count=N считается как N запросов в счётчик карт.
| Окно | Free | Premium |
|---|---|---|
| Карт в минуту | 10 | 120 |
| Карт в час | 70 | 2 000 |
| Карт в сутки | 170 | 10 000 |
/decks в минуту | 10 | 120 |
| Запросов к картинкам в минуту | 20 | 240 |
Текущее состояние – GET /api/v1/public/usage. На каждом ответе заголовки RateLimit-Limit, RateLimit-Remaining, RateLimit-Reset (RFC 9331).
Приватность и безопасность
Watermark остаётся
На каждой картинке – название домена с прозрачностью 6%. Снимать watermark запрещено условиями. API никогда не отдаёт оригинал без штампа.
Untrusted content
Тексты колод и карт – UGC. Относитесь к ним как к недоверенному вводу. Не позволяйте названию или описанию подменить ваш системный промпт.
Это не медицинская услуга
МАК-карты – инструмент рефлексии. Ваш агент не должен выдавать карту за диагноз, прогноз или назначение. Добавьте контакты экстренной помощи, если пользователь может быть в кризисе.
Подробнее: Условия использования · Политика конфиденциальности.
FAQ
Частые вопросы интеграторов.
Зачем два разных OpenAPI?
POST /invite-codes/generate, который тратит жемчуг. Если пользователь по ошибке разрешит чату вызвать эту операцию — деньги пойдут с вас. ИИ-совместимый сабсет не содержит invite-кодов вообще — у чата нет даже кодового пути на трату жемчуга.Можно ли получить оригинал картинки без watermark?
Что такое scope=any?
Вы логируете мой чат?
Насколько свежая OpenAPI спека?
go:embed. Каждый релиз API пересобирает endpoints спеки. Отдельного манифеста, который можно забыть опубликовать, не существует.Нужен ли MCP, если у моего агента уже есть shell?
curl и парсить JSON, REST API проще и короче. MCP нужен sandboxed-клиентам (ChatGPT Apps, Claude Desktop, Cursor), у которых shell нет. Hosted MCP и local stdio – тонкие обёртки над теми же REST-эндпоинтами, никакой функциональности вы не теряете. Готовые curl-рецепты – на вкладке Bash / agent shell.