LigueLead

Send SMS, SMS Flash, and voice calls in Brazil via LigueLead API. Brazilian CPaaS with BRL pricing and PIX payments.

Documentation

📱 LigueLead MCP Server

MCP Server for sending SMS, SMS Flash, voice calls, and RCS in Brazil via the LigueLead API. Enable Claude, Cursor, Windsurf, and any MCP-compatible AI agent to send real communications — no code, no complex setup.

🇧🇷 Brazilian CPaaS · BRL pricing · PIX payments · PT-BR support

npm version License: MIT


Available tools

ToolDescription
send_smsSend SMS or SMS Flash campaign to Brazilian phone numbers
list_voice_uploadsList all uploaded voice audio files
get_voice_uploadGet details of a specific voice upload
upload_voice_audioUpload MP3/WAV audio for voice campaigns
send_voice_messageSend a voice campaign to a list of phones
list_rcs_templatesList every registered RCS template
create_rcs_template_textCreate a plain-text RCS template
create_rcs_template_mediaCreate an RCS template with image/video
create_rcs_template_cardCreate a rich card RCS template with buttons
create_rcs_template_carouselCreate a carousel RCS template (2-10 cards)
send_rcsSend an RCS campaign (template-based or freeform)

Quick start

Option 1: npx (recommended)

No installation needed — just add to your MCP client config:

{
  "mcpServers": {
    "liguelead": {
      "command": "npx",
      "args": ["-y", "@liguelead/mcp-server"],
      "env": {
        "LIGUELEAD_API_TOKEN": "your-token",
        "LIGUELEAD_APP_ID": "your-app-id",
        "TRANSPORT": "stdio"
      }
    }
  }
}

Option 2: Clone & build

git clone https://github.com/liguelead/mcp.git
cd mcp
npm install
cp .env.example .env  # Edit with your credentials
npm run build
npm start

The server starts at http://localhost:3000 by default.

Getting your credentials

  1. Go to areadocliente.liguelead.app.br
  2. Navigate to Integrações → API Token
  3. Create an App and copy the API Token and App ID

Transports

TransportUse caseEnv var
Streamable HTTP (default)Remote server, any MCP clientTRANSPORT=http
stdioLocal — Claude Desktop / Claude Code / CursorTRANSPORT=stdio

Client configuration

Claude Desktop (stdio)

Edit claude_desktop_config.json:

{
  "mcpServers": {
    "liguelead": {
      "command": "npx",
      "args": ["-y", "@liguelead/mcp-server"],
      "env": {
        "LIGUELEAD_API_TOKEN": "your-token",
        "LIGUELEAD_APP_ID": "your-app-id",
        "TRANSPORT": "stdio"
      }
    }
  }
}

Claude Code

claude mcp add -s user liguelead \
  -e LIGUELEAD_API_TOKEN=your-token \
  -e LIGUELEAD_APP_ID=your-app-id \
  -e TRANSPORT=stdio \
  -- npx -y @liguelead/mcp-server

Cursor / Windsurf

Add to your MCP settings with the same configuration as Claude Desktop above.

Remote HTTP server

Any MCP client that supports Streamable HTTP can connect via:

POST https://your-server.com/mcp

Credentials stay on the server — the client doesn't need them.

mcp-remote bridge

For clients that don't support HTTP natively (e.g., Claude Desktop connecting to a remote server):

{
  "mcpServers": {
    "liguelead": {
      "command": "npx",
      "args": ["mcp-remote", "https://your-server.com/mcp"]
    }
  }
}

Deploy

Docker

docker build -t liguelead-mcp .
docker run -d -p 3000:3000 \
  -e LIGUELEAD_API_TOKEN=your-token \
  -e LIGUELEAD_APP_ID=your-app-id \
  liguelead-mcp

Railway / Render

  1. Connect the Git repository
  2. Set environment variables: LIGUELEAD_API_TOKEN, LIGUELEAD_APP_ID
  3. Build command: npm install && npm run build
  4. Start command: npm start

Credential security

ScenarioWhere credentials live
stdio (local)Environment variables in client config
HTTP (remote)Environment variables on the server
Docker-e flags or orchestrator secrets
CI/CDProvider secrets (GitHub Actions, etc.)

⚠️ Credentials are NEVER committed to code. The .env file is in .gitignore.

Webhook

Setup

  1. Go to areadocliente.liguelead.app.br
  2. Navigate to Integrações → API Token → Webhook URL
  3. Enter your public HTTPS endpoint URL
  4. Save

A single URL receives notifications for all channels (SMS, SMS Flash, Voice, RCS).

Query received webhooks

curl http://localhost:3000/webhooks

Returns:

{
  "total": 42,
  "webhooks": [...]
}

⚠️ CRITICAL: LigueLead does NOT retry failed webhooks. If your endpoint is down, the webhook is lost permanently.

Phone number format

Brazilian phone numbers are accepted in three formats:

FormatExampleDigits
National (recommended)1199999999911
International+551199999999914 chars
DDI without +551199999999913

SMS limits

PartCharactersCredits
1st partup to 1601 credit
Additional partsevery 152 chars1 credit each
Maximum total1,600 chars~11 credits

🚫 SMS Flash does NOT allow URLs in message content.

Voice call limits

  • Supported formats: MP3 and WAV (no AAC/M4A)
  • Max file size: 50 MB (recommended: 5–10 MB)
  • Billing: Up to 30s = 1 credit; over 30s = 2 credits
  • Dialing window: 08:00–21:44 (America/Sao_Paulo). Requests after 21:45 are queued until 08:00.

RCS templates & limits

RCS campaigns are built from a template registered via one of the create_rcs_template_* tools, then sent with send_rcs using the returned template_id (or as a freeform, template-less message).

Template typeToolNotes
Textcreate_rcs_template_textPlain text, no media/buttons
Mediacreate_rcs_template_mediaImage or short video (media_url or media_file, mutually exclusive)
Rich cardcreate_rcs_template_cardOptional media + 1-4 buttons (reply, open_url, dial_call)
Carouselcreate_rcs_template_carousel2-10 rich cards; all cards must declare the same button count/type/order
  • body max 1,600 chars; supports {{N}} variable placeholders, overridable via default_variables (template) or template_variables (send time)
  • media_file accepts a base64 data URI, max 5 MB decoded
  • fallback_message (max 306 chars) is the SMS sent if RCS delivery fails
  • send_rcs freeform message is capped at 306 chars (mutually exclusive with template_id) — reused as the SMS fallback
  • Async operation — returns 202 when queued; delivery status arrives via the configured webhook

Rate limits

LimitValue
Requests per minute600,000
Simultaneous requests10,000
Recipients per request10,000

Project structure

liguelead-mcp/
├── src/
│   ├── index.ts          # Entry point — HTTP or stdio
│   ├── config.ts          # Env var validation (Zod) + .env loader
│   ├── lib/
│   │   ├── api-client.ts  # HTTP client for LigueLead API
│   │   ├── validators.ts  # Phone/RCS schemas (Zod)
│   │   └── webhook.ts     # Webhook handler + GET /webhooks
│   └── tools/
│       ├── sms.ts         # Tool: send_sms
│       ├── voice.ts       # Tools: voice (list/get/upload/send)
│       └── rcs.ts         # Tools: RCS (templates + send_rcs)
├── skill/                  # Claude Code Skill
│   └── SKILL.md
├── .env.example
├── Dockerfile
├── LICENSE
├── package.json
├── server.json
├── glama.json
└── README.md

Troubleshooting

ProblemSolution
LIGUELEAD_API_TOKEN is requiredSet up .env or environment variables
401 UnauthorizedCheck api-token and app-id in LigueLead panel
429 Too Many RequestsRate limit exceeded — wait for reset
Upload rejectedOnly MP3 and WAV accepted (no AAC/M4A)
Stale buildrm -rf dist && npm run build

License

MIT



🇧🇷 Documentação em Português

LigueLead MCP Server

MCP Server para a API da LigueLead — SMS, SMS Flash, Campanhas de Voz e RCS no Brasil.

Permite que Claude, Cursor, Windsurf e qualquer agente de IA compatível com MCP enviem comunicações reais — sem código, sem setup complexo.

CPaaS Brasileiro · Preço em BRL · Pagamento via PIX · Suporte em PT-BR

Início rápido

Opção 1: npx (recomendado)

Sem instalação — basta adicionar à config do seu cliente MCP:

{
  "mcpServers": {
    "liguelead": {
      "command": "npx",
      "args": ["-y", "@liguelead/mcp-server"],
      "env": {
        "LIGUELEAD_API_TOKEN": "seu-token",
        "LIGUELEAD_APP_ID": "seu-app-id",
        "TRANSPORT": "stdio"
      }
    }
  }
}

Opção 2: Clone & build

git clone https://github.com/liguelead/mcp.git
cd mcp
npm install
cp .env.example .env  # Edite com suas credenciais
npm run build
npm start

Obtendo suas credenciais

  1. Acesse areadocliente.liguelead.app.br
  2. Vá em Integrações → API Token
  3. Crie um App e copie o API Token e App ID

Tools disponíveis

ToolDescrição
send_smsEnvia campanha de SMS ou SMS Flash para números brasileiros
list_voice_uploadsLista todos os áudios enviados
get_voice_uploadDetalhes de um áudio específico
upload_voice_audioUpload de áudio MP3/WAV para campanhas de voz
send_voice_messageDispara campanha de voz para lista de telefones
list_rcs_templatesLista todos os templates de RCS cadastrados
create_rcs_template_textCria um template de RCS somente texto
create_rcs_template_mediaCria um template de RCS com imagem/vídeo
create_rcs_template_cardCria um template de RCS com rich card e botões
create_rcs_template_carouselCria um template de RCS carrossel (2-10 cards)
send_rcsDispara uma campanha de RCS (com template ou texto livre)

Configuração por cliente MCP

Claude Desktop (stdio)

Edite claude_desktop_config.json:

{
  "mcpServers": {
    "liguelead": {
      "command": "npx",
      "args": ["-y", "@liguelead/mcp-server"],
      "env": {
        "LIGUELEAD_API_TOKEN": "seu-token",
        "LIGUELEAD_APP_ID": "seu-app-id",
        "TRANSPORT": "stdio"
      }
    }
  }
}

Claude Code

claude mcp add -s user liguelead \
  -e LIGUELEAD_API_TOKEN=seu-token \
  -e LIGUELEAD_APP_ID=seu-app-id \
  -e TRANSPORT=stdio \
  -- npx -y @liguelead/mcp-server

Formato de números de telefone

FormatoExemploDígitos
Nacional (recomendado)1199999999911
Internacional+551199999999914 chars
DDI sem +551199999999913

Limites de SMS

ParteCaracteresCréditos
1ª parteaté 1601 crédito
Partes adicionaisa cada 152 chars1 crédito cada
Máximo total1.600 chars~11 créditos

🚫 SMS Flash NÃO permite URLs no conteúdo da mensagem.

Limites de voz

  • Formatos suportados: MP3 e WAV (AAC e M4A não são suportados)
  • Tamanho máximo: 50 MB (recomendado: 5–10 MB)
  • Cobrança: Até 30s = 1 crédito; acima de 30s = 2 créditos
  • Janela de discagem: 08h00–21h44 (America/Sao_Paulo). Requests após 21h45 ficam na fila até as 08h00.

Templates e limites de RCS

Uma campanha de RCS é criada a partir de um template registrado com uma das tools create_rcs_template_*, e enviada com send_rcs usando o template_id retornado (ou como mensagem livre, sem template).

Tipo de templateToolObservações
Textocreate_rcs_template_textSomente texto, sem mídia/botões
Mídiacreate_rcs_template_mediaImagem ou vídeo curto (media_url ou media_file, mutuamente exclusivos)
Rich cardcreate_rcs_template_cardMídia opcional + 1-4 botões (reply, open_url, dial_call)
Carrosselcreate_rcs_template_carousel2-10 rich cards; todos os cards devem declarar o mesmo número/tipo/ordem de botões
  • body até 1.600 chars; suporta placeholders {{N}}, sobrescrevíveis via default_variables (template) ou template_variables (no envio)
  • media_file aceita um data URI em base64, máximo 5 MB decodificado
  • fallback_message (máx 306 chars) é o SMS enviado caso a entrega via RCS falhe
  • O message livre do send_rcs é limitado a 306 chars (mutuamente exclusivo com template_id) — reaproveitado como fallback de SMS
  • Operação assíncrona — retorna 202 ao ser enfileirada; o status chega pelo webhook configurado

Webhook

  1. Acesse areadocliente.liguelead.app.br
  2. Vá em Integrações → API Token → Webhook URL
  3. Insira a URL HTTPS do seu endpoint
  4. Salve

Uma única URL recebe notificações de todos os canais (SMS, SMS Flash, Voz, RCS).

⚠️ CRÍTICO: LigueLead NÃO faz retry. Se o endpoint falhar, o webhook é perdido permanentemente.