Skip to main content

kazaplan-mcp

Piloter le concepteur 3D Leroy Merlin (Virtual Home, moteur Kazaplan) en langage naturel, depuis n'importe quel assistant compatible MCP (Claude, Codex, Gemini CLI, Cursor, VS Code…) :

« Mets une baignoire de 170 cm dans la salle de bain » « Meuble le salon en scandinave » « Dessine ma maison d'après cette photo du plan »

Le dépôt contient :

  • un serveur MCP (kazaplan-mcp) : ouvrir un plan, chercher dans le catalogue Leroy Merlin, poser des meubles, peindre, construire des murs, contrôler la circulation, dessiner des plans SVG, enregistrer ;
  • deux skills au format ouvert Agent Skills : kazaplan-decorator (aménager et décorer une pièce à partir de l'identité décorative de la maison) et kazaplan-floorplan (dupliquer un plan, le tracer d'après la photo d'un plan).

Sommaire

  1. Démarrage rapide
  2. Jeton et identifiant du plan
  3. Configuration
  4. Brancher le serveur sur votre assistant
  5. Installer les skills
  6. Utilisation
  7. Sécurité et sauvegardes
  8. Dépannage
  9. Développement

1. Démarrage rapide

Deux façons de lancer le serveur, sans rien cloner :

Prérequis Commande
uvx (recommandé) uv uvx --from git+https://github.com/padupuy/kazaplan-mcp kazaplan-mcp
Docker Docker docker run -i --rm -v kazaplan-data:/data ghcr.io/padupuy/kazaplan-mcp

Installer uv : curl -LsSf https://astral.sh/uv/install.sh | sh (macOS / Linux) ou powershell -c "irm https://astral.sh/uv/install.ps1 | iex" (Windows).

Au premier lancement, le serveur télécharge le catalogue Leroy Merlin (≈ 350 Mo, quelques minutes), en construit un index local (≈ 25 Mo) et jette le reste. Pendant ce temps, les outils du catalogue répondent « catalogue en cours de téléchargement ». Pour le faire à l'avance, ou récupérer plus tard les nouveautés :

uvx --from git+https://github.com/padupuy/kazaplan-mcp kazaplan-mcp catalog

Vous n'utilisez pas Claude Code ? Passez à l'étape 2. Avec Claude Code, le plugin installe le serveur et les skills d'un coup :

/plugin marketplace add padupuy/kazaplan-mcp
/plugin install kazaplan@kazaplan-mcp

2. Jeton et identifiant du plan

Le jeton

Le serveur agit avec votre session Leroy Merlin. Le jeton est valable environ 7 jours.

  1. Ouvrez https://www.leroymerlin.fr/config-3d/virtual-home, connectez-vous et ouvrez votre projet.
  2. Outils de développement : F12 (Windows / Linux) ou ⌥ ⌘ I (macOS), onglet Réseau, filtre api.kazaplan.com.
  3. Enregistrez une petite modification dans le planner (ou rechargez la page).
  4. Cliquez sur une requête, section En-têtes de la requête, ligne Authorization: Bearer eyJ….
  5. Copiez tout ce qui suit Bearer .

L'identifiant du plan

Dans le même onglet Réseau, une requête api.kazaplan.com/plans/12345678 : le nombre à la fin est l'identifiant de votre plan.


3. Configuration

Variable Obligatoire Rôle Exemple
KZ_TOKEN pour lire / enregistrer en ligne votre jeton eyJhbGciOi…
KZ_ALLOWED_PLANS pour enregistrer en ligne liste blanche des plans modifiables, séparés par des virgules 22222222
KZ_DATA_DIR non dossier de données : catalogue, sauvegardes, plans SVG défaut ~/.cache/kazaplan-mcp (Windows : %LOCALAPPDATA%\kazaplan-mcp) ; /data dans Docker
KZ_BACKUP_DIR non dossier des sauvegardes .kzp défaut backups/ du dossier de données
KZ_API_URL non adresse de l'API défaut https://api.kazaplan.com

Sans KZ_ALLOWED_PLANS, le serveur peut lire vos plans mais refuse d'enregistrer : c'est voulu.


4. Brancher le serveur sur votre assistant

Les exemples utilisent uvx. Pour Docker, remplacez la commande par :

"command": "docker",
"args": ["run", "-i", "--rm", "-e", "KZ_TOKEN", "-e", "KZ_ALLOWED_PLANS",
         "-v", "kazaplan-data:/data", "ghcr.io/padupuy/kazaplan-mcp"]
Claude Code

Le plus simple est le plugin (voir Démarrage rapide) ; il lit KZ_TOKEN et KZ_ALLOWED_PLANS dans votre environnement. Sans le plugin :

claude mcp add kazaplan --scope user \
  -e KZ_TOKEN="$KZ_TOKEN" -e KZ_ALLOWED_PLANS="22222222" \
  -- uvx --from git+https://github.com/padupuy/kazaplan-mcp kazaplan-mcp
Claude Desktop

Réglages → Développeur → Modifier la configuration (claude_desktop_config.json) :

{
  "mcpServers": {
    "kazaplan": {
      "command": "uvx",
      "args": ["--from", "git+https://github.com/padupuy/kazaplan-mcp", "kazaplan-mcp"],
      "env": { "KZ_TOKEN": "collez-votre-jeton-ici", "KZ_ALLOWED_PLANS": "22222222" }
    }
  }
}

Si uvx est introuvable, mettez son chemin absolu (which uvx). Quittez complètement l'application puis relancez-la.

Codex CLI

~/.codex/config.toml :

[mcp_servers.kazaplan]
command = "uvx"
args = ["--from", "git+https://github.com/padupuy/kazaplan-mcp", "kazaplan-mcp"]
env = { KZ_TOKEN = "collez-votre-jeton-ici", KZ_ALLOWED_PLANS = "22222222" }
Gemini CLI

Le dépôt est aussi une extension Gemini CLI (le serveur hérite de KZ_TOKEN et KZ_ALLOWED_PLANS de votre environnement) :

gemini extensions install https://github.com/padupuy/kazaplan-mcp
Cursor

~/.cursor/mcp.json :

{
  "mcpServers": {
    "kazaplan": {
      "command": "uvx",
      "args": ["--from", "git+https://github.com/padupuy/kazaplan-mcp", "kazaplan-mcp"],
      "env": { "KZ_TOKEN": "collez-votre-jeton-ici", "KZ_ALLOWED_PLANS": "22222222" }
    }
  }
}
VS Code (GitHub Copilot)

.vscode/mcp.json (le jeton est demandé au démarrage et stocké par VS Code) :

{
  "inputs": [{ "id": "kz-token", "type": "promptString", "description": "Jeton Kazaplan", "password": true }],
  "servers": {
    "kazaplan": {
      "type": "stdio",
      "command": "uvx",
      "args": ["--from", "git+https://github.com/padupuy/kazaplan-mcp", "kazaplan-mcp"],
      "env": { "KZ_TOKEN": "${input:kz-token}", "KZ_ALLOWED_PLANS": "22222222" }
    }
  }
}

5. Installer les skills

Les skills apprennent à l'assistant à s'en servir comme un décorateur ou un dessinateur : relevé de la pièce, identité décorative de la maison (DECOR.md : foyer, palette 60 / 30 / 10, matières, programme par pièce), règles d'ergonomie et de circulation, validation avant de poser, planches d'architecte en fin de projet.

Assistant Installation
Claude Code inclus dans le plugin
Codex, Cursor, Gemini CLI, Copilot, OpenCode… npx skills add padupuy/kazaplan-mcp
Autre copiez skills/kazaplan-decorator et skills/kazaplan-floorplan dans le dossier de skills de l'outil

6. Utilisation

Parlez normalement à l'assistant :

  1. « Ouvre mon plan 22222222 et fais-moi un résumé des pièces. »
  2. « Trouve une baignoire de moins de 175 cm et pose-la dans la salle de bain. »
  3. « Carrelage blanc 60×60 au sol du WC. »
  4. « Décore la chambre 1 » : sol, murs, lumière, tapis, textiles, miroir, déco ; l'assistant présente le projet et attend votre accord avant de poser quoi que ce soit.
  5. « Enregistre. »

Puis rechargez la page du planner pour voir le résultat. Rien n'est envoyé tant que vous n'avez pas demandé d'enregistrer.

Les murs, ouvertures et pièces neufs se finalisent dans le planner : après l'enregistrement, rechargez-le et enregistrez depuis le planner (il détecte alors les pièces fermées), puis demandez de nommer les nouvelles pièces.

Les outils

Outil Ce qu'il fait
kz_open ouvre un plan en ligne (plan_id) ou un fichier .kzp local (path)
kz_summary pièces, surfaces, sols, ouvertures, objets posés
kz_room_geometry murs d'une pièce, portes et fenêtres, segments libres, surface utile
kz_search_catalog, kz_catalog_item recherche dans le catalogue (texte, catégorie, dimensions, style, couleur, sol / mur), fiche d'un article
kz_place, kz_move, kz_remove pose, décale, supprime, avec contrôle des collisions, débattements de portes et fenêtres
kz_set_material sol, peinture / papier peint / faïence d'une pièce ou d'un mur, plafond, gazon
kz_add_walls, kz_add_opening, kz_add_pool, kz_set_room construction : murs, portes et fenêtres, piscine, nom et type des pièces
kz_check_room circulation : dégagements autour des meubles, chemins de 60 / 90 cm entre les portes
kz_sketch plan SVG vu de dessus d'une pièce ou de la maison
kz_board livrable PLANCHES.md à côté du DECOR.md : vue d'ensemble, nuancier, et par pièce plan coté, coupes, revêtements, nomenclature
kz_save, kz_copy_plan enregistre en ligne (ou en .kzp local), duplique un plan dans un plan vide
kz_get contenu brut d'un objet (diagnostic)

Toutes les cotes sont en centimètres. Sans jeton, on peut travailler sur un .kzp local : « ouvre ~/Downloads/mon-plan.kzp » puis « enregistre dans ~/Downloads/mon-plan-modifie.kzp ».


7. Sécurité et sauvegardes

  • Liste blanche : le serveur n'enregistre en ligne que les plans de KZ_ALLOWED_PLANS.
  • Sauvegardes automatiques dans backups/ du dossier de données : <plan>-<date>-orig.kzp (à l'ouverture), <plan>-<date>-sent.kzp (ce qui a été envoyé). Pour revenir en arrière : « ouvre le fichier …-orig.kzp et enregistre-le sur le plan 22222222 ».
  • Le jeton n'est jamais écrit sur disque par le serveur.
  • Les fichiers écrits à la demande de l'assistant sont limités : .kzp pour kz_save, .svg pour kz_sketch, dossier du DECOR.md pour kz_board.

8. Dépannage

Symptôme Cause probable Solution
Variable d'environnement KZ_TOKEN absente variable non transmise au serveur la définir dans la config de l'assistant, relancer
HTTP 401 ou HTTP 403 jeton expiré (≈ 7 jours) ou mal copié récupérer un nouveau jeton
Plan … hors liste blanche identifiant absent de KZ_ALLOWED_PLANS l'ajouter, relancer
Catalogue en cours de téléchargement premier lancement patienter quelques minutes
Catalogue absent / non téléchargé téléchargement interrompu kazaplan-mcp catalog
Placement refusé : chevauche… / débattement… pas la place à cet endroit autre mur, modèle plus petit, ou force=True
Le planner affiche des blocs jaunes ou refuse d'enregistrer plan rejeté par le planner revenir à la sauvegarde -orig.kzp et ouvrir un ticket
Les changements n'apparaissent pas page du planner non rechargée recharger l'onglet

9. Développement

src/kazaplan_mcp/
  kzp.py         conteneur .kzp (WPRJ)
  catalog.py     téléchargement du catalogue, index local, recherche
  geometry.py    géométrie 2D
  plan.py        modèle du plan : résumé, géométrie des pièces, placement, construction
  circulation.py contrôle de circulation
  sketch.py      plans SVG, livrable PLANCHES.md
  section.py     coupes des pièces ; mesh.py : modèles 3D .glb rendus au trait
  api.py         API Kazaplan, sauvegardes ; paths.py : dossier de données
  server.py      serveur MCP (outils kz_*) et CLI
skills/          skills Agent Skills
tests/           tests (plan synthétique, catalogue simulé)
HANDOFF.md       notes techniques : format .kzp, conventions vérifiées, règles du planner
python3 -m venv .venv && .venv/bin/pip install -e ".[dev]"
.venv/bin/ruff check . && .venv/bin/ruff format --check . && .venv/bin/python -m pytest -q

Pour essayer le plugin Claude Code depuis le dépôt : claude --plugin-dir ..

Inspecter un plan :

python -m kazaplan_mcp.kzp unpack plan.kzp dossier/   # → metadata.json, project.json
python -m kazaplan_mcp.kzp pack dossier/ nouveau.kzp

Publication : un tag v* publie le paquet sur PyPI (release.yml, trusted publishing) et l'image ghcr.io/padupuy/kazaplan-mcp (docker.yml, aussi edge à chaque push sur main).

Licence

MIT. Leroy Merlin et Kazaplan sont des marques de leurs propriétaires respectifs.

Metadata

Release files for kazaplan-mcp 0.1.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for kazaplan-mcp 0.1.0
File Size Uploaded Provenance Actions
kazaplan_mcp-0.1.0.tar.gz 71.4 kB With provenance Details for kazaplan_mcp-0.1.0.tar.gz

Built distribution (wheel)

Table of built distributions (wheels) for kazaplan-mcp 0.1.0
File Interpreter ABI Platform Actions
kazaplan_mcp-0.1.0-py3-none-any.whl Python 3 none any Details for kazaplan_mcp-0.1.0-py3-none-any.whl

Total release size: 131.3 kB

Release files / kazaplan_mcp-0.1.0.tar.gz

Download URL kazaplan_mcp-0.1.0.tar.gz
Size 71.4 kB
Tags Source
SHA-256 checksum
How to use checksums
2402ebf0bef60f388103c71f9ec1d8d17fad8d4e74ea08cd689aee2080787cd3
BLAKE2b-256 checksum
How to use checksums
7a7709a5a80a4e0c870983eef4ce05b71da0f78318235ac9ec6be60b68c62b17
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.16

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Nov 9, 2026.

Transparency log

Release files / kazaplan_mcp-0.1.0-py3-none-any.whl

Download URL kazaplan_mcp-0.1.0-py3-none-any.whl
Size 59.9 kB
Tags Python 3
SHA-256 checksum
How to use checksums
65ebfb8a6c41ce7f0cb32b3e3e5d06d3bffcc5acd473cccc460e6e85bf7b215a
BLAKE2b-256 checksum
How to use checksums
1e9d6aac350c6e29f07bb143eccc0678c813be894360ab5419d1f6a41092f7ab
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.16

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Nov 9, 2026.

Transparency log

Security for kazaplan-mcp 0.1.0

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

Full provenance

Both files in this release have been uploaded with provenance metadata.

Select from 2 files

Attestation for kazaplan_mcp-0.1.0.tar.gz

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Nov 9, 2026.

Transparency log

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

To learn more about protecting yourself from malicious actors, visit our package security documentation.

Release history Release notifications | RSS feed

This release

0.1.0 This release

2 release files Full provenance

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page