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.
https://smart-cmv.lovable.app/mcpTransporte: Streamable HTTP. Autenticação: OAuth 2.1 com Dynamic Client Registration (DCR) — o cliente se registra sozinho na primeira conexão.
Conectar cada cliente
- Em Settings → Connectors → Add connector, escolha “Custom MCP server”.
- Cole a URL:
https://smart-cmv.lovable.app/mcp. - ChatGPT abrirá o fluxo OAuth — faça login no Smart CMV e aprove o acesso.
- Após aprovar, as ferramentas
whoami,list_lojaselist_insumosficam disponíveis.
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.
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:
- openidEmite um ID token para o cliente MCP identificar a sessão.
- emailCompartilha o e-mail da conta com o cliente para exibição.
- profileCompartilha 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
whoamiEntrada: nenhuma.
Saída:
{
"user_id": "…",
"email": "voce@exemplo.com",
"profile": { "id": "…", "nome": "…", "email": "…" },
"empresas": [ { "empresa_id": "…", "role": "master" } ]
}list_lojasEntrada: empresa_id (UUID).
Exemplo de prompt:
Liste as lojas da empresa {empresa_id} usando o Smart CMV.list_insumosEntrada:
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.
