{"id":"f9162168-7e51-498a-826b-6519d10c41ad","slug":"picard-mcp","kind":"mcp","name":"picard-mcp","summary":"MCP et CLI non officiels Picard : recherche, fiches produit et panier confirmé pour Codex, Claude Code et tout client MCP.","owner":"ncleton","repoUrl":"https://github.com/ncleton/picard-mcp","license":"MIT","licenseTier":"permissive","trust":"community","stars":0,"match":null,"fewStars":true,"format":"mcp","createdAt":"2026-10-09T10:25:19.000Z","addedAt":"2026-10-21T06:57:58.552Z","logoUrl":"https://avatars.githubusercontent.com/u/171194381?u=a3cbbf3be907f7601ae9dd7d46a7336b2cd55b57&v=4","linkOnly":false,"collection":null,"skillPath":null,"categories":["developer-tools","memory-knowledge"],"tags":["camoufox","france","grocery","picard","salesforce-sfra"],"runtime":"node","local":true,"cloudCapable":false,"cloudCapability":"unknown","cloudReadyOnPlatform":false,"needsApiKey":false,"reviewed":false,"syncedAt":"2026-10-26T11:31:32.561Z","sample":false,"url":"https://conduits.dev/tools/picard-mcp","language":"TypeScript","transports":["stdio"],"install":{"npm":"picard-mcp"},"requirements":{"env":[],"upstreamMayCharge":false},"tools":null,"readme":"# Picard MCP\n\nServeur MCP et CLI non officiels pour [Picard](https://www.picard.fr) : chercher le catalogue actuel, lire les fiches produit et préparer le panier dans une session web Camoufox persistante qui appartient à l’utilisateur.\n\nSurgelés : les prix et la disponibilité dépendent du service choisi (livraison ou magasin Click & Collect), qui doit être sélectionné sur le site officiel.\n\n## Achat en ligne\n\nModes de réception proposés par Picard : livraison à domicile et retrait en magasin ou en point de retrait (click and collect). Livraison à domicile ou Click & Collect gratuit en magasin. Le service, l’adresse ou le magasin et le créneau se choisissent sur le site officiel : Picard masque les prix tant qu’un service n’est pas sélectionné.\n\nUn compte Picard est facultatif pour remplir un panier ; il devient nécessaire pour finaliser la commande et choisir le mode de réception.\n\nLe MCP ne choisit aucun créneau, ne valide aucune commande et ne réalise aucun paiement : il remplit et relit le panier, la commande se termine sur le site officiel.\n\n## Capacités\n\n- `connect_picard` : ouvre Picard dans le profil Camoufox isolé et propose le wizard local de connexion ou de création de compte ;\n- `session_status` : prouve Camoufox, le site officiel, son périmètre exact et l’état de connexion visible ;\n- `search_products` : retourne les produits actuels, leur prix et leur disponibilité ;\n- `get_product` : lit une fiche retournée par la recherche (ingrédients, EAN, nutrition lorsqu’ils sont publiés) ;\n- `get_cart` : lit le panier sans exposer l’identité, l’adresse, le créneau ou le paiement ;\n- `add_to_cart` : prévisualise puis ajoute une fiche fraîche après confirmation ;\n- `remove_from_cart` : prévisualise puis retire un produit présent après confirmation.\n\n## Prérequis\n\n- Node.js 22.12 ou supérieur ;\n- `camofox-browser` 2.4.6 ou une version compatible ;\n- un compte Picard autorisé par son propriétaire (facultatif pour remplir un panier) ;\n- le magasin Click & Collect ou la zone de livraison déjà choisi dans la fenêtre Camoufox sur picard.fr ;\n\nInstallation de Camoufox :\n\n```bash\nnpm install --global camofox-browser@2.4.6\n```\n\nCréez une clé aléatoire forte dans votre gestionnaire de secrets, puis démarrez le service local avec `CAMOFOX_AUTH_MODE=required` et `CAMOFOX_API_KEY` définis dans son environnement :\n\n```bash\ncamofox server start --background\n```\n\nNe transmettez jamais cette clé, vos cookies, votre mot de passe, un code 2FA ou un CAPTCHA à un assistant.\n\n## Installation du MCP\n\n```bash\ngit clone https://github.com/ncleton/picard-mcp.git\ncd picard-mcp\nnpm ci\nnpm run build\ncp .env.example .env\n```\n\nRenseignez localement `.env` :\n\n- `PICARD_SERVICE_LABEL` : Libellé du service Picard choisi sur le site officiel (magasin Click & Collect ou zone de livraison). Exemple : `PICARD WAZEMMES - Click & Collect` ;\n- `CAMOFOX_USER_ID` : identifiant unique pour cette personne et ce compte ;\n- `CAMOFOX_URL` : normalement http://127.0.0.1:9377 ;\n- `CAMOFOX_AUTH_MODE` : obligatoire ;\n- `CAMOFOX_API_KEY` : la même clé forte que le service Camoufox (32 caractères minimum) ;\n\n## Première connexion\n\n```bash\nnpm run build\nnode dist/cli.js connect\n```\n\nCamoufox ouvre Picard dans son profil persistant. Saisissez vous-même vos identifiants et éventuels codes dans la fenêtre du navigateur, puis vérifiez :\n\n```bash\nnode dist/cli.js status\nnode dist/cli.js search \"tofu\" --limit 5\nnode dist/cli.js cart\n```\n\nUne mutation CLI est toujours prévisualisée. Après vérification du delta, relancez exactement la même commande avec `--confirm` :\n\n```bash\nnode dist/cli.js add '<product_url retourné par search>' --quantity 1\nnode dist/cli.js add '<même product_url>' --quantity 1 --confirm\nnode dist/cli.js remove '<product_id retourné par cart>' --quantity 1\nnode dist/cli.js remove '<même product_id>' --quantity 1 --confirm\n```\n\nDans MCP, le premier appel à `add_to_cart` ou `remove_from_cart` retourne un jeton expirant après cinq minutes. Le second appel doit reprendre exactement les mêmes paramètres et ce jeton. Toute modification intermédiaire du panier invalide la confirmation.\n\n## Configuration MCP\n\nExemple recommandé pour un client MCP utilisant directement la release publique `v0.1.0` en `stdio` :\n\n```json\n{\n  \"mcpServers\": {\n    \"picard\": {\n      \"command\": \"npx\",\n      \"args\": [\n        \"-y\",\n        \"--package=github:ncleton/picard-mcp#v0.1.0\",\n        \"picard-mcp\"\n      ],\n      \"env\": {\n        \"PICARD_SERVICE_LABEL\": \"PICARD WAZEMMES - Click & Collect\",\n        \"CAMOFOX_USER_ID\": \"picard-personal\",\n        \"CAMOFOX_URL\": \"http://127.0.0.1:9377\",\n        \"CAMOFOX_AUTH_MODE\": \"required\",\n        \"CAMOFOX_API_KEY\": \"référence-vers-votre-secret-local\"\n      }\n    }\n  }\n}\n```\n\nPréférez le gestionnaire de secrets du client MCP à une clé écrite en clair dans sa configuration.\n\n## Contrat observé\n\n- Site Salesforce Commerce Cloud (SFRA) : la recherche lit le fragment Search-UpdateGrid (les vignettes de /recherche?q= ne sont que des squelettes), les fiches viennent de la page produit, le panier de la page `CartSFRA-Show`.\n- Picard masque les prix (`XX,XX €`) tant qu’aucun service n’est choisi : le MCP refuse alors la recherche avec l’erreur `scope_required` au lieu d’inventer un prix. Choisissez le service dans la fenêtre Camoufox (code postal, ville, livraison ou magasin Click & Collect, créneau).\n- `CartSFRA-AddProduct` (POST) ajoute, `CartSFRA-UpdateQuantity` (GET) fixe la quantité et `CartSFRA-RemoveProductLineItem` (GET) retire la ligne ; le panier réel est relu avant et après chaque écriture.\n- L’identifiant produit est la référence Picard à dix-huit chiffres.\n\n## Limites et erreurs explicites\n\nCamoufox limite par défaut `evaluate-extended` à 20 appels par profil et par minute. Le client sérialise les lectures. Si la limite est atteinte, il renvoie `rate_limited` et le délai de reprise fourni par Camoufox ; il ne bascule jamais vers un autre compte, un autre périmètre ou des données en cache.\n\nUne page de connexion, un CAPTCHA ou une protection anti-robot produit `authentication_required` avec l’action manuelle attendue. Une évolution du contrat du site produit `contract_changed` au lieu d’inventer une réponse.\n\n## Développement et validation\n\n```bash\nnpm run verify\n```\n\nCette commande exécute le typage, les tests, un échange avec le SDK MCP officiel, l’audit de confidentialité et l’inspection du paquet npm. `npm run live:smoke` ajoute puis retire un produit réel du panier de la session configurée et vérifie le retour exact à l’état initial.\n\n## Statut juridique\n\nProjet non officiel, sans affiliation ni approbation de Picard. L’utilisateur reste responsable de respecter les conditions du service et de n’utiliser que son propre compte et ses propres sessions.\n"}