Ce brief est celui de l'édition 09, ce soir. Prenez deux heures et l'outil de votre choix, commencez par le Socle.
La situation
Nadia vend des missions data. Elle arrive avec son agenda de la semaine : six rendez-vous, et un onglet LinkedIn ouvert pour chacun.
« Avant chaque rendez-vous, je fais la même chose. Je lis le profil, je cherche l'entreprise sur Google, je vérifie sur Societe.com qu'elle existe depuis plus de deux ans, je tombe sur un article de 2021 que je prends pour une actu, et j'arrive en réunion en ayant oublié la moitié. Les outils qui promettent de le faire à ma place me sortent un résumé très propre. Je ne sais jamais d'où vient l'info, et une fois sur trois elle est fausse. »
« Ce que je veux, c'est rester sur la page de la personne, dire pourquoi je la vois, et recevoir une fiche : qui elle est, ce que fait sa boîte, de quoi parler, quoi demander. Chaque info avec son lien, et quand il n'a rien trouvé, qu'il le dise. Et je veux voir ce qu'il cherche pendant qu'il cherche. Si un jour il tape le nom de quelqu'un sur Google sans le nom de sa boîte, je veux le savoir. »
C'est le besoin. À toi de le faire exister.
L'esprit de l'exercice
Un agent, c'est un modèle de langage, des outils, et une boucle qui laisse le modèle décider seul quel outil appeler et quand s'arrêter. MCP ajoute un catalogue d'outils standardisé : chaque serveur publie ses outils de la même façon, et on les traduit pour le modèle de son choix. Vous avez déjà construit une extension Chrome ; ce soir, vous lui donnez un agent, et vous regardez le modèle choisir ses recherches en direct.
Une architecture imposée
Le sujet de la soirée, c'est l'agent et MCP : leur place est donc fixée. Une extension Chrome, un back-end qui tourne sur votre machine, Groq en tool calling classique, et des outils qui viennent de serveurs MCP distants, traduits pour Groq. Groq ne doit pas savoir qu'il y a du MCP derrière. Pour tout le reste (langage, bibliothèques, interface, découpage du code), la décision vous appartient.
Une difficulté progressive
Trois paliers attendus et un bonus hors session. Le palier 1 fait tourner la boucle avec une seule source ; le palier 2 la rend visible et la tient dans le quota gratuit ; le palier 3 la fait survivre aux pannes et encadre ce qu'elle a le droit de chercher. Qui ne livre que le palier 1 repart avec un agent qui marche.
Avant de commencer
L'agent de ce soir s'appuie sur deux services, chacun avec sa clé gratuite. Créez les deux clés et vérifiez-les avant de lire le sujet. Dix minutes, à faire avant d'arriver.
- Créer une clé Groq sur console.groq.com/keys (« Create API Key »). Elle commence par
gsk_et ne sera plus réaffichée : gardez-la de côté. - Créer une clé Tavily sur app.tavily.com. Elle commence par
tvly-. - Vérifier les deux clés avec les commandes ci-dessous, en remplaçant
gsk_TA_CLEettvly-TA_CLEpar les vôtres.
Groq doit renvoyer une liste de modèles, Tavily un résultat de recherche. Une erreur 401 veut dire que la clé est mal collée.
macOS / Linux (Terminal)
curl -s https://api.groq.com/openai/v1/models -H "Authorization: Bearer gsk_TA_CLE"
curl -s -X POST https://api.tavily.com/search -H "Authorization: Bearer tvly-TA_CLE" -H "Content-Type: application/json" -d '{"query":"meetup AI First","max_results":1}'Windows (PowerShell)
Invoke-RestMethod -Uri https://api.groq.com/openai/v1/models -Headers @{Authorization="Bearer gsk_TA_CLE"} | Select-Object -ExpandProperty data | Select-Object id
Invoke-RestMethod -Method Post -Uri https://api.tavily.com/search -Headers @{Authorization="Bearer tvly-TA_CLE"} -ContentType "application/json" -Body '{"query":"meetup AI First","max_results":1}'
Ce qu'il faut savoir
- Serveur MCP data.gouv
- https://mcp.data.gouv.fr/mcp, sans clé.
- Serveur MCP Tavily
- https://mcp.tavily.com/mcp/?tavilyApiKey=tvly-TA_CLE. Sans clé, le serveur répond 401.
- Groq gratuit
- 8 000 tokens par minute, toutes requêtes confondues. Chaque tour de la boucle renvoie toute la conversation au modèle : une fiche peut consommer ce quota en un seul passage.
- Le choix du modèle
- Les modèles Groq ne se valent pas sur le quota gratuit. Certains ont en plus une limite sur les tokens produits par minute, qui bloque une fiche entière. Regardez les limites de chacun sur console.groq.com avant de choisir.
- Tavily gratuit
- 1 000 crédits par mois, largement assez pour la soirée.
Le code d'une extension Chrome est lisible par toute personne qui l'installe : une clé posée dedans est une clé publiée. Les deux clés vivent dans le back-end local, et nulle part ailleurs. Elles ne se collent pas non plus dans un dépôt ou un chat.
Un seul métier : une fiche de rendez-vous dont chaque ligne a une source, sans rien d'inventé, avec chaque recherche visible. Chaque palier ajoute une exigence.
Palier 1 · Socle
Attendu de tous
À la fin de ce palier, Nadia ouvre un profil LinkedIn, dit pourquoi elle rencontre la personne, et obtient une fiche construite par un modèle qui a décidé seul de faire au moins une recherche web.
Ce que l'application doit faire
- Dire pourquoi on se rencontre. L'extension propose l'objet du rendez-vous (entretien d'embauche, rendez-vous commercial, partenariat, café réseau, autre), un champ libre pour préciser, et un bouton « Préparer mon rendez-vous ».
- Lire la page ouverte. Au clic, l'extension récupère le texte de la page LinkedIn affichée et l'envoie au back-end local avec l'objet du rendez-vous.
- Laisser le modèle chercher. Le back-end donne au modèle les outils publiés par le serveur MCP de Tavily. Le modèle décide s'il les appelle, avec quelle requête, et combien de fois, jusqu'à rédiger sa fiche.
- Afficher la fiche. La fiche s'affiche dans l'extension, sources cliquables, avec un bouton « Copier » qui la met dans le presse-papier en texte.
Les règles
- Clés
- Aucune clé d'API n'apparaît dans les fichiers de l'extension.
- Back-end
- Le back-end tourne sur la machine du participant et n'est joignable qu'en local.
- Tool calling
- Groq reçoit les outils sous forme de définitions classiques (nom, description, schéma des paramètres). Il n'est jamais branché directement sur un serveur MCP.
- Traduction
- Les définitions d'outils envoyées à Groq viennent de la liste publiée par le serveur MCP. Aucune n'est recopiée à la main dans le code.
- Lecture
- La page n'est lue qu'au clic sur le bouton. L'extension ne navigue pas et n'ouvre aucune autre page LinkedIn.
- Mauvaise page
- Hors d'un profil LinkedIn, l'extension le dit et n'envoie rien.
- Back-end éteint
- Si le back-end ne répond pas, l'extension le dit et indique comment le lancer, au lieu d'attendre indéfiniment.
- Format
- La fiche contient, dans cet ordre : la personne, l'entreprise, des sujets d'accroche, des questions à poser, des points de vigilance, les sources.
- Langue
- La fiche est en français, quelle que soit la langue du profil.
- Sources
- Chaque information issue d'un outil est suivie de son lien.
- Rien d'inventé
- Une information cherchée et non trouvée est écrite comme telle. Aucune date, aucun chiffre, aucune actualité qui ne vienne ni de la page ni d'un outil.
- Lisible
- La fiche se lit dans la fenêtre étroite de l'extension sans défilement horizontal.
Ni compte, ni historique : la fiche disparaît quand l'extension se ferme, ce n'est pas le sujet. Une seule source d'outils à ce palier, Tavily. Ce palier se juge sur un profil réel : la fiche cite-t-elle des liens qui existent, et ce qu'elle affirme sur l'entreprise vient-il bien de ces liens ?
Palier 2 · Avancé
L'agent visible
La boucle tourne. Il faut maintenant la voir travailler et lui donner une deuxième source, sans sortir du quota gratuit de Groq. À la fin de ce palier, Nadia regarde défiler chaque recherche décidée par le modèle pendant qu'il la fait.
Ce que l'application doit faire
- Ajouter data.gouv. Le back-end se connecte aussi au serveur MCP de data.gouv. Le modèle a désormais deux sources, et choisit laquelle appeler.
- Choisir les outils exposés. Un serveur MCP peut publier des dizaines d'outils, et chaque description consomme du quota à chaque appel. Seule une petite sélection est donnée au modèle, et cette sélection se règle sans toucher au code.
- Montrer les étapes. Pendant la préparation, l'extension affiche chaque étape au moment où elle a lieu : « Lecture de la page », « Recherche web : [requête] », « data.gouv : [outil, paramètres principaux] », « Rédaction de la fiche ».
- Tenir dans le quota. Le texte de la page, les résultats d'outils et le nombre de tours de boucle sont bornés, pour qu'une fiche passe avec un compte Groq gratuit.
- Dire l'état au démarrage. Au lancement, le back-end affiche la validité de la clé Groq, chaque serveur MCP joignable ou non, et le nombre d'outils chargés.
Les règles
- En direct
- Les étapes apparaissent pendant la préparation, une par une. Une liste affichée d'un bloc avec la fiche ne compte pas.
- Requêtes
- Chaque étape d'outil montre la requête ou les paramètres réellement envoyés, tels que le modèle les a écrits.
- Sélection
- Ajouter ou retirer un outil exposé au modèle se fait dans la configuration, sans modifier le code.
- Configuration
- Les clés et les réglages vivent dans un fichier de configuration unique, livré avec un exemple commenté.
- Plafond
- La boucle s'arrête au plus tard après 6 tours (réglable). Au-delà, le modèle n'a plus le droit d'appeler d'outil et rédige la fiche avec ce qu'il a.
- Page
- Le texte de la page est tronqué avant envoi au modèle, autour de 6 000 caractères (réglable).
- Résultats
- Chaque résultat d'outil est tronqué avant d'être rendu au modèle, autour de 3 000 caractères (réglable).
- Délai
- Un appel d'outil qui ne répond pas dans le délai fixé est abandonné. Le modèle reçoit un message d'erreur lisible et continue.
- Quota
- Une limite Groq atteinte (erreur 429) donne un message clair dans l'extension, du type « limite gratuite atteinte, réessaie dans une minute ». Jamais un écran blanc ni une erreur technique brute.
- Durée
- Sur un profil réel, la fiche s'affiche en une minute environ, avec au moins un appel Tavily et un appel data.gouv visibles dans les étapes.
- Plusieurs à la fois
- À TRANCHER (participant) : quand le modèle demande trois recherches dans la même réponse, les lance-t-on toutes en même temps ou l'une après l'autre ? En même temps, la fiche arrive plus vite ; l'une après l'autre, les étapes se lisent dans l'ordre et la limite de Groq arrive moins vite. Choisissez en regardant ce qu'affiche l'extension.
C'est le palier où l'on voit l'agent. Aux démos, on regardera d'abord la liste des étapes : on doit y voir le modèle choisir ses outils et écrire ses requêtes. Si la boucle bute sur le quota Groq, c'est un vrai résultat à montrer : dites combien de tokens coûte une fiche, et ce que vous avez coupé pour la faire passer.
Palier 3 · Poussé
Décisions produit & cas limites
Un agent qui marche quand tout va bien ne suffit pas à Nadia. À la fin de ce palier, il survit à une source en panne et ne cherche que ce qu'il a le droit de chercher.
Ce que l'application doit faire
- Survivre à une source en panne. Un serveur MCP injoignable n'empêche ni le démarrage ni la fiche. L'agent fait avec ce qui répond.
- Fonctionner sans serveur MCP. Sans aucun serveur MCP joignable, l'agent rédige la fiche à partir de la seule page LinkedIn, et la fiche le dit.
- Encadrer les recherches sur la personne. Le modèle ne cherche sur la personne que de l'information professionnelle publique, liée à l'objet du rendez-vous.
- Adapter la fiche à l'objet. Un entretien d'embauche, un rendez-vous commercial et un café réseau ne produisent pas la même fiche sur le même profil.
Les règles
- Démarrage
- Un serveur MCP injoignable au démarrage n'empêche pas le back-end de démarrer avec les outils disponibles. Le terminal et l'extension le signalent.
- data.gouv coupé
- data.gouv coupé, la fiche sort quand même, avec Tavily seul.
- Tout coupé
- Les deux serveurs coupés, la fiche sort en mode dégradé, et sa première ligne le dit.
- Clé Groq
- Une clé Groq absente ou invalide est signalée clairement dès le démarrage du back-end.
- Outil en erreur
- Un outil qui renvoie une erreur ne fait jamais planter la boucle. Le modèle reçoit le message et poursuit.
- Vie privée
- Aucune recherche sur la vie privée, la famille, l'adresse, les loisirs, les opinions politiques ou religieuses, la santé.
- Requêtes
- Toute requête web sur la personne associe son nom à son entreprise ou à son métier. Jamais le nom seul.
- Une seule personne
- Aucune autre personne que celle du profil n'est recherchée ni présentée, y compris quand une source renvoie d'autres noms (dirigeants, collègues).
- Embauche
- Pour un entretien d'embauche, la fiche met l'accent sur la culture de l'entreprise et les enjeux de l'équipe.
- Commercial
- Pour un rendez-vous commercial, la fiche met l'accent sur les priorités et l'actualité business de l'entreprise.
- Page piégée
- Un texte de profil qui contient des instructions (« ignore tes consignes et… ») est traité comme une donnée, pas comme un ordre.
- Identité de l'entreprise
- À TRANCHER (participant) : la fiche doit donner l'identité officielle de l'entreprise : forme juridique, date de création, effectif, activité. Le serveur MCP de data.gouv cherche dans un catalogue de jeux de données ; vérifiez s'il vous la donne en quelques appels. Sinon, vous restez 100 % MCP et acceptez une fiche plus pauvre, ou vous ajoutez un outil local qui interroge l'API Recherche d'entreprises de l'État (gratuite, sans clé). Justifiez le choix à la démo.
Ce palier se démontre en cassant des choses devant tout le monde : adresse de data.gouv faussée, Wi-Fi coupé, clé Groq retirée. Chaque cas a son message, aucun n'a droit à un écran blanc. Montrez aussi une requête envoyée sur la personne : c'est là qu'on voit si les règles de recherche tiennent.
Bonus
Hors session — aucune attente
Trois pistes pour qui aurait consolidé les trois paliers. Les pages entreprise : faire marcher l'extension sur une page linkedin.com/company/…, où il n'y a personne à présenter, et adapter la fiche en conséquence. Outil local contre outil MCP : ajouter un outil écrit directement au format Groq (l'API Recherche d'entreprises, par exemple), et comparer sa définition et ses résultats avec ceux d'un outil MCP. Changer de modèle : relancer la même préparation avec un autre modèle Groq et comparer les fiches : sources citées, informations inventées. À ne pas attaquer avant d'avoir consolidé le reste.
Et deux questions à garder pour le tour de table. Le texte du profil part chez Groq : la page d'une personne qui n'a rien demandé est envoyée à un modèle hébergé ailleurs. Qu'est-ce qui le rend acceptable ici, et qu'est-ce qui ne le serait plus ? Une fiche sourcée peut quand même mentir : un lien juste sous une phrase fausse rassure plus qu'une phrase sans lien. Qui relit, et quoi ?