Une CAO pilotée par une IA : ce qu’est MCP et comment l’utiliser avec LinceCAD
L’interface du logiciel et son aide sont disponibles en anglais et en espagnol. Les commandes et les options sont données ici telles qu’elles apparaissent dans la version anglaise du logiciel.
Les assistants d’IA ne se contentent plus de répondre aux questions : ils peuvent aussi utiliser des logiciels, si le logiciel leur en donne le moyen. Ce moyen est, de plus en plus souvent, MCP. LinceCAD intègre un serveur MCP : un assistant peut ouvrir un DWG, l’interroger, dessiner, coter et enregistrer pendant que vous décidez des modifications qu’il peut faire. Cet article explique ce qu’est MCP, ce que permet exactement le serveur de LinceCAD et à quoi ressemble une session réelle.
Qu’est-ce que MCP
Le Model Context Protocol est un protocole ouvert, publié par Anthropic en novembre 2024, pour relier des applications d’IA à des logiciels et à des données. Il a deux côtés :
- Le client est l’application d’IA : Claude Desktop, Claude Code ou une autre qui prend en charge MCP.
- Le serveur est le logiciel qui se laisse piloter. Il déclare des outils (actions avec paramètres), des ressources (données lisibles) et des prompts (instructions préparées pour des tâches courantes).
Les messages sont en JSON-RPC 2.0 et passent par l’entrée et la sortie standard (le client démarre le serveur) ou par HTTP. Le modèle d’IA choisit quel outil appeler et avec quelles données ; le client fait l’appel et lui renvoie le résultat. Le serveur n’a pas besoin de savoir quel modèle se trouve de l’autre côté.
Ce que permet le serveur MCP de LinceCAD
Le serveur se lance avec lince --mcp et communique par l’entrée et la sortie standard. Avec LinceCAD
ouvert, on peut aussi activer un serveur MCP par HTTP, uniquement sur 127.0.0.1. Il prend en charge les
versions du protocole 2025-06-18, 2025-03-26 et 2024-11-05, et propose 23 outils :
| Pour | Outils |
|---|---|
| Dessins | list_drawings, open_drawing, new_drawing, save_drawing, drawing_summary |
| Interroger | query_entities, get_entity, list_layers, list_blocks, list_block_library, get_variable, capture_view |
| Modifier | create_entities, modify_entity, delete_entities, manage_layer, set_variable, add_dimension, insert_block |
| Commandes et AutoLISP | run_command, eval_lisp |
| Sortie et contrôle | plot_pdf, undo |
Quelques détails qui comptent en pratique :
capture_viewrenvoie une image PNG de la vue : l’assistant peut voir le dessin et vérifier ce qu’il a tracé.run_commandlance n’importe quelle commande avec ses réponses, sous son nom anglais précédé d’un tiret bas (_LINE,_DIMLINEAR), ce qui fonctionne dans toutes les langues.- Chaque outil est marqué en lecture seule ou destructif, pour que le client sache lesquels faire confirmer.
- Les ressources donnent le résumé, les entités, les calques, les blocs et les variables de chaque
dessin ouvert (
lince://drawing/{id}/summary…), ainsi que les pages d’aide de LinceCAD en anglais et en espagnol (lince://help/{lang}/{id}) comme documentation pour l’assistant. - Il y a trois prompts :
review_drawing(relire le dessin sans le modifier),dimension_floor_plan(coter un plan d’étage) etclean_layers(proposer un nettoyage des calques et attendre la confirmation).
Comment le connecter
Claude Desktop, dans %APPDATA%\Claude\claude_desktop_config.json :
{
"mcpServers": {
"lince": { "command": "C:\\Program Files\\lince\\lince.exe", "args": ["--mcp"] }
}
}
Claude Code, sans fenêtre et dans un projet :
claude mcp add --scope project lince -- "C:\Program Files\lince\lince.exe" --mcp
Avec LinceCAD ouvert : dans OPTIONS, onglet Automation, autorisez
l’automatisation et activez le serveur MCP par HTTP. Le jeton (le mot de passe que présentent les clients) se trouve
dans api.toml, dans %APPDATA%\lince sous Windows ou ~/.config/lince sous
Linux :
claude mcp add --transport http lince http://127.0.0.1:7341/mcp --header "Authorization: Bearer <jeton>"
Tout autre client MCP qui démarre un serveur par l’entrée et la sortie standard se configure de la même façon : la
commande est lince.exe et l’argument, --mcp.
Un exemple réel
Pour voir ce qui se passe en dessous, nous avons joué le rôle du client avec un script Python, sans IA : il démarre
lince.exe --mcp, se présente, demande la liste des outils et fait les appels qu’un assistant ferait pour
une demande comme « crée le calque MUROS (murs) en rouge, dessine un rectangle de 8 × 5 m, cote le côté du bas et
enregistre-le sous planta.dwg ». Les coordonnées sont en millimètres, et le calque de la cote est COTAS.
import json, subprocess
lince = subprocess.Popen([r"C:\Program Files\lince\lince.exe", "--mcp"],
stdin=subprocess.PIPE, stdout=subprocess.PIPE)
n = 0
def send(method, params=None, notify=False):
global n
msg = {"jsonrpc": "2.0", "method": method, "params": params or {}}
if not notify:
n += 1
msg["id"] = n
lince.stdin.write((json.dumps(msg) + "\n").encode())
lince.stdin.flush()
return None if notify else json.loads(lince.stdout.readline())["result"]
def tool(tool_name, /, **args):
r = send("tools/call", {"name": tool_name, "arguments": args})
return r["content"][0]["text"]
info = send("initialize", {"protocolVersion": "2025-06-18", "capabilities": {},
"clientInfo": {"name": "blog", "version": "1"}})
send("notifications/initialized", notify=True)
print(info["serverInfo"])
print(len(send("tools/list")["tools"]), "tools")
tool("manage_layer", action="create", name="MUROS", color=1)
print(tool("create_entities", entities=[{"type": "LWPOLYLINE", "layer": "MUROS", "closed": True,
"vertices": [[0, 0], [8000, 0], [8000, 5000], [0, 5000]]}]))
tool("add_dimension", kind="linear", points=[[0, 0], [8000, 0]],
textPosition=[4000, -800], layer="COTAS")
print(tool("drawing_summary"))
print(tool("save_drawing", path=r"C:\planos\planta.dwg"))
lince.stdin.close()
lince.wait()
Voici la sortie réelle avec LinceCAD 0.9.8-rc3 (nous avons seulement remplacé le chemin du fichier enregistré par celui de l’exemple ; le nom par défaut du dessin est en espagnol parce que le logiciel tournait en espagnol) :
{'name': 'lince', 'title': 'LinceCAD', 'version': '0.9.8-rc3'}
23 tools
{"handles":["51"]}
{"document":{"id":1,"name":"Dibujo1.dwg","path":null,"modified":true,"active":true,"version":"AC1032","entities":2},"extents":[[0.0,-801.25],[8000.0,5000.0]],"units":0,"byType":{"DIMENSION":1,"LWPOLYLINE":1},"byLayer":{"COTAS":1,"MUROS":1},"layers":3,"blocks":0,"currentLayer":"COTAS"}
{"path":"C:\\planos\\planta.dwg","version":"AC1032"}
Le résumé confirme ce qui a été demandé : une polyligne sur le calque MUROS, une cote sur COTAS et trois calques au
total (le 0 et les deux nouveaux). add_dimension crée la cote en lançant DIMLINEAR, la même
commande que vous utiliseriez à la main. Lors des tests de développement, Claude Code a servi de vrai client : il a
créé un cercle et une ligne et lu le résumé du dessin.
Ce que contrôle l’utilisateur
- Validation des modifications. Avec LinceCAD ouvert et la confirmation activée, chaque
modification demandée par l’assistant attend dans la palette
AIACTIONSjusqu’à ce que vous cliquiez sur Accept ou Reject. Accept all in this session cesse de demander jusqu’à la fermeture du logiciel. Les lectures ne sont pas soumises à validation. - Une étape d’annulation par appel. Tout ce que modifie un appel s’annule avec un seul
UNDO, et l’assistant dispose de son propre outilundo. - Lecture seule et dossiers autorisés. Dans
OPTIONS, vous pouvez bloquer toute modification ou limiter les dossiers où l’on ouvre, enregistre et trace. Sans fenêtre (--mcp), rien n’est demandé, mais ces deux limites s’appliquent. - Journal. La palette conserve les 500 derniers appels, avec l’heure et l’erreur éventuelle.
- Tout en local. LinceCAD n’envoie rien hors de l’ordinateur. Gardez toutefois à l’esprit que ce que lit l’assistant (résumés, entités, captures) parvient au service d’IA qu’utilise votre client, selon ses conditions.
Limites
- Les entités se créent et s’interrogent dans l’espace objet. La couleur vraie se lit mais ne s’écrit pas.
eval_lispéchoue si la routine demande des données à l’utilisateur (getpoint,entsel…).- Le serveur HTTP ne conserve pas la session MCP entre les requêtes. Sous Linux,
lince --mcpa besoin d’une session graphique (ou dexvfb-run). - L’assistant peut se tromper : vérifiez les modifications avant de les accepter et travaillez sur des copies tant que LinceCAD est en bêta.
Questions fréquentes
Faut-il savoir programmer ? Pas pour MCP : vous configurez le client une fois et vous donnez les instructions en langage courant.
Où se trouve la référence complète ? Dans le thème Automation (API and MCP) du manuel (en anglais).
Est-ce une alternative à AutoCAD LT ? Cela dépend de votre travail ; nous le passons en revue dans LinceCAD ou AutoCAD LT.
Le serveur MCP, l’API locale et AutoLISP sont inclus dans LinceCAD, en licence perpétuelle. Téléchargement · Voir les tarifs · Automatisation et toutes les fonctions.