
Como Criei um Assistente de IA que Cria suas Próprias Ferramentas
Introdução
Devido a mudanças nos termos de serviço da Anthropic, o uso de assinaturas do Claude via ferramentas de terceiros foi bloqueado. Embora tenha havido algum burburinho sobre isso, para ser honesto, não me afetou muito.
Eu tenho o Claude Code CLI ao meu alcance. Só preciso construir uma ponte: enviar uma mensagem para o Discord, passá-la para o CLI e retornar a resposta para o Discord.
Então, eu construí isso.
Construí Apenas a Estrutura
Eu criei LogBot. É um bot simples que encaminha mensagens do Discord para o Claude Code CLI e retorna as respostas para o Discord.
Discord ──→ LogBot ──→ Claude Code CLI
↑ │
└── Post Response ──┘
Implementei os seguintes recursos como uma estrutura mínima:
- Gerenciamento de Sessões — Mantém sessões do Claude Code com base em UUID. Estas estão completamente isoladas das sessões do VSCode.
- Fila de Mensagens — Se mensagens chegarem enquanto o Claude está processando, elas são enfileiradas e processadas em ordem, para que nenhuma seja perdida.
- Fluxo de Aprovação — Se o Claude tentar editar um arquivo, uma notificação é enviada para o Discord, onde posso aprovar ou rejeitar via reações (✅ / ❌).
- Servidor MCP — Se você colocar arquivos no diretório
tools/, eles podem ser usados como ferramentas pelo Claude.
O que é importante aqui é que eu comecei com zero ferramentas MCP. Nenhum clima, nenhum calendário, nenhuma informação sobre trens—nada. Apenas a estrutura.
No entanto, essa estrutura tem uma característica poderosa:
Claude pode escrever arquivos. Em outras palavras, ele pode adicionar arquivos JavaScript ao diretório tools/. O servidor MCP escaneia e registra automaticamente as ferramentas sob tools/.
Claude pode criar seus próprios membros.
Comecei com "Eu quero um relógio"
A primeira coisa que perguntei ao Claude no Discord foi trivial.
"Que horas são?"
Embora o Claude Code CLI possa recuperar a hora do sistema, é mais inteligente tê-la como uma ferramenta MCP. Pedi ao Claude para "fazer uma ferramenta MCP que retorna a hora."
Em poucos segundos, tools/current-time.js foi criado.
O próximo foi "Eu quero saber o clima." Claude criou tools/weather.js usando a API de clima gratuita Open-Meteo. Nenhuma chave de API necessária.
"Eu quero ver minha agenda do Google Calendar." Claude criou tools/gcal-auth.js e tools/gcal-list.js, completos com auxiliares de OAuth.
"Eu quero ler meu Gmail também." Seguindo o mesmo padrão, um conjunto completo de ferramentas do Gmail foi criado—autenticação, listagem, leitura de corpos, envio, filtragem e exclusão em massa.
Tudo o que fiz foi dizer "Eu quero isso" do Discord. Não escrevi uma única linha de código eu mesmo.
Não é código que o CRON atinge
Uma vez que as ferramentas estavam no lugar, a próxima coisa que eu queria era execução periódica.
"Me diga o clima, informações sobre a operação dos trens e a agenda de hoje todas as manhãs às 7:00 AM."
Normalmente, alguém escreveria um script que acessa a API do clima, chama a API do calendário, coleta informações sobre trens, formata, envia e registra no CRON.
Mas como estou usando o Claude, é mais interessante passar um prompt em vez de código.
{
"cron": "0 7 * * *",
"prompt": "Me dê o relatório da manhã. Diga-me o clima (Saitama City Kita-ku, hoje), informações sobre a operação dos trens e a agenda do calendário de hoje. Por favor, inclua uma saudação de 'Bom dia' também."
}
Quando chega às 7:00 AM, o agendador acorda o Claude. Claude chama a ferramenta de clima, a ferramenta de calendário e a ferramenta de informações sobre trens, resume os resultados e os publica no Discord.
Claude decide quais ferramentas combinar e como. A lógica não está escrita em código; está escrita no prompt.
Em outras palavras, se eu quiser mudar o formato do relatório, eu apenas reescrevo o prompt. Apenas enviando uma única linha para o Discord dizendo: "Adicione o clima de amanhã também," muda a manhã seguinte.
Notificação de Partida—O Verdadeiro Tópico
O relatório da manhã foi apenas o começo.
"Com base na agenda de hoje, me avise quando for hora de sair."
Com esse único pedido, o mecanismo de notificação de partida nasceu.
O que eu queria
Se eu tiver um compromisso, digamos, "Reunião em Shinjuku às 14:00," quero ser notificado 30 minutos antes da partida, incluindo clima e informações sobre a operação dos trens, calculando o tempo de viagem para trás.
Diferença em relação a lembretes regulares
As notificações do Google Calendar acionam "30 minutos antes do evento." Mas não consideram o tempo de viagem. Se leva uma hora para ir de casa a Shinjuku, uma notificação às 13:30 é tarde demais. Quero ser avisado "hora de ir" às 12:30.
Além disso, o cálculo muda se eu já estiver fora. Se eu tiver outro compromisso em Omiya pela manhã e depois seguir para Shinjuku, o tempo de viagem é menor.
O que Claude está fazendo
A cada hora (das 6 AM às 10 PM), um prompt como este é enviado ao Claude via CRON:
Verifique o calendário e, se uma notificação de partida for necessária para qualquer compromisso com um local, registre-a.
Claude recebe essa instrução e faz seu próprio julgamento:
- Olhe para o calendário — Obtenha compromissos futuros. Encontre compromissos com um local definido.
- Estime a localização atual — Se houver um evento de calendário em andamento, assuma que estou lá. Caso contrário, assuma que estou em casa.
- Calcule o tempo de viagem — Use a API do Google Maps para calcular o tempo de viagem da localização atual até o destino. Se estiver dentro de 2km, assuma que é a pé; caso contrário, de trem. Como a API de Trânsito não está disponível no Japão, eu aproximo usando o tempo de viagem de carro + 15 minutos. É rudimentar, mas surpreendentemente prático.
- Calcule o horário de partida para trás — Horário de início do compromisso - tempo de viagem = horário de partida.
- Registre o trabalho de notificação — Empurre um trabalho único para o agendador para 30 minutos antes da partida.
Então, 30 minutos antes da partida, o trabalho é acionado, Claude acorda, recupera as informações sobre o clima e os trens, e constrói a notificação.
🚨 Hora de sair em breve!
📅 Reunião (Começa às 14:00)
📍 Destino: Shinjuku
🚃 Trem (Estimado): ~55 min → Sair às 12:35
☁️ Hoje (Seg) Parcialmente Nublado
🌡️ 22.3℃ / 14.1℃ ☔ 10%
🟢 Atualmente, não há problemas relatados com as linhas de trem!
Onde está a lógica?
Isso é o que eu quero transmitir mais.
Essa lógica de decisão inteira está consolidada em uma ferramenta MCP chamada departure-check.js. Mas Claude fez essa ferramenta também. Quando eu disse "Eu quero uma notificação de partida," as ferramentas necessárias (tempo de viagem, estimativa de localização) ainda não existiam, então ele criou essas primeiro, e finalmente criou departure-check.js para combiná-las.
E o que o CRON está atingindo ainda é apenas um prompt: "Verifique o calendário e, se uma notificação de partida for necessária, registre-a." Com essa única frase, Claude utiliza suas ferramentas para fazer um julgamento.
Parte individual
A criação de assistentes de IA que podem desenvolver suas próprias ferramentas pode revolucionar a forma como as empresas brasileiras gerenciam tarefas diárias. Isso permite automação e personalização, aumentando a eficiência operacional. A implementação de soluções como essa pode ser um diferencial competitivo no mercado.

