Un CAD guidato dall’IA: cos’è MCP e come usarlo con LinceCAD
L’interfaccia del programma e la guida sono disponibili in inglese e in spagnolo. I comandi e le opzioni sono riportati qui come nella versione inglese del programma.
Gli assistenti di IA non si limitano più a rispondere alle domande: possono anche usare programmi, se il programma offre loro un modo per farlo. Quel modo è, sempre più spesso, MCP. LinceCAD include un server MCP, così un assistente può aprire un DWG, interrogarlo, disegnare, quotare e salvare mentre tu decidi quali modifiche può fare. Questo articolo spiega cos’è MCP, cosa permette esattamente il server di LinceCAD e com’è una sessione reale.
Cos’è MCP
Il Model Context Protocol è un protocollo aperto, pubblicato da Anthropic nel novembre 2024, per collegare applicazioni di IA a programmi e dati. Ha due lati:
- Il client è l’applicazione di IA: Claude Desktop, Claude Code o un’altra che supporti MCP.
- Il server è il programma che si lascia guidare. Dichiara strumenti (azioni con parametri), risorse (dati leggibili) e prompt (istruzioni pronte per attività comuni).
I messaggi sono JSON-RPC 2.0 e viaggiano su input e output standard (il client avvia il server) o su HTTP. Il modello di IA sceglie quale strumento chiamare e con quali dati; il client esegue la chiamata e gli restituisce il risultato. Il server non ha bisogno di sapere quale modello c’è dall’altra parte.
Cosa permette il server MCP di LinceCAD
Il server si avvia con lince --mcp e comunica su input e output standard. Con LinceCAD aperto si può
attivare anche un server MCP su HTTP, solo su 127.0.0.1. Supporta le versioni del protocollo
2025-06-18, 2025-03-26 e 2024-11-05 e offre 23 strumenti:
| Per | Strumenti |
|---|---|
| Disegni | list_drawings, open_drawing, new_drawing, save_drawing, drawing_summary |
| Interrogare | query_entities, get_entity, list_layers, list_blocks, list_block_library, get_variable, capture_view |
| Modificare | create_entities, modify_entity, delete_entities, manage_layer, set_variable, add_dimension, insert_block |
| Comandi e AutoLISP | run_command, eval_lisp |
| Output e controllo | plot_pdf, undo |
Alcuni dettagli che contano nella pratica:
capture_viewrestituisce un’immagine PNG della vista, così l’assistente può vedere il disegno e controllare ciò che ha disegnato.run_commandesegue qualsiasi comando con le sue risposte, con il nome inglese preceduto da un trattino basso (_LINE,_DIMLINEAR), che funziona in qualsiasi lingua.- Ogni strumento è marcato come di sola lettura o distruttivo, perché il client sappia per quali chiedere conferma.
- Le risorse danno il riepilogo, le entità, i layer, i blocchi e le variabili di ogni disegno
aperto (
lince://drawing/{id}/summary…), e le pagine della guida di LinceCAD in inglese e spagnolo (lince://help/{lang}/{id}) come documentazione per l’assistente. - Ci sono tre prompt:
review_drawing(rivedere il disegno senza modificarlo),dimension_floor_plan(quotare una pianta) eclean_layers(proporre una pulizia dei layer e attendere conferma).
Come collegarlo
Claude Desktop, in %APPDATA%\Claude\claude_desktop_config.json:
{
"mcpServers": {
"lince": { "command": "C:\\Program Files\\lince\\lince.exe", "args": ["--mcp"] }
}
}
Claude Code, senza finestra e in un progetto:
claude mcp add --scope project lince -- "C:\Program Files\lince\lince.exe" --mcp
Con LinceCAD aperto: in OPTIONS, scheda Automation, consenti
l’automazione e attiva il server MCP su HTTP. Il token (la password che presentano i client) è in
api.toml, in %APPDATA%\lince su Windows o ~/.config/lince su Linux:
claude mcp add --transport http lince http://127.0.0.1:7341/mcp --header "Authorization: Bearer <token>"
Qualsiasi altro client MCP che avvii un server su input e output standard si configura allo stesso modo: il comando
è lince.exe e l’argomento, --mcp.
Un esempio reale
Per vedere cosa succede sotto, abbiamo fatto noi da client con uno script Python, senza IA di mezzo: avvia
lince.exe --mcp, si presenta, chiede l’elenco degli strumenti e fa le chiamate che farebbe un assistente
davanti a una richiesta come «crea il layer MUROS (muri) in rosso, disegna un rettangolo di 8 × 5 m, quota il lato
inferiore e salvalo come planta.dwg». Le coordinate sono in millimetri, e il layer della quota è 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()
Questo è l’output reale con LinceCAD 0.9.8-rc3 (abbiamo solo sostituito il percorso del file salvato con quello dell’esempio; il nome predefinito del disegno è in spagnolo perché il programma girava in spagnolo):
{'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"}
Il riepilogo conferma ciò che è stato chiesto: una polilinea sul layer MUROS, una quota su COTAS e tre layer in
totale (lo 0 e i due nuovi). add_dimension crea la quota eseguendo DIMLINEAR, lo stesso
comando che useresti a mano. Nei test di sviluppo, Claude Code ha fatto da client reale: ha creato un cerchio e una
linea e ha letto il riepilogo del disegno.
Cosa controlla l’utente
- Approvazione delle modifiche. Con LinceCAD aperto e la conferma attivata, ogni modifica chiesta
dall’assistente attende nella palette
AIACTIONSfinché non premi Accept o Reject. Accept all in this session smette di chiedere fino alla chiusura del programma. Le letture non vengono chieste. - Un passo di annullamento per chiamata. Tutto ciò che una chiamata modifica si annulla con un solo
UNDO, e l’assistente ha il suo strumentoundo. - Sola lettura e cartelle consentite. In
OPTIONSpuoi impedire qualsiasi modifica o limitare le cartelle in cui si apre, si salva e si stampa. Senza finestra (--mcp) non si chiede nulla, ma questi due limiti restano validi. - Registro. La palette conserva le ultime 500 chiamate, con l’ora e l’eventuale errore.
- Tutto in locale. LinceCAD non invia nulla fuori dal computer. Tieni presente, però, che ciò che l’assistente legge (riepiloghi, entità, catture) arriva al servizio di IA usato dal tuo client, secondo le sue condizioni.
Limiti
- Le entità si creano e si interrogano nello spazio modello. Il colore vero si legge, ma non si scrive.
eval_lispfallisce se la routine chiede dati all’utente (getpoint,entsel…).- Il server HTTP non conserva la sessione MCP tra le richieste. Su Linux,
lince --mcpha bisogno di una sessione grafica (o dixvfb-run). - L’assistente può sbagliare: rivedi le modifiche prima di accettarle e lavora su copie finché LinceCAD è in beta.
Domande frequenti
Devo saper programmare? Non per MCP: configuri il client una volta e dai le istruzioni in linguaggio normale.
Dov’è il riferimento completo? Nel tema Automation (API and MCP) del manuale (in inglese).
È un’alternativa ad AutoCAD LT? Dipende dal tuo lavoro; lo vediamo in LinceCAD o AutoCAD LT.
Il server MCP, l’API locale e AutoLISP sono inclusi in LinceCAD, con licenza perpetua. Download · Vedi i prezzi · Automazione e tutte le altre funzioni.