Um CAD que uma IA pode operar: o que é MCP e como usá-lo com o LinceCAD
A interface do programa e a ajuda estão disponíveis em inglês e espanhol. Os comandos e as opções aparecem aqui como na versão em inglês do programa.
Os assistentes de IA já não só respondem perguntas: também podem usar programas, se o programa lhes oferecer uma forma de fazê-lo. Essa forma é, cada vez mais, o MCP. O LinceCAD traz um servidor MCP, de modo que um assistente pode abrir um DWG, consultá-lo, desenhar, cotar e salvar enquanto você decide quais mudanças ele pode fazer. Este artigo explica o que é o MCP, o que exatamente o servidor do LinceCAD permite e como é uma sessão real.
O que é o MCP
O Model Context Protocol é um protocolo aberto, publicado pela Anthropic em novembro de 2024, para conectar aplicativos de IA a programas e dados. Tem dois lados:
- O cliente é o aplicativo de IA: Claude Desktop, Claude Code ou outro que suporte MCP.
- O servidor é o programa que se deixa operar. Ele declara ferramentas (ações com parâmetros), recursos (dados que podem ser lidos) e prompts (instruções prontas para tarefas comuns).
As mensagens são JSON-RPC 2.0 e trafegam pela entrada e saída padrão (o cliente inicia o servidor) ou por HTTP. O modelo de IA escolhe qual ferramenta chamar e com quais dados; o cliente faz a chamada e devolve o resultado. O servidor não precisa saber qual modelo está do outro lado.
O que o servidor MCP do LinceCAD permite
O servidor inicia com lince --mcp e se comunica pela entrada e saída padrão. Com o LinceCAD aberto,
também é possível ativar um servidor MCP por HTTP, somente em 127.0.0.1. Suporta as versões do
protocolo 2025-06-18, 2025-03-26 e 2024-11-05 e oferece 23 ferramentas:
| Para | Ferramentas |
|---|---|
| Desenhos | list_drawings, open_drawing, new_drawing, save_drawing, drawing_summary |
| Consultar | query_entities, get_entity, list_layers, list_blocks, list_block_library, get_variable, capture_view |
| Alterar | create_entities, modify_entity, delete_entities, manage_layer, set_variable, add_dimension, insert_block |
| Comandos e AutoLISP | run_command, eval_lisp |
| Saída e controle | plot_pdf, undo |
Alguns detalhes que importam na prática:
capture_viewdevolve uma imagem PNG da vista, então o assistente pode ver o desenho e conferir o que desenhou.run_commandexecuta qualquer comando com suas respostas, usando o nome em inglês precedido de sublinhado (_LINE,_DIMLINEAR), que funciona em qualquer idioma.- Cada ferramenta é marcada como somente leitura ou destrutiva, para que o cliente saiba quais deve confirmar.
- Os recursos dão o resumo, as entidades, as camadas, os blocos e as variáveis de cada desenho
aberto (
lince://drawing/{id}/summary…), e as páginas de ajuda do LinceCAD em inglês e espanhol (lince://help/{lang}/{id}) como documentação para o assistente. - Há três prompts:
review_drawing(revisar o desenho sem alterá-lo),dimension_floor_plan(cotar uma planta) eclean_layers(propor uma limpeza de camadas e esperar confirmação).
Como conectá-lo
Claude Desktop, em %APPDATA%\Claude\claude_desktop_config.json:
{
"mcpServers": {
"lince": { "command": "C:\\Program Files\\lince\\lince.exe", "args": ["--mcp"] }
}
}
Claude Code, sem janela e em um projeto:
claude mcp add --scope project lince -- "C:\Program Files\lince\lince.exe" --mcp
Com o LinceCAD aberto: em OPTIONS, aba Automation, permita a
automação e ative o servidor MCP por HTTP. O token (a senha que os clientes apresentam) está em
api.toml, em %APPDATA%\lince no Windows ou ~/.config/lince no Linux:
claude mcp add --transport http lince http://127.0.0.1:7341/mcp --header "Authorization: Bearer <token>"
Qualquer outro cliente MCP que inicie um servidor pela entrada e saída padrão se configura da mesma forma: o
comando é lince.exe e o argumento, --mcp.
Um exemplo real
Para ver o que acontece por baixo, fizemos o papel de cliente com um script em Python, sem IA no meio: ele inicia o
lince.exe --mcp, se apresenta, pede a lista de ferramentas e faz as chamadas que um assistente faria
diante de um pedido como “crie a camada MUROS (paredes) em vermelho, desenhe um retângulo de 8 × 5 m, cote o lado de
baixo e salve como planta.dwg”. As coordenadas estão em milímetros, e a camada da cota é 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()
Esta é a saída real com o LinceCAD 0.9.8-rc3 (só trocamos o caminho do arquivo salvo pelo do exemplo; o nome padrão do desenho está em espanhol porque o programa rodou em espanhol):
{'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"}
O resumo confirma o que foi pedido: uma polilinha na camada MUROS, uma cota em COTAS e três camadas no total (a 0 e
as duas novas). add_dimension cria a cota executando DIMLINEAR, o mesmo comando que você
usaria à mão. Nos testes de desenvolvimento, o Claude Code atuou como cliente real: criou um círculo e uma linha e
leu o resumo do desenho.
O que o usuário controla
- Aprovação de mudanças. Com o LinceCAD aberto e a confirmação ativada, cada mudança que o
assistente pede espera na paleta
AIACTIONSaté você clicar em Accept ou Reject. Accept all in this session para de perguntar até fechar o programa. As leituras não são perguntadas. - Um passo de desfazer por chamada. Tudo o que uma chamada altera se desfaz com um único
UNDO, e o assistente tem sua própria ferramentaundo. - Somente leitura e pastas permitidas. Em
OPTIONSvocê pode impedir qualquer mudança ou limitar as pastas onde se abre, se salva e se plota. Sem janela (--mcp) nada é perguntado, mas esses dois limites continuam valendo. - Registro. A paleta guarda as últimas 500 chamadas, com a hora e o erro, se houver.
- Tudo local. O LinceCAD não envia nada para fora do computador. Lembre-se, porém, de que o que o assistente lê (resumos, entidades, capturas) chega ao serviço de IA que seu cliente usa, conforme as condições dele.
Limitações
- As entidades são criadas e consultadas no espaço modelo. A cor verdadeira é lida, mas não escrita.
eval_lispfalha se a rotina pedir dados ao usuário (getpoint,entsel…).- O servidor HTTP não guarda a sessão MCP entre requisições. No Linux,
lince --mcpprecisa de uma sessão gráfica (ouxvfb-run). - O assistente pode errar: revise as mudanças antes de aceitá-las e trabalhe sobre cópias enquanto o LinceCAD estiver em beta.
Perguntas frequentes
Preciso saber programar? Não para o MCP: você configura o cliente uma vez e dá as instruções em linguagem comum.
Onde está a referência completa? No tema Automation (API and MCP) do manual (em inglês).
Serve como alternativa ao AutoCAD LT? Depende do seu trabalho; repassamos isso em LinceCAD ou AutoCAD LT.
O servidor MCP, a API local e o AutoLISP vêm no LinceCAD, com licença perpétua. Download · Ver preços · Automação e as demais funções.