Uma consulta por vez
Alguém abre o portal, digita o CPF e anota numa planilha. Funciona para dez motoristas e trava em trezentos.
Para empresas e frotas
Validade, bloqueios, pontos e exames num diagnóstico só. Use a API REST no seu backend, ou conecte o servidor MCP e deixe o seu agente consultar sozinho.
Descoberta pública, execução autenticada. A mesma chave vale para REST e MCP.
{
"mcpServers": {
"minha-cnh": {
"url": "https://minhacnh.doutormultas.com.br/api/mcp",
"headers": {
"Authorization": "Bearer cnh_live_<prefix>_<secret>"
}
}
}
}Conecte o servidor a um cliente de IA e o agente encadeia as consultas sozinho. O diálogo abaixo é ilustrativo, montado com as ferramentas e os campos reais.
O motorista da referência motorista-42 pode assumir uma rota amanhã?
Vou buscar o relatório mais recente dessa referência e conferir a situação de pontos.
→ find_report_by_external_ref({ "externalRef": "motorista-42" }){ "status": "DELIVERED", "diagnosis": { "status": "WARNING", … } }→ calculate_points({ "currentPoints": 18, "gravissimasCount": 2 }){ "limit": 20, "remainingPoints": 2, "riskLevel": "critical", "isOverLimit": false }Pode dirigir. A CNH está válida até 15/03/2027, categoria AB, sem bloqueio ativo e com toxicológico em dia. O ponto de atenção é outro: 18 pontos e 2 infrações gravíssimas nos últimos 12 meses deixam o limite dele em 20. Faltam 2 pontos.
O crédito foi consumido quando o relatório foi pedido, não quando o agente leu.
Três caminhos, a mesma base. Comece pelo conector se quem consulta é um agente; use REST se a chamada parte do seu backend.
Sem chave, sem backend, sem código: cole o endereço como conector personalizado, faça login e escolha a organização. As ferramentas aparecem no chat.
No Claude Cowork ou no Claude Desktop: Configurações → Conectores → Adicionar conector personalizado. Cole o endereço abaixo.
Faça login na Minha CNH pela janela que abrir. A autorização usa OAuth com PKCE.
Escolha a organização que o assistente vai usar. É ela que consome os créditos.
Cada pessoa conecta uma organização por vez. Se as ferramentas não aparecerem, remova e adicione o conector de novo.
Os dois usam a mesma credencial e a mesma cobrança do conector acima.
Cole no arquivo de configuração do seu cliente MCP. Transporte Streamable HTTP e stateless: cada requisição carrega o Bearer token.
{
"mcpServers": {
"minha-cnh": {
"url": "https://minhacnh.doutormultas.com.br/api/mcp",
"headers": {
"Authorization": "Bearer cnh_live_<prefix>_<secret>"
}
}
}
}Um POST cria o relatório e devolve o reportId na hora.
curl -X POST "https://minhacnh.doutormultas.com.br/api/v1/reports" \
-H "Authorization: Bearer cnh_live_<prefix>_<secret>" \
-H "Content-Type: application/json" \
-d '{
"cpf": "123.456.789-09",
"externalRef": "motorista-42"
}'{
"reportId": "clx8h2k9v0001qz3f7g2m4n8p",
"status": "PROCESSING",
"driver": {
"id": "cldrv7t2p0004qz3fa1b9c6de",
"cpf": "123.456.789-09"
},
"statusUrl": "/api/v1/reports/clx8h2k9v0001qz3f7g2m4n8p",
"webhookConfigured": true,
"estimatedDeliveryAt": "2026-06-01T12:05:00Z"
}Troque a chave de exemplo pela da sua organização, gerada em Configurações → API.
Os números que você precisa antes de decidir integrar.
O POST responde na hora. O diagnóstico chega por webhook ou consulta.
Por organização, somando todas as chaves. Ajustáveis pelo time Minha CNH.
REST e JSON-RPC puros. Qualquer linguagem que faça requisição serve.
A chave é habilitada por organização depois da aprovação comercial.
As perguntas que uma frota faz no dia a dia. Cada uma tem as suas operações, iguais no MCP e na API REST.
Validade, bloqueios e exames num diagnóstico só, a partir do CPF.
request_reportwait_for_reportget_reportRecupere um relatório pela sua própria referência, ou liste os mais recentes da organização.
find_report_by_external_reflist_reportsTraduza um código RENAINF e calcule a situação de pontos sob a Lei 14.071.
lookup_violation_codecalculate_pointsask_doutor_multasConsulte o saldo da linha de crédito e o consumo do mês.
get_credit_balanceget_usageA consulta é assíncrona porque a origem do dado é. Só o primeiro passo consome crédito.
request_reportVocê envia o CPF e, opcionalmente, a sua referência interna. A resposta volta na hora com o reportId, e é aqui que o crédito é debitado. Repetir o mesmo par dentro de uma hora devolve o mesmo relatório.
wait_for_reportO polling fica por conta da ferramenta. A espera vai de 1 a 240 segundos, com padrão de 120.
get_reportBusque pelo reportId quando quiser. Com status DELIVERED, diagnosis traz o diagnóstico curado.
As três ferramentas usam o mesmo endpoint e o mesmo envelope. Só o conteúdo de params muda de uma para a outra.
curl -X POST "https://minhacnh.doutormultas.com.br/api/mcp" \
-H "Authorization: Bearer cnh_live_<prefix>_<secret>" \
-H "Content-Type: application/json" \
-d '{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "request_report",
"arguments": { "cpf": "123.456.789-09", "externalRef": "motorista-42" }
}
}'
# Os outros dois são a mesma requisição, trocando só o "params":
# { "name": "wait_for_report", "arguments": {
# "reportId": "clx8h2k9v0001qz3f7g2m4n8p", "timeoutSeconds": 120 } }
# { "name": "get_report", "arguments": {
# "reportId": "clx8h2k9v0001qz3f7g2m4n8p" } }Para integrações fire-and-forget, configure a URL de webhook em Configurações → API e receba report.delivered.
Resposta abreviada para um motorista fictício. O mesmo shape chega no corpo do webhook.
{
"reportId": "clx8h2k9v0001qz3f7g2m4n8p",
"externalRef": "motorista-42",
"status": "DELIVERED",
"driver": { "cpf": "123.456.789-09", "licenseCategory": "AB", "expiryDate": "2027-03-15T00:00:00Z" },
"diagnosis": {
"status": "WARNING",
"validity": { "status": "success", "isExpired": false },
"blocks": { "status": "success", "hasActiveBlocks": false },
"points": { "currentPoints": 18, "limit": 20, "remainingPoints": 2 },
"...": "..."
},
"deliveredAt": "2026-06-01T12:05:00Z"
}As seções opcionais somem do JSON quando não há dado para elas, então não teste por igualdade com null. Ver o shape completo do payload
O payload acima não é o que a consulta devolve. Ele passa por uma camada que resolve os casos abaixo.
Alguém abre o portal, digita o CPF e anota numa planilha. Funciona para dez motoristas e trava em trezentos.
O limite da Lei 14.071 muda conforme o motorista tem EAR e quantas gravíssimas estão na janela de 12 meses.
Pós-pago por relatório. Só a criação cobra; consultar, listar e calcular não.
Saldo e consumo também são consultáveis pela API, então um agente responde quanto restou sem ninguém abrir o painel.
Endpoints, schemas, shape do payload, assinatura de webhook e códigos de erro.
Vai integrar por agente? A referência do servidor MCP fica aqui.