Стройте на метафорических картах

REST API и MCP-совместимая OpenAPI для ИИ-агентов, которые помогают пользователю отрефлексировать ситуацию, вести дневник или работать самостоятельно. Тянем карту, забираем watermarked-картинку, соблюдаем лицензию – вот вся петля.

Выберите путь

Три способа поговорить с нашим API. Выберите, что подходит под ваш сценарий, и переходите в нужную доку.

Хочу чат, который тянет карты

ChatGPT Custom GPT

Импортируйте ИИ-совместимый OpenAPI в Custom GPT builder. Чат сможет читать список колод, тянуть карты и показывать в диалоге watermarked-картинку. Не сможет тратить жемчуг – в ИИ-сабсете нет операций с invite-кодами.

Source: openapi.ai.json ›
У меня свой backend или скрипт

Прямой REST

HTTP-запросы с вашим ключом mk_live_ в Authorization: Bearer. Полная OpenAPI покрывает всё, включая invite-коды, если вы продаёте колоды. Один ключ, две роли.

Reference: openapi.json ›
Нужен мост Model Context Protocol

MCP-сервер

Hosted на mcp.makcards.online и локальный stdio-пакет @maccards/mcp (через npx или Docker). Один codebase, два транспорта, одна авторизация по API-ключу. Готовые сниппеты в разделе ниже.

Подключиться по 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. 1
    Войдите в приложение.

    Откройте app.makcards.online и войдите через Google или Yandex. Один клик, отдельной регистрации не нужно.

  2. 2
    Откройте «Профиль → Доступ для ИИ и интеграций».

    Раздел рядом с Premium и Достижениями. То же место, где магазины берут свой ключ.

  3. 3
    Сгенерируйте ключ и сразу скопируйте.

    Ключ выглядит как mk_live_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx. Показывается один раз; второго раза не будет. Сохраните в менеджер паролей или ваше секретное хранилище.

  4. 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, те же данные.

Скилл агента: makcards-self-reflection

Подключить источник карт – половина настройки. Вторая половина – поведение: как агент ведёт сессию рефлексии. Скилл makcards-self-reflection и есть эта половина. Он работает с любым агентом, у которого есть источник карт, не только с Claude.

Три техники

Вопрос к карте

Одна карта на один открытый вопрос. Агент вытягивает карту, показывает её и спрашивает, что вы замечаете. Это отправная точка, а не ответ.

Прошлое, настоящее, будущее

Три карты как траектория. Карта будущего – способ посмотреть на возможные направления, и это прямо названо: не предсказание.

Две стороны

Две карты на две стороны дилеммы и опциональная третья – для общего. Для решений, где вы разрываетесь.

Получить скилл

Два способа, содержимое одно. ZIP проще всего; публичный репо удобен, если вы предпочитаете git или хотите следить за обновлениями. Подходит любому агенту.

Скачать ZIP

Рекомендуется, работает везде

Один файл. В Claude загрузите его в Settings, Skills, Upload. В любом другом агенте распакуйте и используйте файлы (см. таблицу ниже).

Скачать скилл (ZIP)

Публичный репо

Если предпочитаете git

Клонируйте публичный, агент-агностичный репозиторий скиллов или скачайте его ZIP с GitHub.

git clone https://github.com/makcards/skills

Подключить под ваш агент

На каждый агент две части: источник карт (вкладки Connect выше) и место, где живёт поведение. У Claude это SKILL.md; у остальных – references/agent-instructions.md, вставленный в системный промпт. Source of truth один файл, поэтому поведение везде одинаковое.

АгентИсточник картКуда ставится скилл
Claude Desktop / Claude Code Local MCP (npx @maccards/mcp) или hosted MCP / OAuth Claude Desktop / web: Settings, Skills, Upload, выберите ZIP. Claude Code: положите makcards-self-reflection/ в ~/.claude/skills/. Использует SKILL.md; техники появляются как /single-question, /three-cards, /inner-conflict.
ChatGPT Custom GPT GPT Actions с API-ключом (ИИ-совместимый OpenAPI) или hosted MCP / OAuth Вставьте references/agent-instructions.md в Instructions кастомного GPT.
ChatGPT (чат с коннектором) Hosted MCP + OAuth Вставьте agent-instructions.md в начало проекта или диалога.
Cursor Hosted MCP (Bearer) или local MCP Добавьте agent-instructions.md в Project Rules (.cursor/rules).
n8n MCP-нода или HTTP Request с ключом Вставьте agent-instructions.md в системный промпт узла-агента.
Кастомный / другой REST (MAKCARDS_API_KEY) или MCP Вставьте agent-instructions.md в системный промпт.

Впервые сталкиваетесь с метафорическими картами или вы не разработчик? Разбор простым языком проведёт от нуля до первой сессии.

Лимиты запросов

На аккаунт, по окнам. POST /draw с count=N считается как N запросов в счётчик карт.

Окно Free Premium
Карт в минуту10120
Карт в час702 000
Карт в сутки17010 000
/decks в минуту10120
Запросов к картинкам в минуту20240

Текущее состояние – GET /api/v1/public/usage. На каждом ответе заголовки RateLimit-Limit, RateLimit-Remaining, RateLimit-Reset (RFC 9331).

Купить Premium за жемчужины

Приватность и безопасность

Watermark остаётся

На каждой картинке – название домена с прозрачностью 6%. Снимать watermark запрещено условиями. API никогда не отдаёт оригинал без штампа.

Untrusted content

Тексты колод и карт – UGC. Относитесь к ним как к недоверенному вводу. Не позволяйте названию или описанию подменить ваш системный промпт.

Это не медицинская услуга

МАК-карты – инструмент рефлексии. Ваш агент не должен выдавать карту за диагноз, прогноз или назначение. Если пользователь может быть в кризисе, дайте линию помощи по его региону: 8-800-2000-122 (Россия), 988 (США) или findahelpline.com для других стран.

Локальное остаётся локальным

С local stdio MCP (npx @maccards/mcp или Docker) ИИ-клиент общается с процессом на вашей машине, а тот зовёт наш REST с вашим ключом. Содержимое переписки с ИИ к нашему MCP-сервису не приходит.

Лицензия для личного использования

Вытянутые картинки – для сессии, не для републикации. На каждой watermark и поле license. Содержимое самого скилла под MIT; изображения карт – нет.

Подробнее: Условия использования · Политика конфиденциальности.

FAQ

Частые вопросы интеграторов.

Зачем два разных OpenAPI?
ChatGPT Custom GPT Builder при настройке экшенов показывает пользователю все операции из импортированной спеки. Полная спека содержит POST /invite-codes/generate, который тратит жемчуг. Если пользователь по ошибке разрешит чату вызвать эту операцию — деньги пойдут с вас. ИИ-совместимый сабсет не содержит invite-кодов вообще — у чата нет даже кодового пути на трату жемчуга.
Можно ли получить оригинал картинки без watermark?
Нет. Это принципиальная позиция по IP-защите. API всегда отдаёт watermarked JPEG шириной 512 или 1024. Оригинал доступен только внутри игровой доски.
Что такое scope=any?
Сэмпл uniform-by-card по всем доступным колодам: свои, approved-public и купленные по invite-кодам. Сэмплинг идёт по картам, а не по колодам — большие колоды пропорционально вносят больше.
Вы логируете мой чат?
Нет. Мы логируем API-вызовы — request id, account id, endpoint, статус, latency, IP, user-agent. Сама переписка пользователя с ИИ к нам не приходит, если только агент сам её не отправляет.
Насколько свежая 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.
Скилл привязан к Claude?
Нет. Поведение лежит в одном портативном файле references/agent-instructions.md, который вставляется в системный промпт любого агента: ChatGPT Custom GPT, Cursor, n8n или кастомный. Манифест SKILL.md – это обёртка под Claude вокруг того же поведения. См. секцию Скилл агента.
Безопасно ли вставлять API-ключ в ChatGPT?
Ключ mk_live_ попадает только в наш Public API и не может тратить жемчуг при использовании ИИ-совместимого сабсета OpenAPI. Всё равно относитесь к нему как к секрету: вставляйте только в поле аутентификации экшена, не в сообщение чата, и перевыпускайте при утечке. Чтобы подключиться в один клик без ключа, используйте OAuth там, где клиент его поддерживает.
Можно ли в платных или коммерческих сессиях?
Содержимое скилла под MIT, его можно свободно адаптировать. Изображения карт – для личного использования и с watermark, не распространяйте их за пределами сессии и не выдавайте за диагноз или прогноз. Если вы ведёте платные сессии, это ваши отношения с клиентом, но карты остаются watermarked. См. Условия.
Как отозвать доступ агента?
Перевыпустите или отзовите ключ в app.makcards.online → Profile → API Key, либо отключите OAuth-клиента в разделе Connected apps. Отзыв вступает в силу примерно за минуту (короткий кэш валидации). После этого вызовы агента возвращают 401.
Hosted или local: что выбрать?
Hosted (mcp.makcards.online) – самая быстрая настройка, проходит через большинство корпоративных прокси. Local stdio (npx @maccards/mcp) держит ключ на вашей машине и подходит политикам, запрещающим сторонние MCP-сервисы. Оба – обёртки над одним REST API, так что tools и данные идентичны.
Работает ли local MCP за корпоративным прокси?
Local stdio всё равно должен достучаться до app.makcards.online по HTTPS, чтобы тянуть карты. Если прокси обязателен, задайте стандартную переменную HTTPS_PROXY для процесса. Если исходящий HTTPS закрыт полностью, обычно проще hosted MCP через ваш веб-прокси.
Работает ли с Operator, Computer Use или ChatGPT Atlas?
Browser-driving агенты могут пользоваться сайтом так же, как человек: залогиниться, открыть колоду, скопировать API-ключ. Но отдельного канала под них мы не строим: стабильных agent-targetable селекторов нет, игровая доска это Pixi-canvas, который намеренно остаётся opaque (часть anti-scraping), стабильность DOM между релизами не гарантируется. Для воспроизводимых сценариев предпочитайте REST или MCP – у них есть контракт, rate limits и audit trail. Если у вашего агента уже есть shell, вкладка Bash / agent shell это самый короткий путь.