MCP e agentes de IA
Conecte Claude, ChatGPT ou seu próprio agente ao servidor MCP da Fiuit para buscar horários, agendar e operar o negócio com sua chave de API.
Atualizado:
A Fiuit inclui um servidor MCP (Model Context Protocol) para que os agentes de IA usem o mesmo motor do bot de WhatsApp: mesmas pré-reservas, mesma validação e mesmo registro de auditoria. O servidor é um cliente fino da API: cada ferramenta chama a API com a sua mesma chave, então o MCP nunca dá mais permissões do que a chave.
O servidor está no repositório (packages/mcp) e hoje quem o executa é você. O servidor hospedado em mcp.wagend.app ainda não foi publicado: é Em breve. A autenticação com OAuth também.
Executar o servidor
Você precisa de Python 3.12+ e uv.
cd packages/mcp
uv sync
WAGEND_API_URL=https://api.wagend.app MCP_PORT=8700 uv run python -m wagend_mcp
# escucha en http://127.0.0.1:8700/ (Streamable HTTP)
Variáveis:
| Variável | Para quê |
|---|---|
WAGEND_API_URL | URL da API (padrão https://api.wagend.app) |
MCP_TOOLSETS | Conjuntos a expor: booking, admin ou ambos (padrão booking,admin) |
MCP_HOST, MCP_PORT | Onde escuta (padrão 127.0.0.1:8700) |
MCP_ALLOWED_HOSTS | Hosts permitidos (proteção contra DNS rebinding) |
Conectar um cliente
A autenticação é uma chave de API no header Authorization. Sem uma chave com formato válido, o servidor responde 401 antes de entrar no protocolo.
Com o Claude Code:
claude mcp add --transport http wagend http://127.0.0.1:8700/ \
--header "Authorization: Bearer wg_live_xxx"
Ou com a configuração JSON de qualquer cliente que suporte HTTP:
{
"mcpServers": {
"wagend": {
"type": "http",
"url": "http://127.0.0.1:8700/",
"headers": { "Authorization": "Bearer wg_live_xxx" }
}
}
}
Para testar sem um agente: npx @modelcontextprotocol/inspector (transporte Streamable HTTP, a mesma URL e o header).
Ferramentas
Todas as ferramentas do conjunto ativo são listadas, mas cada uma só funciona se a chave tiver o scope de que precisa; caso contrário, devolve o erro 403 da API. As escritas ficam auditadas com ator mcp.
Agendamentos (booking): para assistentes que agendam em nome de um cliente.
| Ferramenta | Scope | Faz |
|---|---|---|
list_services | config:read | Serviços com duração e preço |
find_slots | slots:read | Horários disponíveis de um serviço entre duas datas |
hold_slot | bookings:write | Pré-reserva de 10 minutos |
confirm_booking | bookings:write | Confirma uma pré-reserva com os dados do cliente |
cancel_booking, reschedule_booking | bookings:write | Gerencia um agendamento existente |
get_booking | bookings:read | Detalhe de um agendamento |
Administração (admin): para o dono operar o negócio pelo seu assistente de IA.
| Ferramenta | Scope | Faz |
|---|---|---|
list_resources | config:read | Equipe, salas, máquinas e grupos |
list_today | bookings:read | Agendamentos do dia |
block_time | config:write e bookings:read | Fecha dias inteiros de um recurso (máx. 31). Não cancela agendamentos existentes: devolve-os para uma pessoa decidir |
create_service, update_service | config:write | Cria ou altera um serviço, com seu formulário de agendamento |
update_schedule | config:write | Altera o horário semanal ou o fuso horário |
get_stats | bookings:read | Agendamentos, ocupação e faltas por recurso |
get_stage_config, list_stage_config_versions, get_stage_config_version | config:read | Etapas, ações e formulários, com seu histórico de versões |
update_stage_config, revert_stage_config | settings:write | Substitui ou reverte as etapas (cria uma versão nova; não apaga o histórico) |
As escritas de configuração exigem confirm=true. Sem ele, a ferramenta não chama a API: devolve confirmation_required com o que enviaria, para o agente mostrar a uma pessoa e repetir com a confirmação.
Exemplos de pedidos
- "Agende um corte com o João amanhã de manhã, no nome do Carlos."
- "Bloqueie a máquina de laser na próxima segunda por manutenção e me diga quais agendamentos ficam afetados."
- "Quantas faltas tivemos este mês?"
Docs para LLMs
/llms.txtlista todas as páginas da documentação./llms-full.txtcontém a documentação completa em Markdown.