4.2 KiB
4.2 KiB
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óncanvas
: Canvas - El canvas principal donde se muestran los objetosobjects
: ObservableCollection - Colección de todos los objetos simulablesget_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 ejecutarreturn_variables
(opcional): Lista de nombres de variables a retornartimeout_seconds
(opcional): Timeout en segundos (default: 30)
Ejemplo:
{
"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:
{
"name": "python_help",
"arguments": {}
}
{
"name": "python_help",
"arguments": {
"object_name": "app"
}
}
Ejemplos de Uso
1. Contar objetos
# 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
# 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)
# 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
# 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]
.