kazaplan-mcp
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| KZ_TOKEN | No | Your Leroy Merlin / Kazaplan session token (Authorization Bearer value). Required to read or save plans online; without it the server can only work on local .kzp files. Valid for about 7 days. | |
| KZ_API_URL | No | Kazaplan API base URL. Default: https://api.kazaplan.com | |
| KZ_DATA_DIR | No | Data directory for the catalog, backups and SVG plans. Default: ~/.cache/kazaplan-mcp (Windows: %LOCALAPPDATA%\kazaplan-mcp); /data in Docker. | |
| KZ_BACKUP_DIR | No | Directory for .kzp backups. Default: the backups/ subdirectory of the data directory. | |
| KZ_ALLOWED_PLANS | No | Comma-separated whitelist of plan IDs that the server is allowed to modify and save online (e.g. "22222222"). Without it, plans can be read but not saved online. |
Instructions
Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.
Pilote un plan 3D Kazaplan (planner Leroy Merlin). Workflow : kz_open -> kz_summary -> kz_room_geometry -> kz_search_catalog -> kz_place / kz_set_material -> kz_save. Toutes les cotes sont en cm. Rien n'est envoyé au serveur avant kz_save.
Capabilities
Features and capabilities supported by this server
Protocol revision2025-11-25
| Capability | Details |
|---|---|
| tools | {
"listChanged": true
} |
| logging | {} |
| prompts | {
"listChanged": true
} |
| resources | {
"subscribe": false,
"listChanged": true
} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| kz_openA | Ouvre un plan : depuis l'API Kazaplan (plan_id, nécessite KZ_TOKEN) ou un fichier .kzp local (path). Pour un fichier local, plan_id (cible d'un futur kz_save) vaut par défaut le début du nom de fichier (« 12345678-20261014-212320-orig.kzp » -> « 12345678 »). Une copie de sauvegarde du .kzp d'origine est écrite dans backups/. |
| kz_saveA | Enregistre le plan (titre par défaut : celui du plan côté serveur). Avec out_path : écrit seulement un .kzp local (aucun envoi). Sinon : POST sur l'API (plan_id doit figurer dans KZ_ALLOWED_PLANS). Le fichier envoyé est aussi archivé dans backups/. |
| kz_copy_planA | Duplique un plan : copie le .kzp de source_plan_id dans target_plan_id, puis l'ouvre. L'API ne permet pas (encore) de créer un plan : créer d'abord un plan vide sur leroymerlin.fr (Mon projet 3D), noter son id et l'ajouter à KZ_ALLOWED_PLANS. Le contenu de la cible est remplacé ; il est archivé dans backups/ avant l'envoi. Usage type : faire une copie de travail du plan réel avant de le modifier. |
| kz_summaryB | Résumé du plan : pièces (surface, sol), murs, ouvertures, objets posés (cotes, pièce), piscines. |
| kz_room_geometryA | Géométrie d'une pièce (nom, type ou id) : arêtes du contour intérieur avec longueur, normale
vers l'intérieur, mur porteur, ouvertures (abscisses from/to depuis le début de l'arête) et segments
libres |
| kz_check_roomB | Contrôle la circulation d'une pièce. issues : meubles dont le dégagement est sous la cote (derrière une chaise 75, devant un canapé 60 jusqu'à la table basse, autour d'une table à manger 110 sans compter les chaises (90 pour un îlot ou une table haute), devant une armoire 75, un buffet 60, un meuble de cuisine 90, de chaque côté d'un lit double 60). paths : depuis la porte de la pièce, chaque autre porte, porte-fenêtre ou passage ouvert est-il atteignable par un chemin de 60 cm (width60) et de 90 cm (width90) ? |
| kz_sketchB | Plan SVG vu de dessus d'une pièce (ou du bâtiment principal si room est absent), comme le plan 2D du planner : murs, portes, fenêtres, tapis, meubles (une lettre par modèle, cf. legend), luminaires. decor_path (DECOR.md) : trace en liseré la peinture de chaque mur aux couleurs de la palette. Écrit le fichier dans le dossier de données (sketches/<pièce>.svg) et renvoie son chemin ; wall / on_top / ceiling listent les objets muraux, posés sur un meuble, au plafond ; schedule = nomenclature (code, libellé, dimensions, emplacement), un élément par objet. |
| kz_boardA | Livrable de la maison pour le plan ouvert : écrit à côté du DECOR.md un PLANCHES.md (vue d'ensemble, nuancier, tableau des pièces, puis par pièce du DECOR.md : plan coté, deux coupes, revêtements, nomenclature) et ses dossiers plans/ et swatches/. À relancer après chaque kz_save. |
| kz_search_catalogB | Recherche dans le catalogue Leroy Merlin local (plein texte FR, sans accents requis). kind : "model" (meubles/objets) ou "material" (revêtements). category : libellé ou code de menu (ex. "Baignoires", "SDB_BAIGNOIRES", "Canapés"). usage (matériaux) : "floor" ou "wall". style : Design, Essential, Natural, Industrial, Boheme, Neoclassic, Country. w = largeur (face avant), d = profondeur, h = hauteur, en cm ; price en € TTC. |
| kz_catalog_itemC | Fiche d'un article du catalogue (model-… ou material-…). |
| kz_placeA | Pose un modèle du catalogue dans une pièce, avec contrôle de collision (murs, objets, débattement des portes, fenêtres masquées).
|
| kz_add_wallsA | Ajoute une chaîne de murs reliés passant par |
| kz_add_openingB | Ajoute une ouverture sur un mur. kind : "door" (90×215 par défaut) ou "casement-window" (100×135, allège 95). offset : distance en cm entre le début du mur et le bord de l'ouverture (sinon centrée). |
| kz_set_roomA | Renomme et/ou change le type d'une pièce existante (nom, type ou id). Ne crée jamais de pièce : après kz_add_walls, ouvrir le plan dans le planner et l'enregistrer pour qu'il détecte la pièce (type « room », sans nom), puis kz_open et kz_set_room. Types : bedroom, livingdiningRoom, kitchen, bathRoom, wc, livingRoom, diningRoom, entrance, cupboard, dressing, laundry, storage, bearing, corridor, office, showerRoom, playRoom, otherHabitable, balcony, terraceannex, garage, basement, cellar, attic, loggia, veranda, technicalArea, otherAnnex, garden, terraceext, driveway, carport, parking. |
| kz_set_materialA | Applique un revêtement (material-…). target :
|
| kz_add_poolC | Ajoute une piscine enterrée de contour |
| kz_moveA | Décale un objet posé de dx, dy cm (coordonnées du plan), avec les objets posés dessus. Refusé en cas de collision, de débattement de porte ou de fenêtre masquée, sauf force=True (tapis, retouches). |
| kz_removeB | Supprime un objet (modèle, ouverture, mur avec ses ouvertures, pièce, piscine…). |
| kz_getC | JSON brut d'un objet du plan (débogage). |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
No prompts | |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
No resources | |
TDQS
Scored across 19 tools
Most tools target clearly distinct actions/resources: geometry vs. circulation check vs. SVG sketch, place vs. move, add_walls vs. add_opening. Slight overlap remains between kz_get (raw debugging JSON) and kz_summary, and between kz_board and kz_sketch as visual deliverables, but descriptions largely disambiguate them.
All names use a consistent kz_ prefix and mostly follow verb_noun patterns (kz_add_walls, kz_set_room, kz_search_catalog) or clear noun labels (kz_summary, kz_sketch). A few bare nouns/verbs (kz_get, kz_board, kz_catalog_item) break the pattern slightly but remain readable.
19 tools is above the typical 3-15 range, but the domain is complex (walls, openings, rooms, materials, catalog, placement, export). Each tool appears to cover a distinct operation with little obvious redundancy.
Covers open/save/copy, editing (walls, openings, pool, objects), room/material management, analysis/export, and catalog lookup. Notable gaps include no direct plan creation (documented API limitation) and limited post-hoc editing of existing openings/walls, but workarounds are provided.