147 lines
4.2 KiB
Markdown
147 lines
4.2 KiB
Markdown
# Python Execution in CtrEditor via MCP
|
|
|
|
Esta funcionalidad permite ejecutar scripts Python directamente dentro de CtrEditor para debug y testing, con acceso completo a los objetos de la aplicación.
|
|
|
|
## Características
|
|
|
|
- **Ejecución de Python sin instalaciones externas**: Usa IronPython 3.4.2 integrado
|
|
- **Acceso completo a objetos**: MainViewModel, Canvas, ObjetosSimulables
|
|
- **Timeout configurable**: Previene scripts que se cuelguen
|
|
- **Variables de retorno**: Obtén valores específicos del script
|
|
- **Help integrado**: Documentación automática de objetos disponibles
|
|
|
|
## Objetos Disponibles en Python
|
|
|
|
### Variables Globales
|
|
- `app`: MainViewModel - El modelo de vista principal de la aplicación
|
|
- `canvas`: Canvas - El canvas principal donde se muestran los objetos
|
|
- `objects`: ObservableCollection - Colección de todos los objetos simulables
|
|
- `get_objects()`: Función que retorna una lista de todos los objetos simulables
|
|
|
|
### Librerías Disponibles
|
|
- `sys`, `math`, `time`, `json`, `random`
|
|
|
|
## Herramientas MCP Disponibles
|
|
|
|
### execute_python
|
|
Ejecuta código Python con acceso a objetos de CtrEditor.
|
|
|
|
**Parámetros:**
|
|
- `code` (requerido): El código Python a ejecutar
|
|
- `return_variables` (opcional): Lista de nombres de variables a retornar
|
|
- `timeout_seconds` (opcional): Timeout en segundos (default: 30)
|
|
|
|
**Ejemplo:**
|
|
```json
|
|
{
|
|
"name": "execute_python",
|
|
"arguments": {
|
|
"code": "count = len(objects)\nprint(f'Total objects: {count}')",
|
|
"return_variables": ["count"],
|
|
"timeout_seconds": 10
|
|
}
|
|
}
|
|
```
|
|
|
|
### python_help
|
|
Obtiene ayuda sobre objetos y métodos disponibles.
|
|
|
|
**Parámetros:**
|
|
- `object_name` (opcional): Nombre específico del objeto para obtener ayuda
|
|
|
|
**Ejemplos:**
|
|
```json
|
|
{
|
|
"name": "python_help",
|
|
"arguments": {}
|
|
}
|
|
```
|
|
|
|
```json
|
|
{
|
|
"name": "python_help",
|
|
"arguments": {
|
|
"object_name": "app"
|
|
}
|
|
}
|
|
```
|
|
|
|
## Ejemplos de Uso
|
|
|
|
### 1. Contar objetos
|
|
```python
|
|
# Contar todos los objetos
|
|
total = len(objects)
|
|
print(f"Total objects: {total}")
|
|
|
|
# Filtrar objetos por tipo
|
|
conveyors = [obj for obj in objects if 'Conveyor' in str(type(obj))]
|
|
print(f"Conveyors: {len(conveyors)}")
|
|
```
|
|
|
|
### 2. Inspeccionar canvas
|
|
```python
|
|
# Obtener información del canvas
|
|
width = canvas.Width
|
|
height = canvas.Height
|
|
print(f"Canvas size: {width}x{height}")
|
|
|
|
# Verificar estado de simulación
|
|
is_running = app.IsSimulationRunning
|
|
print(f"Simulation running: {is_running}")
|
|
```
|
|
|
|
### 3. Modificar objetos (con precaución)
|
|
```python
|
|
# Buscar un objeto específico
|
|
for obj in objects:
|
|
if hasattr(obj, 'Nombre') and obj.Nombre == "MiObjeto":
|
|
print(f"Found object: {obj.Nombre}")
|
|
# Modificar propiedades si es necesario
|
|
if hasattr(obj, 'Visible'):
|
|
obj.Visible = not obj.Visible
|
|
break
|
|
```
|
|
|
|
### 4. Debugging avanzado
|
|
```python
|
|
# Obtener propiedades de todos los objetos
|
|
for i, obj in enumerate(objects):
|
|
obj_type = type(obj).__name__
|
|
properties = [prop for prop in dir(obj) if not prop.startswith('_')]
|
|
print(f"Object {i}: {obj_type} - {len(properties)} properties")
|
|
```
|
|
|
|
## Seguridad y Precauciones
|
|
|
|
⚠️ **IMPORTANTE**: Esta funcionalidad está diseñada solo para debug y testing. NO está pensada para uso en producción.
|
|
|
|
- El código Python se ejecuta en el mismo proceso que CtrEditor
|
|
- Tiene acceso completo a todos los objetos de la aplicación
|
|
- No hay restricciones de seguridad implementadas
|
|
- Use solo en entornos de desarrollo controlados
|
|
|
|
## Configuración
|
|
|
|
Las herramientas se configuran automáticamente cuando se inicia el MCPServer. No se requiere configuración adicional.
|
|
|
|
## Solución de Problemas
|
|
|
|
### Error: "Python environment initialization failed"
|
|
- Verifica que IronPython esté correctamente instalado via NuGet
|
|
- Revisa los logs de debug para más detalles
|
|
|
|
### Error: "Python execution timed out"
|
|
- Reduce la complejidad del script
|
|
- Aumenta el timeout_seconds si es necesario
|
|
- Verifica que no haya bucles infinitos
|
|
|
|
### Variables no encontradas
|
|
- Usa `python_help` para ver qué objetos están disponibles
|
|
- Verifica que los objetos existan antes de usarlos
|
|
- Usa `hasattr()` para verificar propiedades antes de accederlas
|
|
|
|
## Logging
|
|
|
|
Todos los eventos de ejecución Python se registran en el log de debug de CtrEditor con el prefijo `[MCP Server]`.
|