Construa com cartas metafóricas

Uma REST API e uma OpenAPI compatível com MCP para agentes de IA que ajudam o usuário a refletir, registrar um diário ou praticar sozinho. Puxar uma carta, obter sua imagem com marca d'água, respeitar a licença: é todo o loop.

Escolha um caminho

Três formas de os agentes conversarem com a gente. Escolha a que combina com o que você está construindo e vá direto à doc certa.

Quero um chat que puxa cartas

ChatGPT Custom GPT

Importe a OpenAPI segura para IA no Custom GPT Builder. O chat consegue listar baralhos, puxar cartas e exibir uma imagem com marca d'água na conversa. Ele não pode gastar suas pérolas: o subset de IA não traz operações de códigos de convite.

Fonte do Action: openapi.ai.json ›
Tenho meu próprio backend ou script

REST direto

Faça chamadas HTTP com sua chave mk_live_ em Authorization: Bearer. A OpenAPI completa cobre tudo, inclusive os códigos de convite caso você também venda baralhos. Uma chave, dois perfis.

Referência: openapi.json ›
Quero uma ponte Model Context Protocol

Servidor MCP

Hospedado em mcp.makcards.online e como pacote stdio local @maccards/mcp (via npx ou Docker). Mesmas tools, mesma autenticação, uma única base de código. Escolha o estilo de conexão na seção abaixo.

Conectar com chave de API ›

OAuth: conexão em um clique a partir do ChatGPT e do Claude

Se seus usuários começam pelo ChatGPT ou pelo Claude, não precisam copiar nenhuma chave de API. O app de chat exibe nossa tela de consentimento, o usuário clica em Permitir e o chat recebe um token com escopo limitado. O usuário pode revogar o acesso no Perfil a qualquer momento.

Para usuários finais

Pelo «+ Connectors» do seu chat

No ChatGPT (Apps) ou no Claude.ai («+ Connectors»), procure MAC Cards Online no seletor. Na primeira vez aparece nossa tela de consentimento com uma lista clara do que a IA pode e do que não pode fazer. Você aprova uma vez e funciona em todos os chats seguintes.

Em breve, assim que OpenAI e Anthropic nos listarem em seus catálogos. Até lá, use o caminho com chave de API abaixo.

Para desenvolvedores

Monte seu próprio cliente OAuth

Expomos um Authorization Server padrão OAuth 2.1 + PKCE. Descubra os endpoints em /.well-known/oauth-authorization-server no host da app. Os scopes são read e draw. PKCE S256 é obrigatório.

Três caminhos de registro: pré-registrado para parceiros verificados, DCR (RFC 7591) com fila de moderação e Client ID Metadata Documents.

Metadados do AS ›
O que o token pode fazer

Escopo limitado, atrelado ao host, refresh com rotação

Os access tokens vivem uma hora. Os refresh tokens vivem 30 dias com rolling rotation: cada refresh emite um novo refresh, o antigo é de uso único, e a reutilização dispara revogação de toda a cadeia mais um security event. Os tokens são vinculados a um host (um token emitido em app.makcards.online não funciona em mcp.journalingapp.app).

Os usuários veem e revogam apps conectados no Perfil → Acesso para IA e integrações → Apps conectados.

O que dá para construir hoje

Chatbot de reflexão

O usuário descreve uma situação, o agente puxa uma carta com scope=any, envia a imagem de volta e faz uma pergunta reflexiva. O trabalho é do usuário; o agente segura o espaço.

Companheiro de journaling

Convite diário que puxa três cartas (count=3), convida o usuário a escrever livremente e guarda o spread do lado dele. As imagens expiram em 15 minutos; o agente busca novas a cada sessão.

Copiloto de facilitação em grupo

Para workshops e retrospectivas de time: puxe cartas de um baralho específico (scope=deck), exiba do lado do agente e, opcionalmente, entregue um código aos participantes via /invite-codes/generate.

Início rápido REST

Dois comandos: puxe uma carta, busque a imagem. Sem webhook, sem callback, sem preflight.

KEY=mk_live_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

# 1) Puxa uma carta de qualquer baralho acessível
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) A resposta traz drawn[0].image_url – busque-a como está
curl https://app.makcards.online/api/v1/public/decks/.../cards/.../image?w=1024&token=eyJhbGc... \
  -o card.jpg

Referência completa legível por máquinas: openapi.json · subset seguro para IA: openapi.ai.json · guia: docs/en/24-public-api.

Obtenha uma chave de API

  1. 1
    Entre no app.

    Abra app.makcards.online e faça login (Google ou Yandex). Um clique, sem conta separada.

  2. 2
    Abra Perfil → Acesso para IA e integrações.

    A seção fica ao lado de Premium e Conquistas. Mesmo lugar que os parceiros lojistas usam.

  3. 3
    Gere a chave e copie-a.

    A chave aparece como mk_live_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx. Ela é mostrada uma vez; não há segunda visualização. Cole em um gerenciador de senhas ou no seu cofre de segredos.

  4. 4
    Trate a chave como senha.

    Nada de repositórios públicos, chats de suporte ou capturas de tela. Se houver suspeita de vazamento, regenere a chave: a antiga deixa de funcionar em até um minuto.

Conectar com chave de API

Uma chave, sete superfícies. Hosted MCP para começar rápido, local stdio para manter a chave na sua máquina, Bash simples para agentes que já têm shell. Escolha o que combinar com seu cliente.

Adicione uma entrada em mcpServers dentro de ~/.claude.json (Claude Code) ou ~/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 e Cline compartilham o mesmo formato de config MCP. O bloco é idêntico ao do Claude.

{
  "mcpServers": {
    "makcards": {
      "type": "http",
      "url": "https://mcp.makcards.online/v1",
      "headers": {
        "Authorization": "Bearer mk_live_xxxxxxxxxxxxxxxxxx"
      }
    }
  }
}

Duas opções. Nó MCP (disponível em builds recentes do n8n) – aponte para https://mcp.makcards.online/v1 e configure o header Authorization nas credenciais. Nó HTTP Request – chame REST diretamente:

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 }

O Custom GPT Actions lê OpenAPI. Use o subset seguro para IA para que o chat não consiga gastar pérolas por engano.

Action source: https://makcards.online/api/v1/public/openapi.ai.json
Authentication: API Key (Bearer)
Auth value:     mk_live_xxxxxxxxxxxxxxxxxx

MCP local em stdio. A chave nunca sai da sua máquina: vai direto para nossa REST API como Bearer. Exige Node.js 20+.

{
  "mcpServers": {
    "makcards": {
      "command": "npx",
      "args": ["-y", "@maccards/mcp"],
      "env": {
        "MAKCARDS_API_KEY": "mk_live_xxxxxxxxxxxxxxxxxx"
      }
    }
  }
}

Sem Node.js? Rode o mesmo binário como container. A imagem é publicada apenas para linux/amd64, então Apple Silicon precisa de uma flag extra (veja abaixo). Se você tem Node 20+, a aba npx acima é mais simples.

Hosts linux/amd64 (Mac Intel, Linux Intel/AMD, 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): adicione --platform linux/amd64 para que o Docker baixe a imagem amd64 e a execute via Rosetta. Funciona, mas a inicialização é mais lenta do que a opção nativa via 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"
      }
    }
  }
}

Se seu agente já roda em um shell (Claude Code, Cursor em modo agente, Aider, Codex, qualquer container), este é o caminho mais curto: HTTPS simples + Bearer, respostas em JSON, sem runtime MCP para instalar. As quatro receitas abaixo cobrem tudo que nossas tools MCP empacotam.

# Configuração inicial
export MAKCARDS_API_KEY=mk_live_xxxxxxxxxxxxxxxxxx
BASE=https://app.makcards.online/api/v1/public
H="Authorization: Bearer $MAKCARDS_API_KEY"

# Listar baralhos que a chave pode ler
curl -s -H "$H" "$BASE/decks" | jq

# Puxar 3 cartas de qualquer baralho acessível
curl -s -X POST "$BASE/draw" -H "$H" -H "Content-Type: application/json" \
  -d '{"scope":"any","count":3,"image_width":1024}' | jq

# Salvar a primeira imagem direto no disco
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

# Verificar o estado do rate-limit
curl -s -H "$H" "$BASE/usage" | jq

Duas razões para preferir Bash a MCP: contexto do agente menor (sem schemas de tools para carregar) e um processo a menos para gerenciar. Razões para preferir MCP: seu cliente não tem shell (ChatGPT Apps, Claude Desktop, Cursor sem modo agente), ou você quer prompts via slash-commands.

Hosted, local ou shell? Hosted MCP (mcp.makcards.online) é o caminho mais rápido e funciona atrás de proxies corporativos. Local stdio é a opção quando sua política de segurança diz «sem serviços MCP de terceiros»: seu cliente de IA conversa com um processo local, que conversa com nossa REST API usando sua chave. Bash pula a camada MCP inteira e só serve para agentes que já abrem shell. Mesmas tools, mesmos dados.

Limites de uso

Por conta e por janela. POST /draw é contabilizado em lote: count=5 consome 5 unidades.

Janela Free Premium
Tiragens por minuto10120
Tiragens por hora702 000
Tiragens por dia17010 000
/decks por minuto10120
Downloads de imagem por minuto20240

Estado em tempo real em GET /api/v1/public/usage. Headers em cada resposta: RateLimit-Limit, RateLimit-Remaining, RateLimit-Reset (RFC 9331).

Ativar Premium com pérolas

Privacidade e segurança

A marca d'água fica

Toda imagem de carta carrega uma marca d'água do domínio com 6 % de opacidade. Remover viola os termos. A API nunca expõe o original sem marca.

Conteúdo não confiável

Textos de baralhos e cartas são gerados por usuários. Trate-os como entrada não confiável: nunca permita que um nome ou descrição sobrescreva seu system prompt.

Não é um serviço de saúde

As cartas MAC são uma ferramenta de reflexão. Seu agente não deve apresentar uma carta puxada como diagnóstico, previsão ou tratamento. Inclua links para canais de ajuda em crise se houver risco de o usuário estar em sofrimento.

Detalhes: Termos de serviço · Política de privacidade.

FAQ

Perguntas comuns de integradores.

Por que dois documentos OpenAPI?
O ChatGPT Custom GPT Builder expõe cada operação ao usuário final durante o setup do action. A spec completa contém POST /invite-codes/generate, que gasta pérolas. Se um usuário autorizasse o chat a chamar essa operação por acidente, quem pagaria seria você. O subset seguro para IA remove totalmente a área de códigos de convite — não existe caminho de código para o chat gastar pérolas.
Posso obter uma imagem sem marca d'água?
Não. É uma posição deliberada de proteção de IP. A API serve apenas JPEGs com marca d'água em 512 ou 1024 pixels. O original vive dentro do tabuleiro jogável.
O que é scope=any?
Amostragem uniforme entre as cartas que o chamador consegue ler: baralhos próprios, públicos aprovados e adquiridos por grants. A amostragem é por carta, não por baralho, então baralhos grandes contribuem proporcionalmente.
Vocês registram meu chat?
Não. Registramos as chamadas de API — request id, account id, endpoint, status, latência, IP, user-agent. A conversa entre o usuário e a IA não passa pelos nossos servidores, a não ser que o próprio agente a envie.
Quão atual é a spec OpenAPI?
Ela é distribuída junto com o binário via go:embed. Cada release da API recompila os endpoints da spec. Não existe manifesto separado que se possa esquecer de publicar.
Preciso de MCP se meu agente já tem shell?
Não. Se o agente sabe rodar curl e parsear JSON, a REST API é o caminho mais simples. MCP existe para clientes em sandbox (ChatGPT Apps, Claude Desktop, Cursor) que não conseguem usar shell. Hosted MCP e local stdio são wrappers finos sobre os mesmos endpoints REST, então você não perde funcionalidade. Veja a aba Bash / shell de agente para receitas de curl prontas.