loading…
Search for a command to run...
loading…
A multi-tenant SaaS API that integrates Hinova SGA ERP and Atomos chat platforms to automate billing and financial workflows. It enables AI agents to process ve
A multi-tenant SaaS API that integrates Hinova SGA ERP and Atomos chat platforms to automate billing and financial workflows. It enables AI agents to process vehicle information and manage customer payment requests via webhooks.
API em Node.js + TypeScript + Hono para orquestrar integrações SGA (Hinova) e Chat Atomos em modelo SaaS multi-empresas. Consulta boletos por placa, envia PIX/PDF ou mensagem de regularização (revistoria) conforme configuração por cliente.
| Ambiente | URL |
|---|---|
| Produção | https://mcpfinanceiro-production.up.railway.app |
| Local | http://localhost:3000 |
Use a base URL desejada nos exemplos de cURL abaixo.
npm install
Copie .env.example para .env e preencha:
SUPABASE_URL=https://seu-projeto.supabase.co
SUPABASE_SERVICE_ROLE_KEY=sua-service-role-key
No Supabase Dashboard > SQL Editor, execute em ordem:
supabase/migrations/001_initial_schema.sqlsupabase/migrations/002_rename_base_url_sga_to_base_url.sql (se existir)supabase/migrations/003_situacoes_envio_direto_e_checagem.sqlsupabase/migrations/004_intervalo_max_50.sqlnpm run dev
GET / — Verifica se a API está no ar.
curl -s https://mcpfinanceiro-production.up.railway.app/
Resposta (200):
{"status":"ok","service":"mcpfinanceiro"}
POST /api/v1/clientes — Cadastra um cliente com todas as configurações (boleto, respostas, revistoria).
Body (JSON):
| Campo | Tipo | Obrigatório | Descrição |
|---|---|---|---|
nome |
string | sim | Nome do cliente |
ativo |
boolean | não | Default true |
token_erp |
string | sim | Token Hinova SGA |
token_chat |
string | sim | Token Chat Atomos |
token_canal |
string | sim | Token do canal Atomos |
perfil_sistema |
"SGA" | "SOUTH" | não | Default "SGA" |
base_url |
string (URL) | não | Default https://api.hinova.com.br/api/sga/v2 |
configuracoes_boleto |
object | sim | Ver tabela abaixo |
configuracoes_respostas |
object | sim | Ver tabela abaixo |
configuracoes_revistoria |
object | sim | Ver tabela abaixo |
configuracoes_boleto:
| Campo | Tipo | Descrição |
|---|---|---|
dias_antes_vencimento |
number | Dias antes do vencimento para buscar boleto (0–60) |
dias_depois_vencimento |
number | Dias depois do vencimento (0–60). Soma com dias_antes ≤ 50 |
situacoes_envio_direto |
string[] | Ex.: ["ATIVO"] — envia PIX/PDF direto |
situacoes_com_checagem_vencimento |
string[] | Ex.: ["INADIMPLENTE"] — checa dias após vencimento |
dias_checagem_vencimento |
number | Se passar desse número de dias após vencimento, retorna regularização |
configuracoes_respostas:
| Campo | Tipo | Descrição |
|---|---|---|
response_sucesso |
string | Mensagem quando boleto/PIX enviados. Use {{data_vencimento}} e {{valor_boleto}} |
response_regularizacao_moto |
string | Mensagem de regularização para moto |
response_regularizacao_veiculo |
string | Mensagem de regularização para carro |
response_boleto_baixado |
string | Mensagem quando boleto já está baixado |
configuracoes_revistoria:
| Campo | Tipo | Descrição |
|---|---|---|
enviar_midia |
boolean | Se true, envia vídeo de regularização (quando houver URL) |
video_moto |
string (URL) ou null | URL do vídeo para moto |
video_carro |
string (URL) ou null | URL do vídeo para carro |
cURL — Cadastrar cliente:
curl -X POST https://mcpfinanceiro-production.up.railway.app/api/v1/clientes \
-H "Content-Type: application/json" \
-d '{
"nome": "Meu Cliente",
"ativo": true,
"token_erp": "SEU_TOKEN_ERP",
"token_chat": "SEU_TOKEN_CHAT",
"token_canal": "SEU_TOKEN_CANAL",
"perfil_sistema": "SGA",
"base_url": "https://api.hinova.com.br/api/sga/v2",
"configuracoes_boleto": {
"dias_antes_vencimento": 30,
"dias_depois_vencimento": 20,
"situacoes_envio_direto": ["ATIVO"],
"situacoes_com_checagem_vencimento": ["INADIMPLENTE"],
"dias_checagem_vencimento": 5
},
"configuracoes_respostas": {
"response_sucesso": "Boleto e pix enviados! Data: {{data_vencimento}}, Valor: {{valor_boleto}}",
"response_regularizacao_moto": "Estamos enviando o vídeo modelo para regularização.",
"response_regularizacao_veiculo": "Estamos enviando o vídeo modelo para regularização.",
"response_boleto_baixado": "Boleto já foi baixado."
},
"configuracoes_revistoria": {
"enviar_midia": false,
"video_moto": null,
"video_carro": null
}
}'
Resposta (201):
{"id":"uuid-do-cliente","message":"Cliente criado com sucesso"}
Resposta (400): {"error":"mensagem"} (validação ou banco).
PATCH /api/v1/clientes/:id/configuracoes — Atualiza apenas as configurações enviadas (parcial). :id = UUID do cliente.
Body (JSON): qualquer combinação de:
configuracoes_boleto — mesmos campos do cadastro (todos opcionais no PATCH)configuracoes_respostas — mesmos campos (opcionais)configuracoes_revistoria — mesmos campos (opcionais)Regra: dias_antes_vencimento + dias_depois_vencimento ≤ 50.
cURL — Ajustar apenas boleto (ex.: 30 dias antes, 20 depois):
curl -X PATCH https://mcpfinanceiro-production.up.railway.app/api/v1/clientes/SEU_CLIENTE_UUID/configuracoes \
-H "Content-Type: application/json" \
-d '{
"configuracoes_boleto": {
"dias_antes_vencimento": 30,
"dias_depois_vencimento": 20
}
}'
cURL — Ajustar apenas revistoria (ativar envio de vídeo):
curl -X PATCH https://mcpfinanceiro-production.up.railway.app/api/v1/clientes/SEU_CLIENTE_UUID/configuracoes \
-H "Content-Type: application/json" \
-d '{
"configuracoes_revistoria": {
"enviar_midia": true,
"video_moto": "https://exemplo.com/video-moto.mp4",
"video_carro": "https://exemplo.com/video-carro.mp4"
}
}'
Resposta (200):
{"message":"Configurações atualizadas com sucesso"}
Resposta (404): {"error":"Cliente não encontrado"}.
POST /api/v1/webhook — Recebe placa e telefone, consulta SGA, envia PIX/PDF ou retorna mensagem de regularização/revistoria. Resposta é um texto para o agente de IA (ex.: LLM).
Body (JSON):
| Campo | Tipo | Obrigatório | Descrição |
|---|---|---|---|
placa |
string | sim | Placa do veículo |
telefone |
string | sim | Telefone (com DDD, só números ou formatado) |
client_id |
string (UUID) | não* | ID do cliente. *Obrigatório no body ou no header X-Client-Id |
cURL — Com client_id no body:
curl -X POST https://mcpfinanceiro-production.up.railway.app/api/v1/webhook \
-H "Content-Type: application/json" \
-d '{
"placa": "ABC1D23",
"telefone": "5581999999999",
"client_id": "SEU_CLIENTE_UUID"
}'
cURL — Com client_id no header (recomendado para integração com agente):
curl -X POST https://mcpfinanceiro-production.up.railway.app/api/v1/webhook \
-H "Content-Type: application/json" \
-H "X-Client-Id: SEU_CLIENTE_UUID" \
-d '{"placa":"ABC1D23","telefone":"5581999999999"}'
Resposta (200):
{"message":"Boleto e pix enviados! Data: 20/02/2026, Valor: R$ 150,00"}
ou, em caso de regularização (revistoria):
{"message":"Isto é imprescindível: Acione a habilidade de Pendência de Revistoria quando identificar inadimplência no veículo.\n\nEstamos enviando o vídeo modelo para regularização."}
Outras mensagens possíveis: "Veículo não encontrado.", "Boleto já foi baixado.", "Cliente não encontrado ou inativo.", ou mensagem de erro da API SGA.
Resposta (400): {"error":"client_id é obrigatório (body ou header X-Client-Id)"} ou erros de validação (placa/telefone).
(hoje - dias_antes_vencimento) e (hoje + dias_depois_vencimento). Soma máxima 50 dias.situacoes_envio_direto, envia PIX e link do boleto e retorna response_sucesso.situacoes_com_checagem_vencimento e o boleto estiver vencido há mais de dias_checagem_vencimento dias, retorna mensagem de regularização (com prefixo de instrução para a IA).enviar_midia estiver ativo e houver video_moto/video_carro, o vídeo é enviado pelo Atomos (sem texto junto ao vídeo).| Comando | Descrição |
|---|---|
npm run dev |
Inicia em modo watch (desenvolvimento) |
npm run start |
Inicia em produção |
npm run build |
Compila TypeScript |
npm run typecheck |
Verifica tipos sem gerar arquivos |
Добавь это в claude_desktop_config.json и перезапусти Claude Desktop.
{
"mcpServers": {
"mcp-financeiro": {
"command": "npx",
"args": []
}
}
}Read, send and search emails from Claude
Send, search and summarize Slack messages
No-code MCP client for team chat platforms, such as Slack, Microsoft Teams, and Discord.
A community discord server dedicated to MCP by [Frank Fiegel](https://github.com/punkpeye)