Skip to main content
Glama
cristoferlabs

AutoCAD MCP Server

README.md
# AutoCAD MCP Server

> **Estado / Status:** En proceso de mejora de rendimiento — work in progress.
> Las funcionalidades principales funcionan, pero se siguen optimizando la velocidad y estabilidad.

Servidor **MCP (Model Context Protocol)** que conecta **Claude** (u otro cliente compatible con MCP) directamente con **AutoCAD**, permitiendo generar planos arquitectónicos, dibujar geometría y exportar archivos DXF con solo describir lo que necesitas en lenguaje natural.

An **MCP server** that bridges **Claude** (or any MCP-compatible AI) with **AutoCAD**, enabling you to generate architectural floor plans, draw geometry, and export DXF files just by describing what you need in natural language.

---

## ¿Qué hace? / What does it do?

```
Claude / AI  →  "Diseña una vivienda de 120 m² para 4 personas"
                       │
                       ▼
              MCP AutoCAD Server
                       │
           ┌───────────┴────────────┐
           ▼                        ▼
    Exporta DXF              Dibuja en AutoCAD
 (sin AutoCAD abierto)     (COM — Windows, opcional)
~/Documents/AutocadMCP/output/
```

- Interpreta un brief arquitectónico en lenguaje natural
- Aplica reglas de construcción (mínimos RNE Perú / normativa general)
- Genera geometría (muros, puertas, ventanas, mobiliario)
- Exporta a **DXF** (compatible con AutoCAD, Revit, FreeCAD, cualquier visor CAD)
- Controla **AutoCAD** directamente via COM (Windows, AutoCAD completo requerido)

---

## Requisitos / Requirements

| Componente | Versión mínima |
|-----------|----------------|
| Windows | 10 / 11 |
| Python | 3.10+ |
| AutoCAD | 2018+ (completo, **no LT**) — *solo para integración COM directa* |
| ngrok / Cloudflare Tunnel | cualquier versión — *solo para Claude.ai web* |

> La exportación a DXF funciona **sin AutoCAD** instalado.
> AutoCAD solo es necesario para dibujar directamente en él (herramientas `draw_*`, `batch_execute`, etc.).

---

## Instalación / Installation

```powershell
# 1. Clona el repositorio
git clone https://github.com/dtocjao/MCP---Autocad.git
cd MCP---Autocad

# 2. Crea el entorno virtual
python -m venv .venv
.\.venv\Scripts\Activate.ps1

# 3. Instala dependencias
pip install -e .
```

**Dependencias instaladas automáticamente:**
- `mcp[cli]` — protocolo MCP (FastMCP)
- `pywin32` — integración COM con AutoCAD (Windows)
- `ezdxf` — generación de archivos DXF

---

## Cómo ejecutar / How to run

### Opción A — Claude Desktop (modo local, stdio)

Edita el archivo de configuración de Claude Desktop:
- Windows: `%APPDATA%\Claude\claude_desktop_config.json`

```json
{
  "mcpServers": {
    "autocad": {
      "command": "C:\\RUTA\\AL\\PROYECTO\\MCP---Autocad\\.venv\\Scripts\\python.exe",
      "args": ["-m", "autocad_mcp.server"]
    }
  }
}
```

Reemplaza `C:\\RUTA\\AL\\PROYECTO\\` con la ruta real donde clonaste el repo.  
Reinicia Claude Desktop. El servidor `autocad` aparecerá en la lista de herramientas.

> Ver [`claude_desktop_config.example.json`](claude_desktop_config.example.json) como referencia.

---

### Opción B — Claude.ai web (modo HTTP remoto con ngrok)

Claude en la web requiere una URL HTTPS pública. Sigue estos pasos:

**1. Abre AutoCAD** (si vas a usar la integración directa con AutoCAD).

**2. Inicia el servidor HTTP:**

```cmd
scripts\start_for_claude.bat
```

O con PowerShell:
```powershell
powershell -ExecutionPolicy Bypass -File .\scripts\start_for_claude.ps1
```

Esto levanta el servidor en el puerto `8765`.

**3. Expón el puerto con ngrok** (en otra terminal):

```powershell
ngrok http 8765
```

Descarga ngrok en [ngrok.com/download](https://ngrok.com/download) si no lo tienes.

**4. Copia la URL HTTPS** que muestra ngrok, por ejemplo:
```
https://a1b2c3d4.ngrok-free.app
```

**5. En Claude.ai → Añadir conector personalizado:**

| Campo | Valor |
|-------|-------|
| Nombre | `Autocad` |
| URL del servidor MCP remoto | `https://a1b2c3d4.ngrok-free.app/mcp` |
| OAuth Client ID | *(dejar vacío)* |
| Secreto OAuth | *(dejar vacío)* |

**6.** Prueba con: *"Usa draw_bedroom_plan para crear un dormitorio de 20 m²"*

> La URL de ngrok cambia cada vez que lo reinicias (plan gratuito). Elimina y vuelve a añadir el conector si cambia.

#### Alternativa: Cloudflare Tunnel

```powershell
cloudflared tunnel --url http://localhost:8765
```

Usa la URL pública con el sufijo `/mcp`.

---

## Herramientas disponibles / Available tools

### Arquitectónicas (generan DXF + pueden dibujar en AutoCAD)

| Herramienta | Descripción |
|-------------|-------------|
| `get_project_schema_template` | Devuelve plantilla JSON completa (Niveles 1–8) |
| `create_architectural_project` | **Herramienta principal** — JSON → geometría → DXF → (AutoCAD) |
| `analyze_client_requirements` | Brief en texto → JSON estructurado + distribución sugerida |
| `create_floor_plan` | Vivienda completa → DXF (por área, habitaciones, baños) |
| `create_bedroom_suite` | Suite con cama, vestidor, baño, terraza → DXF |
| `validate_building_code` | Valida geometría contra mínimos de construcción |
| `export_dxf` | Geometría JSON → archivo DXF |
| `push_floor_plan_to_autocad` | Geometría JSON → dibuja en AutoCAD |
| `get_architecture_rules_reference` | Dimensiones mínimas por tipo de estancia |

### CAD directas (AutoCAD COM, requiere AutoCAD abierto)

| Herramienta | Descripción |
|-------------|-------------|
| `draw_bedroom_plan` | Dormitorio completo en 1 llamada (paredes, puerta, ventana, muebles) |
| `batch_execute` | Ejecuta muchas operaciones en 1 llamada |
| `execute_command` | Comando de línea de AutoCAD |
| `execute_lisp` / `execute_lisp_safe` | Expresión AutoLISP |
| `draw_line` | Línea entre dos puntos |
| `draw_circle` | Círculo |
| `draw_rectangle` | Rectángulo |
| `draw_polyline` | Polilínea |
| `draw_arc` | Arco |
| `draw_text` | Texto |
| `create_layer` / `set_current_layer` | Gestión de capas |
| `get_status` / `ensure_autocad_ready` | Estado de conexión |
| `new_drawing` | Nuevo dibujo vacío |
| `get_drawing_info` | Capas, unidades, entidades del dibujo activo |
| `save_drawing` | Guardar DWG |
| `list_entities` | Lista entidades del model space |
| `delete_entity_by_handle` | Borrar entidad por handle |
| `get_system_variable` / `set_system_variable` | Variables de sistema AutoCAD |
| `zoom_extents` | Zoom a extensión |

---

## Esquema de proyecto arquitectónico (Niveles 1–8)

Claude puede enviar JSON desde lo más simple hasta un plano profesional completo:

| Nivel | Contenido | Campos JSON |
|-------|-----------|-------------|
| **1** | Geometría básica | `rooms[]` (name, width, length, area) |
| **2** | Arquitectura real | `walls[]`, `doors[]`, `windows[]` |
| **3** | Normativa | `projectType`, `code` (PE/RNE), `zoning` |
| **4** | Sistema CAD | `layers`, `lineweights` |
| **5** | Presentación | `scale`, `sheet`, `titleBlock` |
| **6** | BIM básico | `spaces`, `materials`, `levels` |
| **7** | Profesional | `grids`, `dimensionRules`, `symbols` |
| **8** | Intención | `architecturalIntent` |

**Ejemplo mínimo (Nivel 1):**

```json
{
  "title": "Dormitorio",
  "rooms": [{"name": "Dormitorio", "width": 3.4, "length": 4.0, "area": 13.6}]
}
```

**Ejemplo con normativa peruana RNE (Nivel 3+):**

```json
{
  "projectType": "vivienda_multifamiliar",
  "code": {"country": "PE", "municipality": "Lima", "rne": true},
  "layers": {"walls": "ARQ_MUROS", "doors": "ARQ_PUERTAS"},
  "architecturalIntent": {"includeTitleBlock": true, "includeGrid": true}
}
```

---

## Ejemplos de uso con Claude / Usage examples

```
"Conecta con AutoCAD y dime qué dibujo tengo abierto"
"Diseña una vivienda de 120 m² para una familia de 4 personas"
"Crea un dormitorio suite de 5x4 metros con cama king y baño"
"Dibuja un rectángulo de 0,0 a 100,50 en la capa Paredes"
"Valida este plano contra las normas mínimas de construcción"
"Exporta el plano a DXF y guárdalo"
```

---

## Estructura del proyecto / Project structure

```
autocad_mcp/
├── server.py               # Punto de entrada MCP (stdio y HTTP)
├── autocad_client.py       # Cliente COM de AutoCAD (pywin32)
├── floor_plan.py           # Generador de planos (legacy)
└── architecture/
    ├── pipeline.py         # Orquestación end-to-end
    ├── project_builder.py  # JSON → geometría + validación
    ├── project_schema.py   # Modelo ArchitecturalProject (Niveles 1–8)
    ├── dxf_export.py       # Exportador DXF (capas, cotas, ejes, cartela)
    ├── rules.py            # Reglas mínimas, RNE Perú
    ├── layout.py           # Distribución automática de estancias
    ├── wall_engine.py      # Motor de muros
    ├── cad_model.py        # Modelo de datos CAD
    └── ...
scripts/
├── start_for_claude.bat    # Inicia servidor HTTP (Windows CMD)
└── start_for_claude.ps1    # Inicia servidor HTTP (PowerShell)
```

---

## Solución de problemas / Troubleshooting

| Problema | Solución |
|----------|----------|
| No conecta a AutoCAD | Abre AutoCAD antes de usar las herramientas CAD directas |
| Error `pywin32` | `pip install pywin32` y reinicia el terminal |
| Claude no ve el MCP | Revisa rutas absolutas en el JSON de configuración |
| AutoCAD LT | Algunas versiones LT no exponen COM — usa AutoCAD completo |
| URL ngrok no funciona | La URL cambia al reiniciar ngrok — actualiza el conector en Claude.ai |

---

## Estado del proyecto / Project status

> Este proyecto está **en proceso de mejora activa**. Las funcionalidades principales (exportación DXF, integración COM, herramientas arquitectónicas) ya funcionan. Se está trabajando en:
> - Mejorar la velocidad de la integración COM con AutoCAD
> - Optimizar la generación de geometría compleja
> - Ampliar soporte de normativas internacionales
> - Mejorar compatibilidad con Cursor y otros clientes MCP

Contribuciones y reportes de bugs son bienvenidos.

---

## Licencia / License

MIT