Skip to main content
Glama
kazaplan-mcp

kazaplan-mcp

by padupuy

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).

WARNING

Projet non officiel, sans lien avec Leroy Merlin ni Kazaplan. Il utilise l'API du planner telle que le site l'appelle, avec votre propre session ; elle peut changer sans préavis. Il modifie vos plans : faites vos essais sur une copie.


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


Related MCP server: Loxone MCP Server

1. Démarrage rapide

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

Prérequis

Commande

uvx (recommandé)

uv

uvx 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 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 .

CAUTION

Ce jeton donne accès à vos plans : ne le partagez pas, ne le commitez jamais. S'il a fuité, déconnectez-vous puis reconnectez-vous à Leroy Merlin.

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.

TIP

Créez un second projet vide sur leroymerlin.fr pour vos essais et dupliquez-y votre maison (« duplique mon plan 11111111 dans le plan 22222222 »).


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"]
NOTE

Avec Docker, les fichiers que vous échangez avec le serveur (.kzp locaux, DECOR.md, planches) doivent se trouver dans un dossier monté (-v "$PWD":/work, puis chemins /work/…).

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 kazaplan-mcp

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

{
  "mcpServers": {
    "kazaplan": {
      "command": "uvx",
      "args": ["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/config.toml :

[mcp_servers.kazaplan]
command = "uvx"
args = ["kazaplan-mcp"]
env = { KZ_TOKEN = "collez-votre-jeton-ici", KZ_ALLOWED_PLANS = "22222222" }

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/mcp.json :

{
  "mcpServers": {
    "kazaplan": {
      "command": "uvx",
      "args": ["kazaplan-mcp"],
      "env": { "KZ_TOKEN": "collez-votre-jeton-ici", "KZ_ALLOWED_PLANS": "22222222" }
    }
  }
}

.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": ["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.

Available Tools

19 tools
kz_add_openingKz 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).

Inputs: wall_id (required), kind, width, height, +3 more. Returns: object

kz_add_poolKz Add PoolC

Ajoute une piscine enterrée de contour points ([[x, y], …], cm).

Inputs: points (required), height, water_depth, coping_thickness. Returns: object

kz_add_wallsKz Add WallsA

Ajoute une chaîne de murs reliés passant par points ([[x, y], …], cm). Épaisseurs usuelles : 30 extérieur, 7 cloison. Une extrémité libre posée sur un mur existant (axe ou face, à ½ épaisseur + 4 cm près) s'y raccorde : en T sur le flanc, en coin sur une extrémité libre. Les faces (wall.pane) des nouveaux murs sont créées par le planner à l'ouverture. Aucune pièce n'est créée : le planner la détecte à la prochaine ouverture + enregistrement, ensuite seulement la nommer avec kz_set_room.

Inputs: points (required), closed, height, thickness. Returns: object

kz_boardKz 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.

Inputs: decor_path (required). Returns: object

kz_catalog_itemKz Catalog ItemC

Fiche d'un article du catalogue (model-… ou material-…).

Inputs: item_id (required). Returns: object

kz_check_roomKz 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) ?

Inputs: room (required). Returns: object

kz_copy_planKz 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.

Inputs: source_plan_id (required), target_plan_id (required), title. Returns: object

kz_getKz GetC

JSON brut d'un objet du plan (débogage).

Inputs: object_id (required). Returns: object

kz_moveKz 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).

Inputs: object_id (required), dx, dy, force. Returns: object

kz_openKz 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/.

Inputs: path, plan_id. Returns: object

kz_placeKz 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).

  • Par défaut : dos contre le plus long mur libre qui convient.

  • against_wall : index d'arête (cf. kz_room_geometry) ; offset : distance en cm entre le début de l'arête et le bord de l'objet (sinon centré dans le plus grand segment libre).

  • center=True : au centre de la pièce. x, y : centre imposé (coordonnées plan).

  • under_opening : id d'une fenêtre ; centre l'objet sous elle, dos au mur (radiateurs).

  • room absent : pose en extérieur, au niveau du terrain ; x, y obligatoires, contrôle des murs traversés.

  • width / depth / height : redimensionne le modèle (cm), ex. pergola sur mesure.

  • gap : distance dos du modèle / mur (cm, défaut 1) ; ex. 59 pour poser des portes de dressing devant des caissons de 58 cm. Les modèles NO_COLLISION (portes de dressing…) peuvent chevaucher.

  • rotation : rotation supplémentaire en degrés (sens trigonométrique) ; avec x, y : angle absolu (la face avant regarde vers rotation + 90°).

  • force=True : pose même en cas de collision (renvoyée dans warnings).

  • elevation : hauteur du bas de l'objet au-dessus du sol (cm), au lieu de celle du catalogue (miroir à 120, applique à 170, étagère murale…).

  • on_top_of : id d'un objet posé ; pose dessus (lampe sur un buffet, vase sur une table), centré sur lui sauf x, y fournis ; avec elevation, pose à cette hauteur (lit : le dessus du matelas, pas la tête de lit).

Inputs: model_id (required), x, y, gap, +12 more. Returns: object

kz_removeKz RemoveB

Supprime un objet (modèle, ouverture, mur avec ses ouvertures, pièce, piscine…).

Inputs: object_id (required). Returns: object

kz_room_geometryKz 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 free (portes + 5 cm de marge et fenêtres exclues), zones de débattement des portes, surface totale et utile (hors objets posés au sol).

Inputs: room (required). Returns: object

kz_saveKz 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/.

Inputs: title, out_path. Returns: object

kz_search_catalogKz 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.

Inputs: kind, color, limit, max_d, +6 more. Returns: result

kz_set_materialKz Set MaterialA

Applique un revêtement (material-…). target :

  • "floor:<pièce>" : sol de la pièce (carrelage, parquet…) ;

  • "ceiling:<pièce>" : plafond de la pièce (peinture), visible seulement en vue 3D ;

  • "wall:<pièce>" : toutes les faces de mur tournées vers la pièce (peinture, papier peint, faïence) ;

  • "wall:<pièce>:<arête>" : un seul mur, index d'arête de kz_room_geometry (mur d'accent) ;

  • "ground" : terrain autour de la maison (gazon).

Inputs: target (required), material_id (required). Returns: object

kz_set_roomKz 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.

Inputs: room (required), name, type. Returns: object

kz_sketchKz 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.

Inputs: room, decor_path. Returns: object

kz_summaryKz SummaryB

Résumé du plan : pièces (surface, sol), murs, ouvertures, objets posés (cotes, pièce), piscines.

Inputs: no named parameters. Returns: object

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

Loading tool schema changelog…

    TDQS

    B3.4/5.0

    Scored across 19 tools

    Disambiguation4/5

    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.

    Naming Consistency4/5

    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.

    Tool Count4/5

    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.

    Completeness4/5

    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.

    Maintenance

    ActivityMaintained
    ResponsivenessNo recent community issues

    Related MCP Connectors

    Related MCP Servers

    • A
      license
      A
      quality
      A
      maintenance
      Integrates HomeMatic smart home devices (via CCU3, RaspberryMatic, or debmatic) as MCP tools, enabling natural language query and control of rooms, devices, programs, and system variables.
      28
      340 npm
      9
      MIT
    • A
      license
      Not graded
      quality
      B
      maintenance
      Enables natural language control of Loxone smart home systems, including lighting, audio, climate, and environmental monitoring, through MCP-compatible clients.
      36 npm
      3
      AGPL 3.0
    • A
      license
      Not graded
      quality
      B
      maintenance
      Enables AI assistants to automate 2D architectural drafting and CAD file management, including DXF/DWG parsing, SVG/PNG/PDF rendering, wall extrusion to 3D STL meshes, room and beam analysis, block/script library access, and persistent depot storage via a REST API and MCP tools.
      18
      MIT
    • A
      license
      A
      quality
      C
      maintenance
      Enables controlling Autodesk Fusion 360 from any MCP-compatible AI client through natural language. Exposes tools for creating sketches, drawing rectangles and circles, extruding, revolving, filleting, shelling, drilling holes and bolt-circle patterns, managing user parameters, and exporting STEP/STL files, plus batch generation of parametric variants.
      15
      MIT