Skip to main content
Glama

AutoCAD MCP

Auteur : Jérémie BISINGWA

Serveur Model Context Protocol qui donne à un assistant IA le contrôle conversationnel d'Autodesk AutoCAD, doublé d'un moteur DXF multiplateforme qui fait tourner le projet sans AutoCAD.


Ce qui distingue ce serveur

L'assistant voit son propre dessin. L'outil de rendu renvoie une image dans la réponse. Le modèle constate qu'une porte est mal orientée et se corrige, au lieu de dessiner en aveugle.

Tout part en un seul lot. Un plan complet s'envoie en un appel, encadré par une seule marque d'annulation et suivi d'un seul rafraîchissement. Annuler une maison est un geste, pas cinquante.

Le serveur tourne sans AutoCAD. Le moteur DXF fonctionne sur macOS et Linux, produit de vrais fichiers, et permet de développer et tester le projet sans licence Autodesk.

Un échec est un échec. Toute erreur remonte avec un code et un remède. Aucun succès n'est annoncé sans preuve d'exécution.


Related MCP server: AutoCAD MCP Pro

Installation

git clone https://github.com/bisingwaj/autocad-mcp
cd autocad-mcp

# Avec uv, recommandé
uv sync --extra render
uv sync --extra windows   # sous Windows, pour piloter AutoCAD

# Ou avec pip
pip install -e ".[render]"
pip install -e ".[render,windows]"   # sous Windows

Python 3.10 ou plus récent.


Configuration du client MCP

Sous Windows avec Cursor ou VS Code, suivez plutôt le guide pas à pas : docs/demarrage-windows.md. Il part d'une machine vierge, donne les deux formats de configuration, qui diffèrent, et commence par le mode DXF qui fonctionne sans AutoCAD.

Dans claude_desktop_config.json :

{
  "mcpServers": {
    "autocad-mcp": {
      "command": "uv",
      "args": ["--directory", "/chemin/vers/autocad-mcp", "run", "autocad-mcp"]
    }
  }
}

Le moteur se choisit tout seul : AutoCAD sous Windows, fichier DXF ailleurs. Variables d'environnement disponibles :

Variable

Effet

AUTOCAD_MCP_BACKEND

autocad, ezdxf ou recording

AUTOCAD_MCP_UNIT

mm, cm, m, in, ft

AUTOCAD_MCP_DXF

fichier DXF ouvert par le moteur DXF

AUTOCAD_MCP_LOG

niveau de journal, sur stderr

Sous Windows, AutoCAD doit être ouvert avec un dessin actif.


Les outils exposés

Outil

Rôle

get_drawing_info

document, unité, nombre d'entités, calques, capacités

query_entities

inspection filtrée, réponse toujours bornée

measure

résumé, longueurs, surfaces, nomenclature, proximité, fenêtre

check_plan

contours ouverts, croisements, doublons, résidus, jonctions

render_view

renvoie une image du dessin, à plat ou en volume

export_web_view

écrit une maquette navigable et l'ouvre dans le navigateur

draw

lot de primitives: ligne, polyligne, rectangle, cercle, arc, texte, hachure

build_structure

lot d'éléments: réseau de murs et ses baies, pièce, étiquette

place_blocks

insertion de symboles: sanitaires, électricité, mobilier

delete_entities

suppression filtrée, confirmation exigée si le filtre est vide

set_entity_color

changement de couleur

undo_last_batch

annulation du dernier lot

run_cad_command

passerelle AutoCAD, strictement sur liste blanche

Les murs se raccordent aux angles et les baies percent réellement la maçonnerie, ce qui rend les surfaces calculables et les contours hachurables.

La maquette navigable

export_web_view écrit à côté du dessin une page HTML autonome: on y tourne autour du bâtiment, on y entre pour marcher à hauteur d'œil, on coupe à n'importe quelle hauteur — ce qui redonne le plan d'architecte —, on éteint les calques, on déplace le soleil, et on mesure deux points en accrochant les sommets du modèle.

La page ne charge rien depuis le réseau: elle s'ouvre hors ligne, se copie sur une clé et s'envoie par courriel, ce qui permet de montrer un projet à quelqu'un qui n'a ni AutoCAD ni licence. Voir docs/visionneuse.md.

# sur un DXF déjà écrit, sans passer par le serveur
uv run python -m autocad_mcp.devtools.web_view plan.dxf

Exemples de demandes

  • « Dessine un studio de 7 sur 5 mètres avec une salle de bain à droite, une porte entre les deux et une fenêtre au nord. »

  • « Montre-moi le plan. » puis « La porte s'ouvre du mauvais côté, inverse-la. »

  • « Combien d'entités sur le calque WALLS ? »

  • « Supprime tout ce qui est sur le calque ANNOTATION. »


Développement

uv run pytest -q          # suite complète, passe sans AutoCAD
uv run ruff check src/ tests/
uv run mypy src/
uv run python -m autocad_mcp.devtools.contract_diff   # parité des moteurs

La suite tourne sur macOS, Linux et Windows. Les tests marqués windows exigent AutoCAD et sont sautés ailleurs.

Voir docs/architecture.md pour la conception, docs/visionneuse.md pour la maquette navigable, et docs/windows-checklist.md pour la validation du moteur AutoCAD sous Windows.


Licence et avertissement

Ce logiciel utilise l'automatisation locale permise par Autodesk mais n'est pas officiellement soutenu par Autodesk, Inc. Son usage suppose une installation légitime d'AutoCAD sous licence valide.

Available Tools

12 tools
build_structureConstruire un lot d'éléments de bâtimentA

Construit une LISTE d'éléments de bâtiment en un seul lot: réseaux de murs percés de leurs baies, murs isolés, portes, fenêtres, pièces et étiquettes.

À utiliser pour tout ce qui relève du plan d'architecture, de préférence à draw, qui ne connaît que la géométrie nue. Chaque élément est posé sur son calque normalisé, un mur épais est une polyligne fermée donc une entité unique et hachurable, et le battant d'une porte suit l'orientation de son mur porteur.

POUR LES MURS, UTILISEZ wall_network, et donnez-lui ses openings. C'est le seul élément qui raccorde les angles et qui perce réellement la maçonnerie; wall, wall_run, door_in_wall et window ne servent plus que pour un objet isolé ou un symbole posé sur un mur existant.

Toutes les longueurs omises prennent une valeur par défaut convertie dans l'unité du document: un mur de vingt centimètres reste un mur de vingt centimètres que le dessin soit en mètres ou en millimètres.

Les angles sont en DEGRÉS. La réponse porte les handles créés ET les échecs avec l'index de l'élément fautif. Vérifiez ensuite avec render_view.

Inputs: elements (required), label.

check_planVérifier le planA
Read-onlyIdempotent

Cherche les défauts qu'un dessin ne signale jamais de lui-même: contours qui ne se referment pas et refusent la hachure, murs qui se croisent en croix au lieu de se rejoindre, entités superposées en double, résidus de taille négligeable, extrémités qui se ratent d'un cheveu.

À appeler APRÈS un lot de construction et AVANT de livrer un plan: c'est ce qui vous permet de vous corriger seul. Chaque défaut est rendu avec sa gravité, sa localisation en coordonnées, les objets concernés et un remède en une phrase, directement exécutable.

CE QUI EST EXAMINÉ. Les entités du document, telles que le moteur les publie, donnent les doublons et les résidus. Les contours et les axes de murs, eux, doivent être FOURNIS dans contours et segments: le moteur ne publie que des boîtes englobantes, pas les sommets, et deviner une géométrie serait pire que l'avouer. Donnez-y les mêmes points que ceux passés à build_structure, c'est la vérification la plus utile.

Les seuils suivent l'unité du document: à l'échelle du mètre un écart d'un dixième de millimètre est une jonction, à l'échelle du millimètre c'est un trou. La réponse est bornée: le compte des défauts est exact, la liste est tronquée au-delà de 100 entrées.

Inputs: layer, contours, segments, tolerance, +1 more.

delete_entitiesSupprimer des entitésA
Destructive

DESTRUCTIF ET IRRÉVERSIBLE. Supprime toutes les entités correspondant au filtre et renvoie leurs handles. undo_last_batch ne restaure PAS ce que cet outil efface: il n'annule que des créations.

À utiliser pour retirer ce qui a été mal tracé quand undo_last_batch ne suffit plus, parce que d'autres lots sont venus par-dessus, ou pour nettoyer un calque entier.

Le filtre est unifié et ses critères se combinent par ET logique: calque, type, couleur, liste de handles, fenêtre rectangulaire. Pour supprimer précisément, passez d'abord par query_entities et supprimez par handles.

Un filtre VIDE désigne le dessin entier. Dans ce cas seulement, confirm_delete_all doit valoir true, sinon l'appel est refusé avec le code confirmation_required. Ne posez ce drapeau que si l'utilisateur a demandé d'effacer tout le dessin.

Inputs: type, color, layer, window, +2 more.

drawDessiner un lot de primitivesA

Trace une LISTE de primitives géométriques en un seul lot: segments, polylignes, rectangles, cercles, arcs, textes, paragraphes et hachures.

À utiliser dès qu'il y a plus d'une entité à tracer, ce qui est le cas presque toujours. Le lot forme une transaction unique: une seule marque d'annulation, un seul rafraîchissement d'affichage. Enchaîner des appels unitaires est plus lent et rend l'annulation impraticable.

Pour des éléments de bâtiment (murs, portes, fenêtres, pièces), utilisez build_structure: il pose les calques normalisés et la géométrie attendue d'un plan.

Les angles sont en DEGRÉS. Les longueurs sont dans l'unité du document, que get_drawing_info donne.

La réponse porte les DEUX côtés: les handles réellement créés, et les échecs éventuels avec l'index de l'élément fautif dans la liste fournie. Un lot partiellement exécuté n'est jamais annoncé comme un succès. Vérifiez ensuite avec render_view.

Inputs: operations (required), label.

get_drawing_infoÉtat du dessinA
Read-onlyIdempotent

Décrit le document courant: moteur utilisé, unité de longueur, nombre d'entités, liste des calques avec leur couleur et leur état, limites du dessin, et valeurs par défaut converties dans l'unité du document.

À appeler EN PREMIER, avant tout tracé: l'unité conditionne toutes les longueurs que vous allez donner ensuite, et la liste des calques évite d'en inventer un nouveau alors qu'il existe. À rappeler après avoir ouvert un autre document.

Inputs: no named parameters.

measureMesurer le dessinA
Read-onlyIdempotent

Mesure et résume le dessin sans l'énumérer. UN SEUL outil, dont le champ mode choisit la question:

  • summary: état des lieux complet — combien d'entités, sur quels calques, de quels types, entre quelles limites.

  • totals: longueur et surface cumulées.

  • by_layer / by_type: les mêmes quantités, réparties par calque ou par type.

  • quantities: la nomenclature, une ligne par couple calque/type.

  • nearest: les entités les plus proches d'un point, avec leur distance. Répond à « qu'y a-t-il ici ».

  • in_window: les entités d'une zone rectangulaire, au choix entièrement contenues ou simplement traversées.

À utiliser AVANT de modifier un dessin que vous n'avez pas produit, pour savoir ce qu'il contient sans rapatrier ses entités une à une, et APRÈS un lot pour vérifier des quantités. Pour voir le dessin plutôt que de le chiffrer, utilisez render_view; pour obtenir les handles d'entités précises, query_entities.

HONNÊTETÉ DES MESURES: longueurs et surfaces ne sont comptées que pour les entités dont le moteur les publie. Chaque mesure porte donc counted, missing et complete, et son total vaut null — et non zéro — quand aucune entité n'a répondu. Un total de zéro signifierait « rien ne mesure », ce qui est faux; null signifie « le moteur ne le dit pas ». Les comptes d'entités, eux, sont toujours exacts.

Inputs: mode, type, layer, limit, +3 more.

place_blocksPlacer des blocs de la bibliothèqueA

Insère une LISTE d'occurrences de symboles normalisés en un seul lot: porte, fenêtre, WC, lavabo, douche, évier, prise, interrupteur, point lumineux, lits, table, chaise.

À utiliser pour équiper et meubler un plan, une fois les murs posés par build_structure. Un seul appel place tous les objets d'un logement: n'enchaînez pas un appel par objet.

Ce que cet outil apporte sur un tracé équivalent fait avec draw: une occurrence de bloc reste liée à SA définition, donc corriger le symbole une fois corrige toutes ses occurrences; chaque occurrence porte un attribut de repère, donc les objets se comptent et se chiffrent; et chaque symbole va sur le calque de sa nature, un WC sur PLUMBING, une prise sur ELECTRICAL, une chaise sur FURNITURE.

LES DÉFINITIONS MANQUANTES SONT CRÉÉES AUTOMATIQUEMENT, il n'y a rien à préparer. Une définition déjà présente est conservée telle quelle: le même appel répété n'écrase jamais un symbole existant.

Chaque symbole a son repère local, décrit dans la description de sa clé. Ce qui se pose contre un mur — porte, fenêtre, WC, lavabo, prise — a le mur pour axe X et la pièce du côté des Y positifs: rotation_deg à 0 pose l'objet contre un mur horizontal, la pièce au-dessus. Les longueurs sont réelles et suivent l'unité du document. La réponse porte les handles créés ET les échecs avec l'index de l'élément fautif. Vérifiez ensuite avec render_view.

Inputs: blocks (required), label.

query_entitiesInspecter les entitésA
Read-onlyIdempotent

Liste les entités du dessin qui satisfont un filtre, avec leur handle, leur type, leur calque, leur couleur et leur boîte englobante.

À utiliser pour retrouver ce qui existe déjà avant de modifier ou de supprimer: les handles renvoyés ici sont le préalable obligatoire à set_entity_color et à une suppression par handles.

La réponse est TOUJOURS bornée. Elle donne le compte total des entités correspondantes ET un échantillon limité, avec un drapeau indiquant si elle a été tronquée. Un dessin de cinquante mille entités ne sera jamais déversé: affinez le filtre plutôt que d'augmenter la limite.

Pour voir le dessin plutôt que de l'énumérer, utilisez render_view.

Inputs: type, color, layer, limit, +2 more.

render_viewVoir le dessinA
Read-onlyIdempotent

Rend le dessin courant en image PNG et renvoie cette image dans la réponse, accompagnée du nombre d'entités et des limites du dessin.

À appeler APRÈS CHAQUE LOT D'ÉCRITURE. C'est le seul moyen de vérifier ce qui a réellement été tracé au lieu de faire confiance à un compte rendu: un mur peut être créé avec succès et se trouver au mauvais endroit, à la mauvaise échelle ou superposé à un autre. Sans regarder, vous dessinez à l'aveugle.

À appeler aussi avant de corriger un dessin existant, pour savoir ce qu'il contient.

Le cadrage est automatique et centré sur le contenu; un dessin vide rend une image vide, ce qui n'est pas une erreur. Exige un moteur capable de rendu: le backend DXF le fait, le backend AutoCAD non, puisque l'écran d'AutoCAD tient ce rôle.

Inputs: width, height.

run_cad_commandExécuter une commande AutoCADA
Destructive

DESTRUCTIF ET IRRÉVERSIBLE. Passerelle vers la ligne de commande d'AutoCAD: exécute une commande native du logiciel sur le dessin ouvert. undo_last_batch n'annule PAS ce que cette commande modifie, puisqu'elle n'est pas un lot de créations du serveur; seul l'annuler dans AutoCAD le peut.

À utiliser pour les transformations qu'AutoCAD sait déjà faire mieux qu'une réimplémentation: décaler un contour, ajuster ou prolonger des murs, raccorder deux traits, tracer un contour fermé autour d'un point. Commandes autorisées, et elles seules: ARRAY, BOUNDARY, CHAMFER, EXTEND, FILLET, HATCH, MIRROR, OFFSET, TRIM. Toute autre commande est refusée avec le code invalid_parameter et la liste ci-dessus: la liste blanche existe parce que transmettre une chaîne libre à un logiciel de CAO revient à exécuter du code arbitraire sur la machine de l'utilisateur.

INDISPONIBLE SUR LE BACKEND DXF, qui n'a pas d'interpréteur de commandes: l'appel échoue alors avec le code unsupported_operation, et c'est la situation normale hors d'un poste Windows où AutoCAD tourne. get_drawing_info dit dans can_run_commands si le moteur courant sait les exécuter: vérifiez-le avant de bâtir un plan là-dessus.

La commande est envoyée telle quelle: le dessin n'est pas relu pour vérifier ce qu'elle a fait. Regardez le résultat avec render_view.

Inputs: command (required), confirm_command (required), arguments.

set_entity_colorChanger la couleur d'entitésA

Change la couleur d'une ou plusieurs entités désignées par leur handle.

À utiliser pour corriger une entité posée sur le bon calque mais dans la mauvaise couleur, sans avoir à l'effacer puis à la redessiner.

Les handles s'obtiennent d'abord par query_entities, ou dans la réponse de draw et build_structure: ils ne se devinent pas.

Pour rendre une entité à la couleur de son calque, passez "bylayer", ce qui est la convention du dessin technique. L'index 0 est ByBlock et non noir; le noir est l'ACI 7, nommé "white".

Chaque handle est traité séparément: la réponse indique lesquels ont été modifiés et lesquels ont échoué, avec la raison.

Inputs: color (required), handles (required).

undo_last_batchAnnuler le dernier lotA
Destructive

Annule le dernier lot d'écriture, c'est-à-dire le dernier appel à draw ou à build_structure, en supprimant les entités qu'il a créées.

À utiliser dès qu'un lot s'avère faux après l'avoir regardé avec render_view: c'est plus sûr que de supprimer à la main et cela ramène le dessin exactement à son état précédent.

Portée limitée, à connaître avant d'y compter: seules les CRÉATIONS sont annulées. Une couleur changée par set_entity_color et une entité supprimée par delete_entities ne sont pas restaurées. Les appels successifs dépilent les lots du plus récent au plus ancien; sans lot à annuler, l'appel échoue au lieu de ne rien faire silencieusement.

Inputs: no named parameters.

Tool Schema Changelog

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

Loading tool schema changelog…

    TDQS

    A4.4/5.0

    Scored across 12 tools

    Disambiguation4/5

    Most tools have clearly distinct purposes, and the descriptions explicitly disambiguate the three batch-write tools (draw for raw geometry, build_structure for architectural elements, place_blocks for symbols) and the three read tools (get_drawing_info, query_entities, measure). The main residual overlap is among the write/creation tools, which an agent must read carefully to pick correctly, but the guidance is strong enough to avoid misselection.

    Naming Consistency4/5

    Names follow a mostly predictable verb_noun pattern (get_drawing_info, query_entities, set_entity_color, delete_entities, build_structure, place_blocks, undo_last_batch, run_cad_command). A few deviate with single bare verbs (draw, measure) or verb_noun phrasing that doesn't fit the resource-action mold (render_view, check_plan), but the overall convention is readable and consistent.

    Tool Count5/5

    12 tools is well-scoped for a CAD server spanning read, write, modify, validate, and render operations. Each tool earns its place, and related actions are consolidated into batches or single multi-mode tools (measure) rather than exploding the count.

    Completeness4/5

    The surface covers the full lifecycle well: document inspection, entity querying, measurement, rendering, batch creation at three abstraction levels, color editing, deletion, undo, and validation via check_plan. The notable gap is direct transformation of existing entities (move/rotate/scale/copy), which is only reachable through the limited native run_cad_command whitelist or full delete-and-redraw.

    Related MCP Connectors

    Related MCP Servers

    • F
      license
      A
      quality
      B
      maintenance
      Enables AI assistants to draw, edit, inspect, and manage CAD drawings through a consistent API, either headlessly without a CAD installation or by driving a live Windows session. It supports documents, layers, entities, transforms, hatching, dimensions, blocks, architectural workflow tools, and optional previews.
      43
      -
    • F
      license
      Not graded
      quality
      A
      maintenance
      Enables AI agents to author, read, critique, and validate production CAD drawings through 247 typed tools spanning mechanical parts, architectural plans, P&IDs, takeoffs, and ISO GD&T / dimension-tolerance checks. It drives live AutoCAD over COM on Windows or runs headlessly anywhere via ezdxf, with pack and discovery modes to keep the advertised tool surface cheap.
      -
    • F
      license
      Not graded
      quality
      A
      maintenance
      Enables AI agents to author, edit, read back, and validate AutoCAD drawings — including ISO-compliant mechanical sheets, architectural floor plans, and P&ID diagrams with dimensions, GD&T, and takeoffs — either live through COM on Windows or headlessly through ezdxf on any platform. It also exposes tool packs, discovery search, and drawing-critique checks so agents can work without paying the full catalog's idle token cost.
      -
    • F
      license
      Not graded
      quality
      A
      maintenance
      Enables AI agents to author and edit production CAD drawings — mechanical parts, architectural plans, P&IDs, ISO-compliant dimensions, tolerances and title blocks — either live in AutoCAD through COM on Windows or headlessly via ezdxf anywhere. It also reads existing drawings back to support understanding, critique, topology checks and quantity takeoffs.
      -