Ir para o conteúdo

← Blog

Um CAD que uma IA pode operar: o que é MCP e como usá-lo com o LinceCAD

· Guias

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:

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:

ParaFerramentas
Desenhoslist_drawings, open_drawing, new_drawing, save_drawing, drawing_summary
Consultarquery_entities, get_entity, list_layers, list_blocks, list_block_library, get_variable, capture_view
Alterarcreate_entities, modify_entity, delete_entities, manage_layer, set_variable, add_dimension, insert_block
Comandos e AutoLISPrun_command, eval_lisp
Saída e controleplot_pdf, undo

Alguns detalhes que importam na prática:

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

Limitações

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.