Model Context Protocol

Integrar ChatGPT, Claude e Codex ao Smart CMV

O Smart CMV expõe um servidor MCP autenticado por OAuth 2.1. Assistentes de IA compatíveis conectam-se, fazem login como um usuário real do Smart CMV e chamam ferramentas que respeitam as permissões e o RLS da sua empresa.

Endpoint
Use exatamente esta URL no cliente MCP.
https://smart-cmv.lovable.app/mcp

Transporte: Streamable HTTP. Autenticação: OAuth 2.1 com Dynamic Client Registration (DCR) — o cliente se registra sozinho na primeira conexão.

Conectar cada cliente

ChatGPT (Custom Connectors / GPTs)
  1. Em Settings → Connectors → Add connector, escolha “Custom MCP server”.
  2. Cole a URL: https://smart-cmv.lovable.app/mcp.
  3. ChatGPT abrirá o fluxo OAuth — faça login no Smart CMV e aprove o acesso.
  4. Após aprovar, as ferramentas whoami, list_lojas e list_insumos ficam disponíveis.
Claude (Desktop / Web)

Em Settings → Connectors → Add custom connector, informe:

{
  "name": "Smart CMV",
  "url": "https://smart-cmv.lovable.app/mcp"
}

Claude detecta o OAuth automaticamente, abre o navegador para login/consent e persiste a conexão.

Codex CLI

Adicione ao ~/.codex/config.toml:

[mcp_servers.smart_cmv]
url = "https://smart-cmv.lovable.app/mcp"
transport = "http"

Rode codex mcp login smart_cmv para autenticar via OAuth.

Escopos OAuth

O Smart CMV usa o Supabase Auth como servidor de autorização OAuth 2.1. Os escopos solicitados são escopos de identidade, não permissões de dados:

  • openid
    Emite um ID token para o cliente MCP identificar a sessão.
  • email
    Compartilha o e-mail da conta com o cliente para exibição.
  • profile
    Compartilha nome e dados básicos de perfil.

O que cada ferramenta pode ler ou alterar continua sendo decidido pelas políticas RLS e pelos papéis em user_roles da sua empresa. Um token OAuth só consegue enxergar dados aos quais o próprio usuário já tem acesso no app.

Ferramentas disponíveis

whoami
Retorna o usuário autenticado e as empresas às quais pertence.

Entrada: nenhuma.

Saída:

{
  "user_id": "…",
  "email": "voce@exemplo.com",
  "profile": { "id": "…", "nome": "…", "email": "…" },
  "empresas": [ { "empresa_id": "…", "role": "master" } ]
}
list_lojas
Lista as lojas de uma empresa às quais o usuário tem acesso.

Entrada: empresa_id (UUID).

Exemplo de prompt:

Liste as lojas da empresa {empresa_id} usando o Smart CMV.
list_insumos
Lista insumos da empresa com filtro opcional por nome.

Entrada:

  • empresa_id (UUID) — obrigatório.
  • busca (string, opcional) — filtra por trecho do nome.
  • limite (número, opcional, padrão 50, máx. 200).

Exemplo de prompt:

Mostre os insumos com "queijo" no nome na empresa {empresa_id}.

Chamada MCP manual (avançado)

Depois de obter um access_token pelo fluxo OAuth 2.1 (descoberta em /.well-known/oauth-protected-resource no endpoint MCP), você pode chamar as ferramentas via JSON-RPC sobre HTTP:

curl -X POST https://smart-cmv.lovable.app/mcp \
  -H "Authorization: Bearer $ACCESS_TOKEN" \
  -H "Content-Type: application/json" \
  -H "Accept: application/json, text/event-stream" \
  -d '{
    "jsonrpc": "2.0",
    "id": 1,
    "method": "tools/call",
    "params": {
      "name": "whoami",
      "arguments": {}
    }
  }'

Para listar as ferramentas disponíveis:

curl -X POST https://smart-cmv.lovable.app/mcp \
  -H "Authorization: Bearer $ACCESS_TOKEN" \
  -H "Content-Type: application/json" \
  -H "Accept: application/json, text/event-stream" \
  -d '{"jsonrpc":"2.0","id":1,"method":"tools/list"}'

O cabeçalho Accept: application/json, text/event-stream é obrigatório pelo spec do MCP Streamable HTTP — sem ele o servidor responde 406 Not Acceptable.

Segurança

  • Cada chamada é executada como o usuário autenticado — RLS por empresa continua ativo.
  • Nenhuma ferramenta usa a service role key; todas passam pelo publishable key + bearer do usuário.
  • Você pode revogar o acesso a qualquer momento nas configurações da conta do assistente.
  • Tokens têm validade curta e são renovados via refresh token automaticamente pelo cliente MCP.