Como construí uma busca inteligente em ~3500 contatos em 2 horas
Montei uma busca semântica no CRM com Qdrant Cloud e Claude Code. Agora em vez de filtros — simplesmente pergunto em linguagem natural.
Acumulei ~3500 contatos de diferentes chats do Telegram. Founders, criadores, desenvolvedores — tudo em um JSON. Achar algo específico era um sofrimento.
Antes eu abria o arquivo, escrevia queries com jq, filtrava por campos. Quer encontrar “founders em Berlim que se interessam por AI”? Boa sorte com a lógica booleana.
Hoje montei uma solução que permite simplesmente perguntar: “Encontre founders em Berlim que trabalham com AI”. E receber uma lista.
O que ficou pronto
Um servidor MCP local que:
- Pega meu CRM (JSON com contatos)
- Transforma cada contato em um vetor via embeddings
- Armazena tudo no Qdrant Cloud
- Permite buscar pelo Claude Desktop em linguagem natural
Agora no Claude Desktop eu simplesmente escrevo:
“Encontre pessoas parecidas com este contato”
“Quais contatos trabalham com marketing e moram nos EUA?”
“Criadores com grande audiência”
E recebo resultados relevantes. Sem jq, sem filtros, sem dor.
Stack
- Qdrant Cloud — tier gratuito, 1GB de armazenamento
- Embedding API —
text-embedding-3-smallpara embeddings - MCP (Model Context Protocol) — integração com Claude Desktop
- TypeScript — para o servidor MCP
Arquitetura
┌─────────────────────────────────────────────────────┐
│ Mac │
│ ┌──────────────┐ ┌──────────────────────┐ │
│ │Claude Desktop│ ───▶ │ MCP-сервер (node) │ │
│ └──────────────┘ └──────────┬───────────┘ │
└───────────────────────────────────┼────────────────┘
│
┌───────────────┴───────────────┐
│ │
▼ ▼
┌───────────────────┐ ┌───────────────────┐
│ Qdrant Cloud │ │ Embedding API │
│ (vetores) │ │ (embeddings) │
└───────────────────┘ └───────────────────┘
O servidor MCP roda localmente, mas os dados ficam na nuvem. Isso significa:
- Busca rápida (Qdrant é otimizado para vetores)
- Pode ser usado de qualquer dispositivo
- Gratuito nos volumes atuais
Como montei
1. Parsing dos contatos
Coletei contatos de vários chats do Telegram via MTProto API. Fiz o parsing de cerca de 8 comunidades de diferentes temáticas — de técnicas a criativas. Obtive ~3500 contatos únicos.
2. Enriquecimento dos dados
A partir dos username + first_name brutos, extraí:
- Papéis (founder, developer, creator)
- Empresas
- Localizações
- Coortes por interesses
Após o enriquecimento, ~1500 contatos tinham dados suficientes para uma busca de qualidade.
3. Qdrant Cloud
Criei um cluster em cloud.qdrant.io — levou 2 minutos. O tier gratuito oferece 1GB, o suficiente para dezenas de milhares de contatos.
4. Indexação
Careguei os contatos enriquecidos no Qdrant — ~90 segundos para toda a base. Custo dos embeddings: menos de um centavo.
5. Servidor MCP
Escrevi um servidor MCP em TypeScript e conectei ao Claude Desktop. O servidor recebe uma consulta de texto, gera um embedding e busca os vizinhos mais próximos no Qdrant.
A configuração é o padrão do claude_desktop_config.json com três variáveis de ambiente (chaves de API e URL do cluster).
Reiniciei o Claude Desktop — pronto.
Por que busca semântica
A busca clássica procura por correspondências exatas de palavras. A semântica — por significado.
Escrevo: “pessoas que constroem produtos”
Encontro:
- “founder of startup X”
- “building my own project”
- “indie hacker”
- “запускаю свой сервис”
Mesmo que a palavra “produto” não apareça em lugar nenhum — vai encontrar pelo sentido. Os embeddings codificam o significado, não as letras.
O que vem a seguir
Atualmente os dados são estáticos — após o parsing é preciso reindexar. Planejo:
- Reindexação automática quando o CRM for atualizado
- Filtros — combinar semântica com condições exatas (por exemplo, por papel e cidade)
- Integração com outreach — buscar similares aos que já responderam
Resumo
| O que | Quanto |
|---|---|
| Tempo de configuração | ~2 horas |
| Contatos na base | ~3.500 |
| Contatos com dados | ~1.500 |
| Custo da indexação | < $0,01 |
| Qdrant Cloud | gratuito |
Vibe coding no estado mais puro: em vez de escrever filtros complexos, ensinei a AI a entender minhas consultas. Agora o CRM é uma conversa, não SQL.