Comment j'ai construit une recherche intelligente sur ~3500 contacts en 2 heures
Recherche sémantique dans le CRM avec Qdrant Cloud et Claude Code. Plus de filtres — je pose des questions en langage naturel
J’avais accumulé ~3500 contacts issus de différents chats Telegram. Founders, créateurs, développeurs — tout dans un seul JSON. Trouver quelque chose de précis était un calvaire.
Avant, j’ouvrais le fichier, j’écrivais des requêtes jq, je filtrais par champs. Tu veux trouver des “founders à Berlin qui s’intéressent à l’AI” ? Bonne chance avec la logique booléenne.
Aujourd’hui, j’ai construit une solution qui permet de simplement demander : “Trouve des founders à Berlin qui travaillent sur l’AI”. Et d’obtenir une liste.
Ce que ça donne
Un serveur MCP local qui :
- Prend mon CRM (JSON avec les contacts)
- Transforme chaque contact en vecteur via des embeddings
- Stocke tout dans Qdrant Cloud
- Permet de chercher depuis Claude Desktop en langage naturel
Maintenant dans Claude Desktop j’écris simplement :
“Trouve des personnes similaires à ce contact”
“Quels contacts travaillent dans le marketing et habitent aux États-Unis ?”
“Créateurs avec une grande audience”
Et j’obtiens des résultats pertinents. Sans jq, sans filtres, sans souffrance.
Stack
- Qdrant Cloud — tier gratuit, 1Go de stockage
- Embedding API —
text-embedding-3-smallpour les embeddings - MCP (Model Context Protocol) — intégration avec Claude Desktop
- TypeScript — pour le serveur MCP
Architecture
┌─────────────────────────────────────────────────────┐
│ Mac │
│ ┌──────────────┐ ┌──────────────────────┐ │
│ │Claude Desktop│ ───▶ │ MCP-сервер (node) │ │
│ └──────────────┘ └──────────┬───────────┘ │
└───────────────────────────────────┼────────────────┘
│
┌───────────────┴───────────────┐
│ │
▼ ▼
┌───────────────────┐ ┌───────────────────┐
│ Qdrant Cloud │ │ Embedding API │
│ (vecteurs) │ │ (embeddings) │
└───────────────────┘ └───────────────────┘
Le serveur MCP tourne localement, mais les données sont dans le cloud. Ça signifie :
- Recherche rapide (Qdrant est optimisé pour les vecteurs)
- Utilisable depuis n’importe quel appareil
- Gratuit aux volumes actuels
Comment j’ai construit ça
1. Parsing des contacts
J’ai collecté des contacts depuis plusieurs chats Telegram via l’API MTProto. J’ai parsé environ 8 communautés de thématiques variées — des techniques aux créatives. Résultat : ~3500 contacts uniques.
2. Enrichissement des données
À partir des username + first_name bruts, j’ai extrait :
- Les rôles (founder, developer, creator)
- Les entreprises
- Les localisations
- Les cohortes par centres d’intérêt
Après enrichissement, ~1500 contacts avaient suffisamment de données pour une recherche de qualité.
3. Qdrant Cloud
J’ai créé un cluster sur cloud.qdrant.io — ça m’a pris 2 minutes. Le tier gratuit offre 1Go, largement suffisant pour des dizaines de milliers de contacts.
4. Indexation
J’ai chargé les contacts enrichis dans Qdrant — ~90 secondes pour toute la base. Coût des embeddings : moins d’un centime.
5. Serveur MCP
J’ai écrit un serveur MCP en TypeScript et je l’ai connecté à Claude Desktop. Le serveur reçoit une requête textuelle, génère un embedding et cherche les voisins les plus proches dans Qdrant.
La configuration, c’est le claude_desktop_config.json standard avec trois variables d’environnement (clés API et URL du cluster).
J’ai redémarré Claude Desktop — c’était prêt.
Pourquoi la recherche sémantique
La recherche classique cherche des correspondances exactes de mots. La sémantique — par le sens.
J’écris : “des gens qui construisent des produits”
Je trouve :
- “founder of startup X”
- “building my own project”
- “indie hacker”
- “запускаю свой сервис”
Même si le mot “produit” n’apparaît nulle part — ça trouve par le sens. Les embeddings encodent la signification, pas les lettres.
La suite
Pour l’instant les données sont statiques — après le parsing il faut réindexer. Je prévois :
- Réindexation automatique lors des mises à jour du CRM
- Filtres — combiner la sémantique avec des conditions exactes (par exemple par rôle et ville)
- Intégration avec l’outreach — chercher des profils similaires à ceux qui ont déjà répondu
Bilan
| Quoi | Combien |
|---|---|
| Temps de configuration | ~2 heures |
| Contacts dans la base | ~3 500 |
| Contacts avec données | ~1 500 |
| Coût de l’indexation | < 0,01 $ |
| Qdrant Cloud | gratuit |
Du vibe coding à l’état pur : au lieu d’écrire des filtres complexes, j’ai appris à l’AI à comprendre mes requêtes. Maintenant le CRM, c’est une conversation, pas du SQL.