La stack MCP
Un guide de terrain issu d'un bake-off où chaque serveur a été exécuté sur les mêmes jobs réels (un post social 1080x1350 dans un style riso ; des questions spatiales réelles vérifiées par une requête indépendante). Uniquement les niveaux gratuits.
Règle : gratuit uniquement. Ne jamais passer à un abonnement payant, démarrer un essai facturé ou entrer une carte bancaire sur l'un de ces services sans que le propriétaire ne l'ait demandé. Un paywall est un constat, pas un achat.
Règle : rien ne publie. Orshot a un paramètre publish qui poste sur les réseaux sociaux ; Canva et
Figma peuvent partager. Ne jamais les utiliser sans demande. La sortie est un fichier local qu'un humain examine.
Design / art / marque — choisir selon le travail
| Travail | Utiliser | Pourquoi / coût |
|---|---|---|
| Pièce marketing finie à partir d'un brief, le plus beau rendu | canva create-design -> resize-design -> export-design | Meilleur rendu de l'ensemble. ~6 designs IA/mois gratuits (un design = ~15% du quota ; réinitialisation mensuelle). Éditer avec edit-design plutôt que de regénérer. |
| Post / carte / affiche riso, illimité, chiffres exacts | inkscape MCP inkscape_vector construct_svg (params.header + params.body) -> inkscape_render export_preview | Rendu réaliste des trames, grain feTurbulence, surimpression multiply, défaut de registration. ~5s, sans tête, illimité. Par défaut pour tout ce qui est reproductible ; conserver votre corps SVG comme fichier modèle. |
| Mise en page vectorielle précise dans un fichier de design | penpot execute_code -> export_shape | Gratuit, illimité. Un onglet Penpot avec le fichier doit être ouvert (sans tête OK) sinon chaque appel échoue. |
| Idem, mais dans Figma pour que quelqu'un le reprenne | figma create_new_file + use_figma | Démarrage gratuit = ~20 appels comptés/mois, 3 fichiers. Le budgéter. Pas de createImageAsync/setPluginData. |
| Modèle réutilisable avec variables (carte OG, série de posts IG) | orshot | ~100 rendus/mois gratuits. La couleur de forme va dans style.fill (backgroundColor peint en noir). Les URLs de sortie sont publiques mais non devinables. |
| Brouillon d'illustration IA, gratuit | huggingface dynamic_space -> mcp-tools/Qwen-Image, aspect_ratio:"3:4" | Le plus proche du riso parmi les modèles gratuits. ~6 images/jour (quota ZeroGPU). 1.6MP ; peint de fausses signatures dans les coins — rogner. Les versions finales vont vers un moteur payant (make-art). |
| Découpage PNG transparent | huggingface space_name: Upsampler/birefnet-background-removal, {"image":"<URL publique>"} | ~5s. Les Spaces acceptent uniquement les URLs publiques, jamais les chemins locaux. |
| Raster couleur -> SVG (logos, marques) | shapesoda vectorize {image_base64, image_type:"artwork", colors:8, format:["svg"]} | ~10/jour gratuits. Le lien de téléchargement expire dans 24h — le récupérer immédiatement. Supprimer les chemins #ff00ff parasites aux bords de la découpe. Rendre le SVG à 4x = agrandissement gratuit pour les illustrations plates. |
| SVG à une seule encre (timbre, pochoir, plaque de contour) | svg-tracer trace_bitmap_to_svg (chemins absolus) | Potrace local, illimité, 0,1s. |
| Graphique à partir de chiffres réels | antv-chart | Option de texture dessinée à la main. Envoie vos données à un service de rendu tiers et retourne une URL publique — uniquement des données publiques. Le titre vide de l'axe des x affiche « category ». |
| Typographie 3D / maquette produit | Blender MCP (nécessite l'application en cours d'exécution) | Lancer Blender avec l'add-on, puis ajouter le serveur ad hoc (uvx mcp-for-blender@<pinned>) avec DISABLE_TELEMETRY=true. La télémétrie est ACTIVÉE par défaut — toujours la désactiver. |
| Finition raster (trame journal, retouche photo) | GIMP MCP (nécessite gimp-console en cours d'exécution) | Pour GIMP 3.2 sans tête : gimp-console -i --batch-interpreter=python-fu-eval -b "p=Gimp.get_pdb().lookup_procedure('plug-in-mcp-server'); c=p.create_config(); c.set_property('run-mode', Gimp.RunMode.NONINTERACTIVE); p.run(c)" &. Le mode journal utilise des lignes par défaut — définir circle. Couleurs hexadécimales uniquement. Tuer gimp-console après. |
| HTML -> PNG, rien ne quitte la machine | Satori MCP, patché | La version stock télécharge chaque image vers un stockage blob public ; la patcher pour sauvegarder localement. Installer avec un lockfile gelé. |
Chaque chiffre sur une pièce provient de la source en direct (curl), jamais tapé. Vérifier le contraste des couleurs d'accent sur fond clair (un rouge moyen sur crème peut être ~3.8:1, ce qui échoue pour le petit texte ; l'assombrir sous ~24px).
Abandonnés (ne pas re-tester) : Pollinations (filigrane, basse résolution), Stability (essai unique), fal/Replicate/Together (pas de niveau gratuit sans carte), Krita MCP (pas de texte), tldraw et Excalidraw MCP apps (dessin uniquement dans une interface de chat), Bannerbear/Placid (essais), Postiz (pas de cloud gratuit, nécessite Docker), Remotion MCP (docs uniquement), Buffer (CAPTCHA d'inscription).
Données / spatial
| Travail | Utiliser | Pièges |
|---|---|---|
| SQL + spatial sur parquet/csv/geojson/.duckdb | duckdb MCP (en mémoire, spatial chargé) | ST_Transform(ST_Point(lon,lat),'EPSG:4326','EPSG:26915') retourne POINT(inf inf) silencieusement, donc les filtres de distance comptent 0. Passer always_xy := true. Les colonnes d'évaluation sont souvent VARCHAR (max trie comme du texte) ; les prix de vente peuvent avoir un placeholder 999.999.999. Si le serveur s'exécute en lecture-écriture, il peut faire COPY TO n'importe où : attacher vos fichiers réels en READ_ONLY. |
| Couche FeatureServer ArcGIS en direct | duckdb ST_Read('<FeatureServer>/0/query?where=...&outFields=...&orderByFields=OBJECTID&f=geojson&resultOffset=N') | Tronque silencieusement au maxRecordCount du serveur (souvent 2 000) sans avertissement. Vérifier d'abord avec returnCountOnly=true, paginer avec resultOffset + orderByFields, et nommer les colonnes dans le UNION ALL (une dernière page vide n'en a pas). |
| OSM / Overpass (restaurants dans un quartier...) | osm openstreetmap_search_places -> relation id -> openstreetmap_query_bbox{within:"R..."} | Fuites de zone par nom : un nom de quartier peut récupérer des lignes d'un lieu du même nom dans un autre État. Toujours chercher à l'intérieur de l'ID de relation. Les miroirs Overpass renvoient souvent 500 ; réessayer. |
| Census ACS par adresse/tract | census census_resolve_geography{name:"<adresse>"} -> census_query_data{dataset:"acs/acs5", ...} | Retourne les MOE (variables ...M) — les signaler. Nécessite une clé CENSUS_API_KEY gratuite. |
| Rendre une carte PNG pour voir ce que vous avez construit | maplibre render_style | Chrome sans tête, fond de carte OpenFreeMap, aucune clé. |
Abandonnés : gis-mcp (88 outils, DuckDB les couvre), le MCP officiel Census (nécessite Docker+Postgres), les MCP ArcGIS de type crawler sans pagination, PostGIS (DuckDB le couvre).
Recherche web / extraction
| Travail | Utiliser | Pièges |
|---|---|---|
| « Qui s'occupe des opérations chez X », recherche de personnes/entreprises | exa web_search_exa | Sans clé. Trouve souvent la page d'équipe de l'entreprise là où une recherche web générique ne trouve rien. |
| Lecture rapide d'une page connue | exa web_fetch_exa {urls:[...]} | Moins d'une seconde depuis son index — en cache et sans JS ; un contenu obsolète est possible. |
| Recherche par phrase exacte, scraping rendu | firecrawl | ~1 000 crédits/mois gratuits (scrape 1, search 2, JSON 5). L'extraction JSON invente des champs — ne faire confiance qu'à ce qui apparaît dans le markdown retourné. |
| Crawl rendu, illimité, e-mails cachés par Cloudflare | Crawl4AI CLI crwl <url> -o markdown | Décode data-cfemail que curl ne voit pas. Par lot : AsyncWebCrawler(...).arun_many. |
| Page JS sans rien installé | curl https://r.jina.ai/<url> | ~20 req/min sans clé, 2-18s. |
- Certains portails municipaux sont derrière Cloudflare que rien ne traverse sans tête ; leur couche REST ArcGIS a généralement les mêmes données.
- E-mail : utiliser l'adresse que l'entreprise publie sur son propre site, puis vérifier MX pour ce domaine exact. Les annuaires modifient les domaines (une lettre manquante ou ajoutée est courante). La vérification au niveau de la boîte aux lettres n'est généralement pas possible depuis une connexion domestique ; le port 25 est bloqué.
- Abandonnés : Reddit MCP (403 anonyme — utiliser
reddit-mining), browser-use (nécessite une clé LLM payante), Browserbase (vérification téléphonique). Tavily/Apify/Hunter/Brave s'arrêtent tous sur un CAPTCHA à l'inscription — un clic humain chacun si souhaité.
Données financières / gouvernementales
| Travail | Utiliser | Pièges |
|---|---|---|
| États financiers publiés, dernier trimestre | sec-edgar get_xbrl_concepts (par dépôt) | EDGAR companyfacts (ce que lisent les get_key_metrics de nombreux outils) peut avoir un trimestre de retard — il s'arrête silencieusement au trimestre précédent. Le XBRL par dépôt obtient le dernier correctement. Voir sec-financials. |
| Cours, révisions d'analystes, estimations | yfinance | Considérer comme capricieux ; vérifier une clôture sur la page de l'échange avant d'utiliser un chiffre. |
| Opportunités SAM.gov, grants.gov, data.gov | un MCP gov sans clé | La route SAM gratuite (l'API SAM nécessite une MFA login.gov). Les résultats de recherche omettent NAICS/set-aside — récupérer chaque avis. |
| Subventions USAspending | usaspending | Filtre par lieu d'exécution, pas par emplacement du bénéficiaire — pour « bénéficiaires dans l'État X », appeler spending_by_award avec recipient_locations. « Award Amount » est à vie, pas par exercice fiscal. |
| Taux à 10 ans etc. | curl "https://fred.stlouisfed.org/graph/fredgraph.csv?id=DGS10&cosd=<YYYY-MM-DD>" | FRED a un décalage d'environ 1 jour par rapport à la courbe du Trésor. |
Frameworks
- Claude Agent SDK pour les agents sans tête planifiés (ex. un script uv qui appelle le
MCP sec-edgar et écrit du JSON). Sous macOS launchd, il ne peut pas lire
~/Desktopou~/Documents— placer les fichiers ailleurs. - promptfoo pour les évaluations d'un produit de chat : exécuter le vrai prompt système via
claude -pavec des assertions déterministes (mots interdits, limites de mots). DéfinirPROMPTFOO_DISABLE_TELEMETRY=1. Passer le prompt sur stdin (--tools ""avale un prompt positionnel). - Observable Framework pour données -> site statique (chargeurs Python via
uv run). Une balise<script>d'analyse littérale casse la build ; l'injecter à l'exécution. - Scripts uv (dépendances inline PEP 723) pour chaque petit pipeline.
- Abandonnés : Evidence.dev (maintenant un studio avec login), Pydantic AI/DSPy pour les petits travaux (le SDK le couvre), les plugins lourds de fournisseurs qui coûtent des milliers de tokens de contexte par session.
Ops
| Besoin | Utiliser | Note |
|---|---|---|
| Questions ponctuelles sur l'analytique produit (« quels événements existent », entonnoirs) | posthog (outil exec unique) | Mêmes chiffres que HogQL. Une clé API personnelle peut écrire des flags/cohortes — la garder en lecture seule. |
| Lire des messages sur un Mac | imessage MCP | Meilleur que le SQL brut de chat.db : décode attributedBody, supprime les tapbacks, résout les contacts. Pas d'outil d'envoi. L'épingler — un seul mainteneur. |
| Documentation actuelle des bibliothèques | context7 | Nommer le fournisseur dans la requête, sinon il résout la mauvaise bibliothèque. |
Conserver une compétence, pas le MCP, lorsque le MCP est plus lent et plus lourd pour la même réponse :
Vercel (son MCP fait ~240 outils incl. buy_domain ; voir vercel-api), Stripe (son MCP
masque les noms de clients ; voir stripe-dashboard), GitHub (gh), Notion (curl ; le MCP
hébergé rejette les jetons d'intégration), Apple Notes (apple-notes ; les MCP intègrent des outils de suppression).
Ne jamais ajouter le MCP d'un fournisseur d'e-mail qui comporte un outil d'envoi si votre règle est qu'un
humain appuie sur envoyer.
État d'authentification
- Serveurs OAuth (canva, figma, orshot) : si
claude mcp listindique « Nécessite une authentification », exécuter/mcpune fois dans une session interactive. Conserver les mots de passe et jetons dans le Trousseau, jamais dans un dépôt. - Révoquer toute autorisation OAuth dans les paramètres -> Applications connectées de ce site.
Ajouter un nouveau MCP
Tester avant d'enregistrer : npx -y @modelcontextprotocol/inspector --cli <cmd> --method tools/list (encapsuler le serveur dans un script shell — l'inspecteur avale -e et les
flags du serveur). Ensuite : épingler la version ([email protected] ; les serveurs de référence renumerotent), lire la
liste d'outils pour les outils d'envoi/suppression/publication, vérifier les paramètres de télémétrie par défaut, et ajouter
une ligne ci-dessus avec son piège. Le supprimer lorsqu'il ne mérite plus sa place.