coppeliasim-mcp
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| COPPELIA_HOST | No | Host of the ZMQ remote API add-on. | 127.0.0.1 |
| COPPELIA_PUERTO | No | Port of the ZMQ remote API add-on. | 23000 |
| COPPELIA_IDIOMAS | No | Tool-name aliases. es,en,pt or todos to add English and Portuguese. | es |
| COPPELIA_TIMEOUT | No | Seconds to wait for a reply before giving up. | 10 |
| COPPELIA_MODO_LECTURA | No | Set to 1 to disable every tool that changes the scene. | 0 |
| COPPELIA_DIRECTORIO_ESCENAS | No | Only scenes under this folder can be loaded or saved. | current working directory |
| COPPELIA_DIRECTORIO_MODELOS | No | Only .ttm models under this folder can be loaded. | the local CoppeliaSim library |
Instructions
Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.
This server publishes no instructions, or was last inspected before Glama recorded them.
Capabilities
Features and capabilities supported by this server
Protocol revision2025-11-25
| Capability | Details |
|---|---|
| tools | {
"listChanged": false
} |
| prompts | {
"listChanged": false
} |
| resources | {
"subscribe": false,
"listChanged": false
} |
| experimental | {} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| iniciar_simulacionB | Inicia la simulación en CoppeliaSim. |
| detener_simulacionA | Detiene la simulación en CoppeliaSim. |
| pausar_simulacionB | Pausa la simulación en CoppeliaSim. |
| estado_simulacionB | Consulta si la simulación está detenida, corriendo o pausada. |
| tiempo_simulacionA | Devuelve el tiempo de simulación transcurrido, en segundos. |
| paso_simulacionA | Avanza la simulación un número exacto de pasos y devuelve el tiempo. Para qué sirve: con la simulación en marcha libre no se puede medir nada de forma repetible, porque entre una lectura y la siguiente pasa el tiempo que quiera el reloj. Avanzando por pasos, cada lectura cae siempre en el mismo instante simulado, y dos ejecuciones dan el mismo número. Deja la simulación en modo por pasos: a partir de aquí solo avanza cuando se
lo pidas. |
| cargar_escenaA | Carga una escena .ttt o .xml desde disco. Solo se permiten rutas por debajo del directorio configurado en COPPELIA_DIRECTORIO_ESCENAS. |
| guardar_escenaA | Guarda la escena actual en un .ttt. Solo escribe por debajo de COPPELIA_DIRECTORIO_ESCENAS, y se niega a pisar un archivo que ya exista salvo que le pases sobrescribir=True. Escribir encima de la escena de otro es de las pocas cosas que aquí no tienen deshacer, así que hay que pedirlo a propósito. |
| cerrar_escenaA | Cierra la escena actual. |
| listar_modelosA | Lista los modelos .ttm de la librería que trae CoppeliaSim instalado. filtro: texto que debe aparecer en la ruta, sin distinguir mayúsculas ('kinect', 'robots/mobile', 'sensor'). Sin filtro devuelve los primeros que encuentre, que son cientos: conviene filtrar. |
| cargar_modeloA | Carga un modelo .ttm de la librería de CoppeliaSim en la escena. modelo: ruta relativa dentro de la librería, tal como la devuelve
Solo carga de esa librería, y no de una ruta cualquiera, a propósito: un .ttm puede llevar child scripts en Lua dentro —el kinect.ttm oficial lleva dos— y esos scripts se ejecutan al darle Play. Cargar un modelo que llegó de fuera es, en la práctica, ejecutar el código que traiga. |
| listar_objetosA | Lista los objetos de la escena actual con su ruta y su handle. tipo: 'todos', 'shape', 'joint', 'dummy', 'sensor', 'camara', 'luz', 'path'. |
| obtener_posicionA | Devuelve la posición [x, y, z] de un objeto, en metros. relativo_a: 'mundo' o la ruta de otro objeto (por ejemplo '/Cuboid'). |
| fijar_posicionB | Mueve un objeto a la posición (x, y, z), en metros. |
| obtener_orientacionC | Devuelve la orientación de un objeto como ángulos de Euler en radianes. |
| fijar_orientacionB | Fija la orientación de un objeto con ángulos de Euler en radianes. |
| eliminar_objetoC | Elimina un objeto de la escena por su ruta. |
| crear_primitivaA | Crea una forma primitiva en la escena y devuelve su ruta. forma: 'cubo', 'esfera', 'cilindro', 'cono', 'capsula', 'disco', 'toroide'. Tamaños y posición en metros. alias: nombre con el que quedará en la escena. Sin él CoppeliaSim las llama 'Cuboid', 'Cuboid[0]', 'Cuboid[1]'..., y como emparentar renumera a los hermanos, la ruta que te devolvió una llamada puede referirse a otra pieza tres llamadas después. Con nombres propios eso no pasa. |
| emparentar_objetoA | Cuelga un objeto de otro, para que se muevan como un solo cuerpo. padre: ruta del nuevo padre, o 'mundo' para devolver el objeto a la raíz. mantener_pose: True deja el objeto donde está; False lo lleva al origen del padre. Ojo: emparentar renumera las rutas de los hermanos ('/Cylinder[3]' puede pasar a ser '/Cylinder[1]'). Si vas a emparentar varias piezas seguidas, vuelve a listar los objetos entre una llamada y la siguiente. |
| fijar_detectableA | Marca o desmarca un objeto como detectable por los sensores de proximidad. Un objeto no detectable es invisible para |
| fijar_dinamicaA | Deja una forma lista para el motor de física: masa, contacto y rozamiento. Sin esto una forma recién creada es decorado: ni cae, ni empuja, ni la empujan. Es el paso que falta entre 'crear_primitiva' y tener un robot. dinamico: False la clava en el sitio (suelo, paredes, obstáculos). respondable: si choca con las demás. Un cuerpo dinámico no respondable atraviesa el suelo y se cae de la escena. densidad: kg/m³ para calcular masa e inercia a partir del volumen real de la forma. 0 significa 'no tocar la masa'. Para una masa concreta, divide esa masa entre el volumen. Solo funciona en formas convexas. friccion: 0 resbala, 1 agarra. Negativo significa 'no tocar el rozamiento'. chocar_con_hermanos: False evita que las piezas de un mismo robot choquen entre ellas (ruedas contra chasis), que es de donde salen los temblores, sin dejar de chocar con el suelo y el resto del mundo. |
| fijar_colorB | Pinta una forma. Componentes de 0 a 1. Sirve para algo más que la estética: en una escena de veinte cubos grises, el color es lo que permite decir cuál es cuál en una captura. |
| crear_juntaA | Crea una articulación motorizada y la deja lista para recibir órdenes. tipo: 'rotativa' (gira) o 'lineal' (desliza). eje: 'x', 'y' o 'z' — en qué dirección gira o desliza, respecto al padre. modo: 'velocidad' para un motor de rueda, 'posicion' para un brazo, 'libre' para que la junta gire suelta sin motor. par_maximo: par o fuerza que el motor puede dar (N·m o N). Si se queda corto, la junta no llega a la velocidad pedida y no hay ningún error que lo diga: simplemente va lenta. padre: ruta del objeto del que cuelga, por ejemplo el chasis de un robot. Dos cosas que cuesta descubrir a solas:
Después de crearla: cuelga la rueda de la junta con |
| crear_union_rigidaA | Crea un sensor de fuerza, que es como se sueldan dos cuerpos dinámicos. Suena raro usar un sensor para unir cosas, pero es lo que documenta CoppeliaSim: emparentar dos formas dinámicas NO las une —siguen siendo cuerpos separados y se caen cada uno por su lado—, y la única forma de fijarlas es una junta o un sensor de fuerza. Y hay un caso donde el sensor de fuerza es la única opción: cuando las dos piezas necesitan rozamientos distintos. Fusionar las formas las obliga a compartir el coeficiente, así que un chasis con agarre y una rueda loca que resbale no se pueden fusionar; hay que unirlos por aquí. Uso: se crea colgando del chasis, y la pieza a unir se cuelga de él con
|
| obtener_posicion_juntaA | Lee la posición de una articulación: radianes si es rotativa, metros si es prismática. |
| fijar_objetivo_juntaB | Fija la posición objetivo de una articulación (radianes o metros). |
| fijar_velocidad_juntaC | Fija la velocidad objetivo de una articulación. |
| obtener_fuerza_juntaC | Lee la fuerza o par medido en una articulación. |
| leer_sensor_proximidadB | Lee un sensor de proximidad: si detecta algo, a qué distancia y en qué punto. |
| comprobar_sensor_proximidadA | Detecta ahora mismo con un sensor de proximidad, sin necesidad de simulación. Diferencia con |
| crear_sensor_proximidadA | Crea un sensor de proximidad cónico y lo orienta hacia el frente (+X). x, y, z: posición en metros, relativa al padre (o al mundo si padre='mundo'). alcance: hasta dónde ve, en metros. apertura_grados: apertura total del cono. Cuanto más ancho, más 've' de lado. padre: ruta del objeto del que debe colgar, por ejemplo el chasis de un robot. Dos trampas de geometría, por si el sensor 'no detecta lo que debería':
|
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
No prompts | |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
No resources | |
TDQS
Scored across 31 tools
Most tools map cleanly to a distinct resource-plus-action pair, such as position, orientation, joint target, or simulation state. The only near-overlaps are leer_sensor_proximidad vs comprobar_sensor_proximidad and emparentar_objeto vs crear_union_rigida, but the descriptions explicitly separate those use cases.
The set overwhelmingly follows a Spanish verb_noun pattern using verbs like crear_, fijar_, obtener_, cargar_, and listar_. A few query tools are noun-first instead of verb-first (tiempo_simulacion, estado_simulacion, paso_simulacion), which keeps it from being perfectly uniform.
31 tools is above the 25+ threshold and creates a large selection surface for an agent, even though each tool has a clear niche. The count could be reduced by grouping pose queries, simulation queries, or proximity-sensor variants.
Core workflows are covered well: scene management, object creation and posing, physics setup, joint control, and proximity sensing. Obvious gaps remain for a robotics simulator, such as camera/vision reading, object velocity, collision queries, and script execution, so agents may hit dead ends outside the basic robot-building path.