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) etkazaplan-floorplan(dupliquer un plan, le tracer d'après la photo d'un plan).
Sommaire
- Démarrage rapide
- Jeton et identifiant du plan
- Configuration
- Brancher le serveur sur votre assistant
- Installer les skills
- Utilisation
- Sécurité et sauvegardes
- Dépannage
- 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.
- Ouvrez https://www.leroymerlin.fr/config-3d/virtual-home, connectez-vous et ouvrez votre projet.
- Outils de développement : F12 (Windows / Linux) ou ⌥ ⌘ I (macOS), onglet Réseau, filtre
api.kazaplan.com. - Enregistrez une petite modification dans le planner (ou rechargez la page).
- Cliquez sur une requête, section En-têtes de la requête, ligne
Authorization: Bearer eyJ…. - 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 :
- « Ouvre mon plan 22222222 et fais-moi un résumé des pièces. »
- « Trouve une baignoire de moins de 175 cm et pose-la dans la salle de bain. »
- « Carrelage blanc 60×60 au sol du WC. »
- « 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.
- « 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 :
.kzppourkz_save,.svgpourkz_sketch, dossier duDECOR.mdpourkz_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)
| 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)
| File | Interpreter | ABI | Platform | Actions Reset |
|---|---|---|---|---|
| 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 logRelease 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 logSecurity 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.
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 logA 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.