Skip to main content
Glama
Joseadobbato13

Automatización MCP — Navisworks Manage 2025

README.md
<div align="center">

![Navisworks](https://img.shields.io/badge/Autodesk_Navisworks-Manage_2026-006EB8?style=flat-square&logo=autodesk&logoColor=white)
![MCP](https://img.shields.io/badge/MCP-Claude-D97757?style=flat-square&logo=anthropic&logoColor=white)
![Python](https://img.shields.io/badge/Python-3.11+-3776AB?style=flat-square&logo=python&logoColor=white)
![.NET](https://img.shields.io/badge/.NET-C%23_plugin-512BD4?style=flat-square&logo=dotnet&logoColor=white)

</div>

# Automatización MCP — Navisworks Manage 2026

Servidor **[Model Context Protocol](https://modelcontextprotocol.io)** que permite controlar
**Autodesk Navisworks Manage 2026** desde **Claude** en lenguaje natural: inspección de modelos
federados, árbol del modelo, búsqueda por propiedades, *selection sets*, detección de conflictos
(clash) y planificación **4D con TimeLiner**.

El plugin añade además su propia pestaña en el ribbon, con los botones de auditoría de atributos,
creación de conjuntos por atributo y estado de la conexión.

## Arquitectura

```
Claude
   ↕ stdio (MCP)
server.py                      ← FastMCP, define los @mcp.tool()
   └─ tools/plugin_bridge.py       ← cliente TCP → localhost:65434
                                        ↓
      plugin/Navisworks_MCP_Plugin.dll  ← plugin C# DENTRO de Navisworks
                                        ↓ API .NET de Navisworks
                                   Navisworks Manage 2026
```

> **Diferencia clave con Civil 3D:** Navisworks **no** expone COM accesible desde Python. El plugin
> C# es el **único** camino — si no está cargado, las herramientas devuelven error. Verifica siempre
> con `navis_ping()` antes de ejecutar comandos.

## Estructura

```
server.py                  ← servidor MCP (punto de entrada)
app.py                     ← aplicación auxiliar
requirements.txt           ← dependencias Python
tools/                     ← model_info, model_tree, property_search, selection_sets, clash,
                             federated_inspector, timeliner
bim_tools/                 ← utilidades BIM (property_search)
plugin/                    ← plugin C# + botones + ribbon + bundle
   Navisworks_MCP_Plugin.cs   servidor TCP y despacho de comandos
   Timeliner_MCP.cs           tareas 4D: tipos, tareas, vínculo con los conjuntos
   ZonasClash_MCP.cs          conjuntos y pruebas de choque por zona de obra
   RibbonBIM.cs / .xaml       pestaña propia del ribbon
instalar_plugin.bat        ← instalación del bundle
```

## Instalación

### Servidor MCP
```bash
pip install -r requirements.txt
python server.py
```

### Plugin C# (necesario)
```bash
cd plugin
dotnet build -c Release
```
Instala el bundle (auto-carga al abrir Navisworks) copiando `plugin/bundle/` a
`%AppData%\Autodesk\ApplicationPlugins\Navisworks_MCP_Plugin.bundle\`
(o usa [`instalar_plugin.bat`](instalar_plugin.bat)). También se puede cargar manualmente en
**Add-Ins → External → "MCP Server"**.

## Probar la conexión

```python
import socket, json
s = socket.socket(); s.connect(('127.0.0.1', 65434))
s.sendall(json.dumps({'command': 'PING', 'params': {}}).encode())
s.shutdown(socket.SHUT_WR)          # imprescindible: sin esto el plugin espera más datos
print(s.recv(4096).decode()); s.close()
```

Si la conexión se abre pero no llega respuesta, casi siempre falta ese `shutdown`: el plugin no
está colgado, está esperando el resto de la petición.

## Añadir botones al ribbon

El plugin monta su propia pestaña, y añadir un botón obliga a tocar tres ficheros coordinados
(el `.cs`, el `.xaml` y, si el icono es nuevo, el `.csproj`). Un `Id` que no coincide hace que el
botón simplemente no aparezca, sin ningún error. El procedimiento y las trampas están en
[`docs/ribbon_y_botones.md`](docs/ribbon_y_botones.md).

## Licencia

Ver [`LICENSE`](LICENSE). Autodesk y Navisworks son marcas de Autodesk, Inc. Proyecto no afiliado a Autodesk.