Vai al contenuto

← Blog

Un CAD guidato dall’IA: cos’è MCP e come usarlo con LinceCAD

· Guide

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:

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:

PerStrumenti
Disegnilist_drawings, open_drawing, new_drawing, save_drawing, drawing_summary
Interrogarequery_entities, get_entity, list_layers, list_blocks, list_block_library, get_variable, capture_view
Modificarecreate_entities, modify_entity, delete_entities, manage_layer, set_variable, add_dimension, insert_block
Comandi e AutoLISPrun_command, eval_lisp
Output e controlloplot_pdf, undo

Alcuni dettagli che contano nella pratica:

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

Limiti

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.