2016judea/mcp-stack

Guide pratique des serveurs et frameworks MCP gratuits, avec leurs pièges : données financières/gouvernementales (SEC EDGAR, Yahoo, SAM.gov, USAspending), recherche web (Exa, Firecrawl, Crawl4AI, Jina reader), design/art/marque (Canva, Inkscape, Penpot, Figma, Orshot, génération d'images Hugging Face, vectorisation, graphiques), données/spatiales (DuckDB spatial, couches ArcGIS en direct, OpenStreetMap/Overpass, Census, MapLibre), et ops (PostHog, iMessage, context7 docs). À utiliser pour créer un post social, une carte OG, une affiche, un logo/vecteur, un graphique, une carte ou un élément de marque ; pour interroger des fichiers parquet/geojson/duckdb ou une couche open data d'une ville ; lorsqu'un MCP nécessite une authentification ou échoue ; ou lorsqu'on demande « quels outils avons-nous », « existe-t-il un MCP pour X », « devrions-nous ajouter X ».

Qu'est-ce que mcp-stack ?

Ce skill est un guide de référence complet pour les développeurs et agents IA souhaitant sélectionner le meilleur serveur ou framework MCP gratuit pour une tâche donnée, tout en évitant les pièges courants. Il couvre un large éventail de domaines : création de designs (Canva, Inkscape, Penpot, Figma, Orshot), génération d'images et vectorisation (Hugging Face, shapesoda, svg-tracer), visualisation de données (antv-chart), données spatiales (DuckDB avec extension spatiale, OpenStreetMap, Census, MapLibre), recherche web et extraction (Exa, Firecrawl, Crawl4AI), et données financières/gouvernementales (SEC EDGAR, Yahoo Finance, SAM.gov, USAspending). Chaque outil est évalué avec ses limites réelles (quotas gratuits, problèmes de performance, bugs connus) et des solutions de contournement sont fournies. Le guide insiste sur l'utilisation de la version gratuite uniquement, sans inscription à un essai payant, et sur la non-publication de contenu sans autorisation explicite. Il explique également comment tester et ajouter un nouveau serveur MCP, gérer l'authentification OAuth, et choisir entre une compétence dédiée et un serveur MCP selon le contexte.

Compatible avec✓Claude Code~Codex CLI~Cursor
npx skills add https://github.com/2016judea/brick-mortar-skills/tree/HEAD/skills/mcp-stack

Installed? Explore more Développement et programmation skills: steipete/bluebubbles, steipete/eightctl, steipete/blucli · View all 6 →

Demander à votre IA préférée

Ouvre une nouvelle conversation avec cette compétence d'agent déjà préchargée.

Documentation

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

TravailUtiliserPourquoi / coût
Pièce marketing finie à partir d'un brief, le plus beau renducanva create-design -> resize-design -> export-designMeilleur 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 exactsinkscape MCP inkscape_vector construct_svg (params.header + params.body) -> inkscape_render export_previewRendu 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 designpenpot execute_code -> export_shapeGratuit, 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 reprennefigma create_new_file + use_figmaDé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, gratuithuggingface 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 transparenthuggingface 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éelsantv-chartOption 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 produitBlender 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 machineSatori 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

TravailUtiliserPièges
SQL + spatial sur parquet/csv/geojson/.duckdbduckdb 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 directduckdb 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/tractcensus 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 construitmaplibre render_styleChrome 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

TravailUtiliserPièges
« Qui s'occupe des opérations chez X », recherche de personnes/entreprisesexa web_search_exaSans 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 connueexa 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 rendufirecrawl~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 CloudflareCrawl4AI CLI crwl <url> -o markdownDé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

TravailUtiliserPièges
États financiers publiés, dernier trimestresec-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, estimationsyfinanceConsidé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.govun 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 USAspendingusaspendingFiltre 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 ~/Desktop ou ~/Documents — placer les fichiers ailleurs.
  • promptfoo pour les évaluations d'un produit de chat : exécuter le vrai prompt système via claude -p avec des assertions déterministes (mots interdits, limites de mots). Définir PROMPTFOO_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

BesoinUtiliserNote
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 Macimessage MCPMeilleur 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èquescontext7Nommer 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 list indique « Nécessite une authentification », exécuter /mcp une 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.

Individual skills in this repo

This repo contains 7 individual skills — each has its own dedicated page.

2016judea/ascii-charts

Build charts as plain Unicode-block text — bar, range, bullet, gap-bracket, star-histogram, heatmap, line, Venn, pie, donut and scatter — with a dependency-free Python script, for anywhere only monospace text survives (newsletter code blocks, Markdown, terminals, plain-text email, chat). Use when a chart has to embed as literal text instead of an image or a third-party chart service, or when you want a hand-made terminal look with no branding footer.

2016judea/buffett-checklist

Apply Warren Buffett's investment framework as a discipline lens when weighing a buy, hold, or sell decision — circle of competence, economic moat, owner earnings & intrinsic value, margin of safety, management/capital-allocation quality, and market psychology (Mr. Market, fear vs greed, temperament). Use when asked to "run this through Buffett", "what would Buffett say", "does this pass the moat test", "is this cheap enough", or for a second, more skeptical read on a name being evaluated or already held. This is a discipline overlay, not a replacement for a strategy — it applies the Buffett lens to how someone actually invests, rather than issuing generic advice.

2016judea/image-riff

Turn one or more reference images into original art in that reference's own visual language, then cut it to whatever surface it's for. Use when you paste or point at art and say "use this as the base image", "generate art from this", "riff on this", "some creative ideation with these images", "make me a channel banner / avatar / cover / plate", "wilder version of this", or want a spread of options off one piece of reference. This is the TASK skill; the engine is the `make-art` tool skill.

2016judea/leonardo

Draw the way Leonardo da Vinci drew — a study sheet, a notebook folio, a red-chalk or silverpoint study, a machine cutaway, a storm of vortices — in his real materials and page-logic, generated with the make-art engine and anchored on fifteen of his actual (public-domain) sheets. Use when you say "Leonardo", "da Vinci", "like his notebooks", "a codex page of X", "draw this as one of his study sheets", "sanguine", "silverpoint", or wants a design, diagram, or illustration in that hand. Also a reading guide to his notebooks (Richter's 1883 public-domain translation) for "what did Leonardo say about shadow / trees / water". This is a TASK skill; the engine is `make-art`.

2016judea/records-request

Get a specific record out of a US government office by public-records request — "request the assessor's model", "file a data practices request", "FOIA this", "open records request", "can we just ask the county for it", "who do I write to at <county>", "chase that request", "did they ever answer". Covers checking the website first, finding the right office and statute, the carve-out paragraph that makes a request answerable instead of refused, web-form traps (hidden character caps, WAFs that reject apostrophes), chasing (there is usually no deadline), whether what comes back may be republished, and parsing multi-year tables without silent errors.

2016judea/sms-native-product

Build a product whose interface is text messages rather than an app or a website — "no app, no website", "they just text a number", "chat with our agent natively in Text Messages", "can we do this over text", "an SMS bot", "a Telegram bot", "make it a group chat", "minimum viable friction". Fires equally when it has already gone wrong — "my campaign got rejected", "our number is blocked", "the texts aren't arriving", "why do I need to register". Covers the gate that decides whether such a product can send at all (US A2P 10DLC registration, SHAFT content rules, permanent rejection codes), group MMS from code, what each channel can't do, an architecture that survives losing the channel, and guarding model-rewritten user content.

2016judea/vertical-market-agent

Build a chat agent that knows one industry in one metro better than any general model because it carries a precomputed digest of real public records (or a mined review corpus) and can pull live records mid-conversation — finding the moat, building a byte-stable substrate, enumerating what the records can't, the data traps that produce plausible wrong numbers, deterministic math in tools, measured prompt cost and cache TTL, shipping as an ad destination, an off-sector ending, and a precomputed spatial "what is this next to" layer. Use when building a vertical AI agent grounded in records rather than general knowledge.

Skills associés