Skip to main content
Glama
Maya Retopo MCP

Maya Retopo MCP

README.md
# Maya Retopo MCP (`maya-retopo-mcp`)

Servidor **Model Context Protocol (MCP)** local diseñado para permitir que agentes de IA inspeccionen y asistan flujos de trabajo de **retopología en Autodesk Maya 2027** de forma **segura, visual, reversible y verificable**.

> **Filosofía central:** *Inspeccionar → Previsualizar → Aprobar → Ejecutar → Verificar → Poder revertir.*

---

## Características Principales

- **100 % Local y Loopback:** Toda comunicación entre el proceso MCP y Autodesk Maya ocurre exclusivamente en `127.0.0.1` (`localhost`). Sin acceso a red externa ni servicios en la nube.
- **Modo `READ_ONLY` por defecto:** El servidor arranca siempre en modo de solo lectura. Ninguna herramienta de lectura modifica la escena ni altera el flag `modified` de Maya.
- **Sin ejecución arbitraria de código:** No expone `eval`, `exec`, MEL arbitrario ni comandos de shell. Solo despacha operaciones registradas y auditadas con esquemas tipados.
- **Protección de escultura High-Poly y carpeta `original/`:** Verifica huellas estructurales (UUID, DAG path, conteos V/E/F, bounding box y hash topológico) antes y después de cualquier operación y bloquea cualquier escritura en `original/`.
- **Preview con Undo automático y Checkpoints:** Toda operación regional se prueba en un *undo chunk* aislado, captura evidencia visual del viewport y revierte cambios automáticamente antes de solicitar aplicación explícita.

---

## Estructura del Repositorio

```text
maya-retopo-mcp/
├── README.md                  # Introducción general, instalación y arranque rápido
├── LICENSE                    # Licencia MIT
├── pyproject.toml             # Configuración del paquete Python y herramientas de calidad
├── src/
│   └── maya_retopo_mcp/       # Servidor MCP externo (proceso host)
│       ├── server.py          # Punto de entrada MCP por stdio
│       ├── config.py          # Configuración tipada, modos y límites
│       ├── errors.py          # Catálogo de errores estructurados sin filtración de stack traces
│       ├── logging_config.py  # Logging local sanitizado en JSON
│       ├── transport/         # Cliente TCP loopback y protocolo JSON hacia Maya
│       ├── tools/             # Herramientas MCP separadas por dominio (maya, project, scene, etc.)
│       ├── policies/          # Políticas de rutas, permisos por modo y huella de malla protegida
│       └── models/            # Contratos de entrada/salida y envoltura común de respuestas
├── maya_bridge/               # Puente ejecutado dentro de Autodesk Maya
│   ├── bootstrap.py           # Inicialización del servidor loopback en Maya (hilo principal seguro)
│   ├── dispatcher.py          # Despachador estricto de handlers permitidos (sin eval/exec libre)
│   ├── handlers_read.py       # Handlers de inspección de solo lectura
│   ├── handlers_preview.py    # Handlers de previsualización con undo chunk obligatorio
│   ├── handlers_apply.py      # Handlers de aplicación con checkpoint y validación
│   ├── topology.py            # Análisis determinista de topología (quads, n-gons, fronteras)
│   ├── symmetry.py            # Detección de plano anatómico de simetría
│   ├── viewport.py            # Captura y restauración de estado del viewport
│   └── checkpoint.py          # Gestión de copias recuperables
├── operations/                # Operaciones regionales auditadas (feet_v1, hands_v1, head_face_v1)
├── tests/                     # Suite de pruebas (unit, integration_fake_maya, integration_mayapy, manual_gui)
├── docs/                      # Documentación técnica especializada
└── examples/                  # Ejemplos de configuración para clientes MCP (Codex) y proyectos
```

---

## Requisitos Previos

- **Sistema Operativo:** Windows 10 / 11 (64-bit).
- **Python (Host):** Python `3.11` o superior.
- **Autodesk Maya:** Maya 2027 (para integración GUI o `mayapy` en pruebas de integración).
- **Dependencias externas:** El núcleo de Fase 0 utiliza exclusivamente la biblioteca estándar de Python para minimizar la superficie de ataque y permitir ejecución inmediata sin dependencias de terceros.

---

## Instalación y Arranque Inicial

### 1. Clonar y verificar el entorno

Desde la raíz del repositorio en PowerShell:

```powershell
# Verificar versión de Python
py --version

# Ejecutar el servidor en modo de verificación de salud (o vía cliente MCP stdio)
$env:PYTHONPATH = "src;."
py -m maya_retopo_mcp.server --self-check
```

*(Opcional)* Si deseas instalar el paquete en modo editable dentro de un entorno virtual:

```powershell
py -m venv .venv
.\.venv\Scripts\Activate.ps1
pip install --no-build-isolation --no-deps -e .
```

### 2. Iniciar el Puente en Autodesk Maya (`maya_bridge`)

Dentro del **Script Editor (pestaña Python)** de Autodesk Maya 2027, registra y levanta el puente local en loopback (`127.0.0.1:7001`):

```python
import sys
repo_path = r"C:/Users/CDS/Documents/Repositorios/maya-ops-mcp"
if repo_path not in sys.path:
    sys.path.insert(0, repo_path)

from maya_bridge import bootstrap
bootstrap.start_server(host="127.0.0.1", port=7001)
```

> Consulta [`docs/maya_setup.md`](docs/maya_setup.md) para más detalles sobre cómo configurar el arranque seguro y cómo detener el puente (`bootstrap.stop_server()`).

### 3. Configurar el Cliente MCP (Codex / Claude / Cliente stdio)

Ejemplo de configuración en `codex_config.toml` (ver [`examples/codex_config.toml`](examples/codex_config.toml)):

```toml
[mcp_servers.maya_retopo]
command = "py"
args = ["-m", "maya_retopo_mcp.server"]
env = { PYTHONPATH = "src;.", MAYA_MCP_HOST = "127.0.0.1", MAYA_MCP_PORT = "7001" }
tool_timeout_sec = 120
```

### 4. Ejecutar las Pruebas

Puedes ejecutar toda la batería de pruebas unitarias y de integración con Maya simulado usando `unittest` (incluido en Python) o `pytest`:

```powershell
$env:PYTHONPATH = "src;."
py -m unittest discover -s tests -p "test_*.py" -v
```

---

## Estado por Fases de Implementación

- [x] **Fase 0: Base segura** — Estructura del repositorio, configuración, logging sanitizado, políticas de seguridad base, transporte TCP loopback hacia Maya, puente `maya_bridge`, herramienta `maya.health` y pruebas unitarias + Maya simulado.
- [ ] **Fase 1: Solo lectura** — `project.configure`, `scene.describe`, `scene.list_meshes`, `selection.get`, `retopo.detect_candidates`, `retopo.analyze_mesh`, `retopo.analyze_symmetry`, `retopo.boundary_loops`, `viewport.capture`.
- [ ] **Fase 2: Selección y roles** — `selection.set`, `retopo.confirm_roles`, huella y protección de malla high-poly.
- [ ] **Fase 3: Preview seguro** — Operaciones registradas, undo chunks, `safety.checkpoint`, `retopo.preview_region`.
- [ ] **Fase 4: Aplicación** — `retopo.apply_region`, `retopo.validate`, `scene.save_version`.
- [ ] **Fase 5: Endurecimiento** — Límites estrictos, paginación avanzada, auditoría de escenas corruptas y guía de recuperación.

---

## Documentación Especializada (`docs/`)

Para detalles arquitectónicos, modelo de amenazas y referencia de herramientas, consulta la carpeta [`docs/`](docs/):

- [`docs/specification.md`](docs/specification.md) — Especificación íntegra de requisitos del proyecto Maya Retopo MCP.
- [`docs/architecture.md`](docs/architecture.md) — Arquitectura de dos procesos (Host MCP ↔ Puente Maya), protocolo JSON loopback y flujo de datos.
- [`docs/security.md`](docs/security.md) — Modelo de seguridad, esquema de amenazas (*Threat Model*), modos de operación (`READ_ONLY`, `PREVIEW`, `APPLY`) y protección de rutas/mallas.
- [`docs/tool_reference.md`](docs/tool_reference.md) — Referencia detallada de herramientas MCP, contratos de entrada/salida y códigos de error.
- [`docs/maya_setup.md`](docs/maya_setup.md) — Configuración paso a paso de Autodesk Maya 2027, puertos loopback y resolución de problemas.
- [`docs/development.md`](docs/development.md) — Guía de desarrollo, convenciones de código, pruebas con Maya simulado y procedimiento de rollback.

TDQS

B3.3/5.0

Scored across 1 tool

Disambiguation5/5

With only a single tool there is no possibility of confusion; maya.health has a clearly distinct and well-defined purpose (connection/version/scene health check). No competing tools exist to misselect between.

Naming Consistency3/5

The single name maya.health uses a readable namespace-dot convention, but with only one tool there is no pattern to verify against, so consistency cannot really be established.

Tool Count1/5

A server branded as a retopology MCP exposing exactly one tool (a health check) is an extreme mismatch between stated purpose and surface area; the actual retopo operations are entirely absent.

Completeness1/5

The surface is severely incomplete: there are no tools for any retopology workflow (mesh inspection, retopo operations, bake/transfer, export), only a connectivity check, making real tasks dead ends.

Maintenance

ActivityMaintained
ResponsivenessNo recent community issues