Uazapi WhatsApp MCP Server
Enables interaction with WhatsApp through the Uazapi API, allowing users to send text and media messages, manage contacts, and list conversations through natural language.
README
Uazapi MCP Server
MCP Server para integração com a API Uazapi WhatsApp v2.0
Visão Geral
Este servidor MCP (Model Context Protocol) permite que LLMs interajam com a API do Uazapi para enviar e gerenciar mensagens no WhatsApp. Ele fornece ferramentas para:
- ✉️ Enviar mensagens de texto
- 📎 Enviar mídia (imagens, vídeos, áudios, documentos)
- 👥 Gerenciar contatos
- 💬 Listar conversas
- 🔄 E mais funcionalidades conforme documentação da API
Instalação
1. Instalar Dependências
# Usando uv (recomendado)
uv pip install -r requirements.txt
# Ou usando pip
pip install -r requirements.txt
2. Configurar Variáveis de Ambiente
Você precisa configurar suas credenciais da Uazapi:
export UAZAPI_API_KEY="sua_chave_api_aqui"
export UAZAPI_INSTANCE_ID="seu_instance_id_aqui"
Como obter suas credenciais:
- Acesse https://uazapi.com/
- Faça login na sua conta
- Vá para a seção de API
- Copie seu API Key e Instance ID
3. Testar o Servidor
# Verificar sintaxe
python -m py_compile uazapi_mcp.py
# Testar execução com timeout
timeout 5s python uazapi_mcp.py || echo "Server started successfully"
4. Instalar no Claude Desktop
# Usando uv
uv run mcp install uazapi_mcp.py --name "Uazapi WhatsApp"
# Ou adicionar manualmente ao claude_desktop_config.json
Configuração manual no claude_desktop_config.json:
{
"mcpServers": {
"uazapi": {
"command": "python",
"args": ["/caminho/completo/para/uazapi_mcp.py"],
"env": {
"UAZAPI_API_KEY": "sua_chave_aqui",
"UAZAPI_INSTANCE_ID": "seu_instance_id_aqui"
}
}
}
}
Ferramentas Disponíveis
1. uazapi_send_text_message
Envia mensagem de texto para um contato do WhatsApp.
Parâmetros:
phone(string): Número do destinatário com código do país (ex: "5511999999999")message(string): Conteúdo da mensagem (1-4096 caracteres)
Exemplo de uso:
Envie "Olá, tudo bem?" para +55 11 99999-9999
2. uazapi_send_media_message
Envia mídia (imagem, vídeo, áudio ou documento) para um contato.
Parâmetros:
phone(string): Número do destinatáriomedia_url(string): URL pública do arquivo (HTTPS)media_type(enum): Tipo da mídia (image/video/audio/document)caption(string, opcional): Legenda para a mídiafilename(string, opcional): Nome do arquivo para documentos
Exemplo de uso:
Envie a imagem https://example.com/foto.jpg com legenda "Confira!" para 5511999999999
3. uazapi_get_contacts
Recupera lista de contatos do WhatsApp.
Parâmetros:
limit(int, opcional): Máximo de contatos (1-100, padrão: 20)offset(int, opcional): Número de contatos para pular (padrão: 0)response_format(enum, opcional): Formato da resposta (markdown/json, padrão: markdown)
Exemplo de uso:
Liste meus contatos do WhatsApp
Mostre os primeiros 50 contatos em formato JSON
4. uazapi_get_chats
Recupera lista de conversas recentes.
Parâmetros:
limit(int, opcional): Máximo de conversas (1-100, padrão: 20)offset(int, opcional): Número de conversas para pular (padrão: 0)response_format(enum, opcional): Formato da resposta (markdown/json)
Exemplo de uso:
Mostre minhas conversas recentes no WhatsApp
Liste os últimos 30 chats
Características e Boas Práticas
Validação de Entrada
- ✅ Todos os parâmetros são validados usando Pydantic v2
- ✅ Números de telefone são formatados automaticamente
- ✅ URLs são validadas antes do envio
- ✅ Limites de caracteres são aplicados
Tratamento de Erros
- ✅ Mensagens de erro claras e acionáveis
- ✅ Orientação sobre como resolver problemas
- ✅ Tratamento específico para cada código de status HTTP
Paginação
- ✅ Suporte para grandes conjuntos de dados
- ✅ Metadados de paginação (
has_more,next_offset,total_count) - ✅ Limites padrão razoáveis (20 itens)
Truncamento
- ✅ Limite de 25.000 caracteres por resposta
- ✅ Truncamento gracioso com mensagens claras
- ✅ Orientação sobre como obter mais dados
Formatos de Resposta
- ✅ Markdown: Para leitura humana, formatado e organizado
- ✅ JSON: Para processamento programático, dados completos
Segurança
- 🔒 API Keys armazenadas em variáveis de ambiente (nunca no código)
- 🔒 Validação de entrada para prevenir injeção
- 🔒 URLs validadas (apenas HTTPS para mídia)
- 🔒 Rate limiting tratado adequadamente
- 🔒 Mensagens de erro não expõem detalhes internos
Desenvolvimento
Estrutura do Código
uazapi_mcp.py
├── Imports e Configuração
├── Constantes (API_BASE_URL, CHARACTER_LIMIT)
├── Enums (ResponseFormat, MessageType)
├── Funções Utilitárias Compartilhadas
│ ├── _validate_auth()
│ ├── _get_auth_headers()
│ ├── _make_api_request()
│ ├── _handle_api_error()
│ ├── _format_phone_number()
│ └── _truncate_response()
├── Modelos Pydantic para Validação
│ ├── SendTextMessageInput
│ ├── SendMediaMessageInput
│ ├── GetContactsInput
│ └── GetChatsInput
├── Implementações de Ferramentas
│ ├── uazapi_send_text_message
│ ├── uazapi_send_media_message
│ ├── uazapi_get_contacts
│ └── uazapi_get_chats
└── Entry Point (if __name__ == "__main__")
Adicionar Novos Endpoints
Para adicionar novos endpoints da API Uazapi:
- Criar Modelo Pydantic para validação de entrada
- Implementar função de ferramenta com decorador
@mcp.tool() - Usar funções utilitárias compartilhadas (
_make_api_request,_handle_api_error) - Adicionar anotações apropriadas (readOnlyHint, destructiveHint, etc.)
- Documentar com docstring completa e exemplos
Exemplo de template:
class NovoEndpointInput(BaseModel):
"""Descrição do modelo."""
model_config = ConfigDict(
str_strip_whitespace=True,
validate_assignment=True,
extra='forbid'
)
param1: str = Field(..., description="Descrição")
@mcp.tool(
name="uazapi_novo_endpoint",
annotations={
"title": "Título Legível",
"readOnlyHint": True, # Ajustar conforme necessário
"destructiveHint": False,
"idempotentHint": True,
"openWorldHint": True
}
)
async def uazapi_novo_endpoint(params: NovoEndpointInput) -> str:
"""
Descrição completa da ferramenta.
Args:
params: Documentação dos parâmetros
Returns:
Descrição do retorno com exemplos
"""
try:
response = await _make_api_request(
endpoint="caminho/do/endpoint",
method="GET",
params={"key": params.param1}
)
return format_response(response)
except Exception as e:
return _handle_api_error(e)
Próximos Passos
Para expandir este servidor, você pode adicionar:
-
[ ] Grupos e Comunidades
- Criar grupos
- Adicionar/remover participantes
- Enviar mensagens para grupos
- Gerenciar admins
-
[ ] Mensagens Avançadas
- Enviar localização
- Enviar contatos
- Enviar stickers
- Mensagens agendadas
- Respostas rápidas
-
[ ] Status e Presença
- Atualizar status
- Ver status de contatos
- Gerenciar presença (online/offline)
-
[ ] Webhooks e Eventos
- Configurar webhooks
- Receber mensagens
- Notificações de status
-
[ ] Mensagens e Histórico
- Buscar mensagens
- Recuperar histórico de conversas
- Marcar como lido/não lido
Documentação da API
Para mais detalhes sobre os endpoints disponíveis, consulte:
- Documentação oficial: https://docs.uazapi.com/
- Enviar Mensagem: https://docs.uazapi.com/tag/Enviar%20Mensagem
- Contatos: https://docs.uazapi.com/tag/Contatos
- Grupos: https://docs.uazapi.com/tag/Grupos%20e%20Comunidades
Suporte e Contribuições
Este é um servidor MCP base com as funcionalidades essenciais. Você pode:
- Estender adicionando novos endpoints
- Customizar ajustando limites e formatos
- Integrar com outros MCP servers
- Compartilhar suas melhorias
Licença
Este projeto é fornecido como exemplo de implementação de MCP server.
Desenvolvido com ❤️ usando MCP (Model Context Protocol)
Recommended Servers
playwright-mcp
A Model Context Protocol server that enables LLMs to interact with web pages through structured accessibility snapshots without requiring vision models or screenshots.
Audiense Insights MCP Server
Enables interaction with Audiense Insights accounts via the Model Context Protocol, facilitating the extraction and analysis of marketing insights and audience data including demographics, behavior, and influencer engagement.
Magic Component Platform (MCP)
An AI-powered tool that generates modern UI components from natural language descriptions, integrating with popular IDEs to streamline UI development workflow.
VeyraX MCP
Single MCP tool to connect all your favorite tools: Gmail, Calendar and 40 more.
Kagi MCP Server
An MCP server that integrates Kagi search capabilities with Claude AI, enabling Claude to perform real-time web searches when answering questions that require up-to-date information.
graphlit-mcp-server
The Model Context Protocol (MCP) Server enables integration between MCP clients and the Graphlit service. Ingest anything from Slack to Gmail to podcast feeds, in addition to web crawling, into a Graphlit project - and then retrieve relevant contents from the MCP client.
Qdrant Server
This repository is an example of how to create a MCP server for Qdrant, a vector search engine.
E2B
Using MCP to run code via e2b.
Exa Search
A Model Context Protocol (MCP) server lets AI assistants like Claude use the Exa AI Search API for web searches. This setup allows AI models to get real-time web information in a safe and controlled way.
Neon Database
MCP server for interacting with Neon Management API and databases