Apolo Cad
Agent-native parametric 3D CAD: model machines, validate them and emit shop drawings
Connector by mariorojasmz · GitHub account verified by the MCP Registry
Install
Works with Claude Code, Codex, VS Code, Cursor, Windsurf, Claude Desktop. Read the repository before you give any tool access to your data.
npx agentmarket install connector/mariorojasmz-apolo-cad
Asks which of your tools to add it to (Claude Code, Codex, Cursor, VS Code, Windsurf, Gemini CLI, Claude Desktop) and shows the change first. See https://agentmart.dev/cli.
Get the weekly diff
The weekly diff: one email a week with new agent tools, notable updates and grade changes, plus security alerts for tools you follow. Double opt-in, one-click unsubscribe.
About
Reviews
Write a reviewNo reviews yet. Installed it? Reviews come from verified installers only. How reviews work
Permissions
What this server can do and what it asks for, from its tool list and install config. Checked Oct 25, 2026.
- Tools
- 38 read · 23 write · 4 delete · 26 not yet classified
- Secrets
- None asked for
- Install scripts
- Not scanned yet
- Runs as
- Python package
Tools by what they do 91
Read from the source code; the running server may list different tools.
Read 38 · Look things up without changing anything.
check_assemblycheck_interferencecut_listdelivery_checkelectrical_checkengineering_checkfind_commandsget_agent_notesget_bomget_catalogget_circuitget_command
Show 26 more tools
get_command_schemasget_connectionsget_costingget_design_guidelinesget_dofget_expression_grammarget_fitget_groupsget_jobget_kinematicsget_mass_propertiesget_matesget_motionget_requirementsget_scenariosget_sceneget_simulationget_stackupget_topologylist_projectslist_revisionsmeasurepreviewrender_viewscan_motionverify
Write 23 · Create, change, send or run things.
add_agent_noteapply_configurationcreate_projectdrawing_setedit_agent_noteedit_batchedit_commandresolve_expressionrestore_revisionrun_batchsave_configurationsave_live_session
Show 11 more tools
save_revisionset_colorset_materialset_motionset_requirementsset_scenarioset_stackupset_variableset_verticalset_visibilityset_visibility_bulk
Delete 4 · Delete, drop, revoke or wipe things.
delete_connectiondrop_testremove_commandsrun_command
Not yet classified 26 · We could not tell from the name and description.
assembly_manualauto_groupautodetect_connectionscalc_reportdeclare_structuredrawingexport_flat_patternexport_stepexport_stlfea_assemblyfea_staticgravity_test
Show 14 more tools
motion_gifnearnestingopen_projectpick_pointpropose_commandspublication_gatequotationredosimulatetest_plctest_scripttest_sketchundo
Secrets and settings it asks for
Other settings (environment variables or headers).
APOLO_URL
Files it touches
- Any path the agent passes to its tools
Tools (91)
Read from the source code; the running server may differ. Descriptions are the server’s own words; hidden characters are shown as [U+…].
add_agent_noteAñade una nota a la memoria de sesión del agente (tope 30, ≤ 2000 caracteres; persiste en el proyecto).
apply_configurationAplica una VARIANTE (un undo): reescribe sólo sus columnas; devuelve `cambios` y `aviso`.
assembly_manualGenera el MANUAL DE ENSAMBLAJE paso a paso (instructivo de montaje, estilo Inventor/IKEA) en PDF MULTIPÁGINA y lo guarda en `path` (.pdf): portada con la SECUENCIA de montaje + 1 lámina por PASO. Cada paso muestra el render 3D acumulado (las piezas NUEVAS resaltadas a color, lo ya montado en gris fantasma, cámara estable) + la lista de piezas/herraje del paso (con norma) + la instrucción. La secuencia sale de las uniones DECLARADAS (fasten/ground): lo soldado primero, cada pieza tras aquella a la que se fija y lo que tapa al final (sin ellas, del log). A diferencia del plano de CONJUNTO (drawi…
auto_groupAuto-agrupa el modelo en SUB-ENSAMBLAJES por subsistema (Estructura, Transmision, Rodillos y tambores, Banda y mesa, Rodamientos, Tornilleria, Guardas…) usando la heurística super-comando → catálogo → palabra clave del nombre. Idempotente (no duplica grupos ni re-agrupa lo agrupado); `dry_run=true` solo PROPONE para revisar antes. Úsalo una vez para poblar un modelo existente; después refina con create_group/edit_command.
autodetect_connectionsPropone uniones de ensamblaje desde la GEOMETRÍA (piezas que apoyan en el piso + pares en contacto por caja envolvente), para poblar la conectividad de un modelo que no la declara. Read-only: confirma las que quieras con run_command(type='ground'|'fasten'). Heurística por AABB (propone, no impone).
calc_reportGenera la MEMORIA DE CÁLCULO (PDF multipágina) y la guarda en `path` (.pdf): portada con BASES DE DISEÑO + índice de verificaciones + VEREDICTO (aprobado/con avisos/no conforme), y una página por verificación con datos de entrada, FÓRMULA, sustitución numérica, criterio de aceptación y FACTOR DE SEGURIDAD (motorización, par, flecha, flexión de eje, pernos, soldaduras, L10, pandeo, vuelco…). Es el entregable que JUSTIFICA el diseño ante el cliente. Sin argumentos usa los REQUISITOS guardados (set_requirements); exige al menos carga y largo de paquete (aquí o en requisitos). Si tarda, RECIBO {"j…
check_assemblyValidación de ensamblaje por CONECTIVIDAD: ¿cada pieza tiene un camino de sujeción hasta el piso? Devuelve las piezas FLOTANTES (caerían bajo gravedad — eje suelto, rodillo sin sujetar, guarda sin tornillo, motor flotando) y las AISLADAS (sin ninguna unión). Determinista. Por defecto cuenta SOLO lo DECLARADO (como delivery_check); True superpone sin persistir los contactos geométricos para EXPLORAR ('si fijara todo lo que se toca, ¿qué seguiría flotando?'). Declara uniones reales con run_command(type='ground'|'fasten'). `detail`: "summary" (def.) da los conteos y SÓLO lo que flota (`floating_d…
check_interferenceInterferencias entre sólidos (booleanas OCCT). Con joint_values {junta: valor} comprueba la colisión del mecanismo EN POSE. Con `ids` (feature_ids o NOMBRES DE GRUPO) ACOTA a las parejas donde participa al menos uno de ellos (O(k·n) en vez de O(n²)): valida TU zona de trabajo tras una operación en vez de la máquina entera. Hasta 400 parejas por llamada: con más, `truncado` suma `parejas_sin_revisar`, `desde_siguiente` y `como_acotar` (la llamada siguiente); `desde` pide esa página. `excluir_declaradas=true` deja fuera los pares con unión declarada (como la puerta).
create_projectCrea y abre un proyecto: devuelve su `id` (para open_project), su `nombre` y la escena. template: null | 'transportador' | 'brazo'.
cut_listLista de corte de fabricación: piezas a CORTAR (a-medida + catálogo cortable) agrupadas por (material, espesor, ancho, largo) con cantidad y área; totales por material (m²/ml); y cédula de HERRAJE (catálogo no cortable: bisagras/tornillos/ correderas...). Une los sólidos de las uniones (una hoja = 2 largueros). Read-only. El CSV está en GET /api/cutlist.csv.
declare_structureEstructura real de la máquina (anclajes al piso + uniones de soporte) desde la geometría, por un grafo de soporte dirigido (NO fija lo que cuelga sin nada debajo), con el TIPO de cada unión por criterio de taller según el rol de las piezas: eje ↔ larguero apretado con tuerca = perno; la tuerca va en contacto con su eje o perno y no se une a lo que aprieta; la guarda se atornilla a su soporte y no se fija a lo que gira ni al motor; rodamiento = contacto; motor = perno; lo que gira no se suelda a lo fijo; pata ↔ larguero = soldadura de marco; tapa o guarda ↔ estructura y tramos numerados = perno…
delete_connectionBorra una o VARIAS uniones declaradas por NOMBRE (fijadores o anclajes a tierra) — para corregir el auto-declarado o para cirugías. Pasa `name` (una) o `names` (lote), no ambos. El lote es ATÓMICO (1 undo): si un nombre no existe, no se borra ninguna. Consulta los nombres con get_connections.
delivery_checkLA PUERTA DE SALIDA (V6.9): antes de dar un proyecto por TERMINADO, corre TODA la batería de cierre en UNA llamada y devuelve un SEMÁFORO accionable: {veredicto: VERDE|AMARILLO|ROJO, bloqueantes, avisos, no_aplica, resumen}. Chequeos: interferencias en diseño (exclusiones normales) · sujeción DECLARADA (¿todo tiene camino de carga a tierra? — sin autodetect: cuenta lo que DECLARASTE con ground/fasten) · lints pre-entrega (barreno sin perno, pieza suelta) · salud del documento · colisión EN POSE en los fotogramas de REPOSO de los estudios de movimiento declarados (extremos + poses sostenidas; e…
drawingPlano profesional por INTENCIÓN (el moat agente-nativo): UNA spec declara qué quieres y el motor lo dibuja con cotas/cortes/detalles/cajetín pro. spec = {sheet:"A3", section:"x"/"y"/"z", detail:{view,u,v,radius,scale}, dims:[ids] (tamaño), datum_dims:[ids] (posición desde la base), bom:true, cutlist:true (tabla DESPIECE con L×A×E por tabla, globos en el alzado — para ENSAMBLAJES, no solo el bbox), hardware:true (añade CÉDULA DE HERRAJE bajo el despiece, con columna Norma — DIN/ISO/EN/ASTM — para los normalizados), auto_dims:true (acota SOLO la posición x/y de cada agujero desde el datum — para…
drawing_setGenera el JUEGO DE PLANOS profesional (PDF multipágina): conjunto con BOM + 1 lámina por pieza ACOTADA + cédula de corte/herraje, y lo guarda en `path` (.pdf). `template`: carpinteria/weldment/chapa/generico. `shaded=true`: el conjunto lleva isométrica SOMBREADA a color (estilo Inventor). Devuelve nº de bytes guardados. ¿DWG para clientes AutoCAD? GET /api/drawingset.dwg = ZIP con un DWG por lámina (V5.9, requiere ODA File Converter). Si tarda, RECIBO {"job"}: get_job lo guarda en `path` al terminar.
Show 76 more tools
drop_testSimula con FÍSICA (gravedad real, motor MuJoCo) la caída de cajas de 'producto' sobre la escena actual (faja, mesa…) y guarda un GIF animado de la caída en `path`. Cada producto es un dict {w,d,h (mm), x,y,z (mm pose inicial), mass (kg, opcional)}. Devuelve las posiciones de reposo [x,y,z] mm y si el sistema se asentó (settled). Es análisis read-only: NO modifica el modelo.
edit_agent_noteCorrige o borra la nota número `nota` de la memoria del agente (1 = la primera de get_agent_notes; léelas antes: al borrar, las siguientes bajan un número). Con `text` la reemplaza (hasta 2000 caracteres); con `borrar=true` la quita, p. ej. una nota obsoleta que nombra piezas que ya no existen. Devuelve las notas que quedan.
edit_batchEdita VARIOS comandos en UN lote ATÓMICO: un solo regenerate y un solo paso de undo (frente a N round-trips + N regenerates de llamar edit_command en bucle). Úsalo al reparametrizar muchas piezas a la vez. edits = [{"command_id": "c38", "params": {...}}, …]. PATCH por defecto (merge=True, superficial: un sub-objeto position/rotation se reemplaza entero); merge=False reemplaza todos los params. Si una edición falla, revierte TODO el lote. `expect` (CONTRATO, V6.5b) = aserciones estilo verify que deben cumplirse tras el lote; si alguna falla, se revierte TODO (doc intacto) — úsalo para reparamet…
edit_commandEdita los parámetros de un comando pasado y regenera (edición paramétrica del historial). Por defecto hace PATCH (`merge=True`): combina con los params actuales, así que basta enviar los campos a cambiar. Merge SUPERFICIAL: un sub-objeto (position, rotation) se reemplaza entero. `merge=False` reemplaza todos los params (los omitidos vuelven a su default). `detail` como en run_command. Si tarda, recibes un RECIBO {"job": id}: recógelo con get_job(id) y NO reenvíes la edición.
electrical_checkERC del tablero eléctrico: cortocircuitos, tensiones cruzadas (una bobina de 24 VDC en 220 VAC), motores sin protección, puesta a tierra, bornes sueltos, colores IEC 60204-1 y parada de emergencia, cada regla con su norma; con tablero armado y cables de campo, sus reglas (canaletas, largos, lo que gira), las piezas de seguridad sin circuito y la altura de los mandos. Devuelve {estado ok|aviso|error|sin_carril, errores, avisos, reglas, revisadas}: `revisadas` = las reglas que corrieron sin hallazgos (no salen en `reglas`). delivery_check lo incluye y, en un lote, el contrato {"erc": "sin_errore…
engineering_checkValida el modelo con criterio de ingeniería. Devuelve DOS bloques: `ingenieria` (reglas del transportador: apoyo del paquete, capacidad de rodillo, ancho útil, motorización por CONSTRUCCIÓN — CEMA slider-bed si banda sobre cama / ISO 5048-DIN 22101 si banda sobre rodillos —, par + par de arranque, adherencia del tambor motriz Euler-Eytelwein con la T2 mínima que el tensor debe garantizar, flecha del bastidor, flexión del eje) y `estructura` (chequeo UNIVERSAL de cualquier ensamblaje: uniones apernadas vs ISO 898-1, soldaduras, vida L10 de rodamientos, pandeo de patas, vuelco). Sin argumentos u…
export_flat_patternExporta el patrón plano (desplegado) de una chapa metálica a un DXF local para corte láser. feature_id es el id del sólido de la chapa (ver get_scene); debe haberse creado con el comando create_sheet_metal. Soporta las pestañas ricas de V5.5 (multi-pliegue, taladros/recortes en pestañas — proyectados al blank) y K-factor por material (k_factor vacío = tabla según material). ¿DWG? GET /api/sheetmetal/{id}/flat.dwg (V5.9, requiere ODA File Converter).
export_stepExporta el modelo a un archivo STEP en la ruta local indicada.
export_stlExporta los sólidos VISIBLES como UN STL binario (malla) en la ruta local indicada — para impresión 3D, visores de malla o simuladores externos. `tolerance` = desviación máxima de teselado en mm (menor = más fino y pesado). Para CAD/interop usa export_step (B-rep exacto); el STL es malla aproximada.
fea_assemblyFEA ESTÁTICO LINEAL BONDED de un SUB-ENSAMBLAJE (V7.4): el bastidor SOLDADO completo (N sólidos PEGADOS, nodos compartidos en las interfaces = sin contacto) bajo la carga de diseño, MULTI-MATERIAL, con σ_vm y FS reportados POR PIEZA (la gobernante es la de menor FS). Pasa `group` (nombre de sub-ensamblaje) o `ids` (piezas sueltas + `name`). El empotramiento se DERIVA de los grounds (base de las patas/placas ancladas a piso) — o pasa `fixed_pieces`; la carga se DERIVA de requirements.carga_kg repartida sobre la cama/mesa (nómbrala cama/mesa/deck) — o `carga_kg`, o `loads` explícitos [{feature_i…
fea_staticFEA ESTÁTICO LINEAL de UNA pieza (V5.6): malla tet P2 (gmsh) + elasticidad lineal (scikit-fem). Devuelve σ_vm máx (MPa) con su ubicación, desplazamiento máx (mm), FS = σy/σ_vm (criterio: ≥2 estático, <1.2 sobrecargada) y las HIPÓTESIS declaradas; el resumen se GUARDA y entra solo a la memoria de cálculo (con aviso automático si la geometría cambia después). `fixed` y `loads[].selector` son selectores declarativos de CARAS ({mode: cara|direccion|cerca…} — elige con get_topology); para cargar un TALADRO o una cara grande junto a taladros usa cerca con `medir: "superficie"` y un punto SOBRE la ca…
find_commandsBusca COMANDOS en el log del documento y devuelve filas compactas [{id, type, resumen}] — para encontrar el command_id que quieres editar/borrar SIN deducirlo por aritmética de lotes. Al menos un filtro: - type: tipo exacto ('chamfer', 'create_box', 'add_joint', …). - feature: comandos que CREARON ese sólido o lo REFERENCIAN en sus params (feature/feature_a/b, members, parent/child, selectores…). - name: substring (sin mayúsculas) del nombre; en el carril eléctrico, '-M1', 'NMRV'… Combínalos (type='chamfer', feature='c14' = los chaflanes sobre c14). Read-only.
get_agent_notesLee la memoria de sesión del agente (notas del proyecto; la n.º k es notes[k-1]).
get_bomLista de materiales del modelo actual, agrupada por referencia y longitud (las piezas a-medida idénticas se agrupan e incluyen peso por volumen×densidad). Con `by_group=true` cada fila lleva su sub-ensamblaje y las piezas iguales de grupos distintos salen separadas (subtotales por grupo/instancia — útil a escala).
get_catalogCatálogo de componentes industriales (perfiles, rodillos, motorreductores, patas, guardas, sensores) con especificaciones y pesos. Es grande (~73 KB); filtra con `category` (p. ej. 'motorreductores', 'tubos_estructurales', 'rodamientos', 'tornilleria', 'tensores_trotadora') y usa `names_only=True` para traer solo ref/name/category (payload ligero).
get_circuitCircuito del TABLERO ELÉCTRICO declarado (add_device/add_wire/add_cable): dispositivos con la RED de cada borne, redes con su tensión inferida (contactos cerrados), conductores y cables. `designacion` («-Q1», «=Faja1») filtra a esos dispositivos y lo que los toca (lee la designación asignada sola); una ubicación («+TAB1») da lo que está en ella y un cable («-W4»), sus hilos y los aparatos que tocan. `tablero=true` suma `tableros`: lo que la persona ve del tablero armado en el visor (veredicto, ítems, largos, llenado). Read-only.
get_commandDevuelve {type, params} del comando indicado (su estado ACTUAL) para editarlo con edit_command. Usa get_scene para ver los ids (campo 'comando' de cada sólido).
get_command_schemasComandos CAD con su JSON Schema de parámetros. Consúltalo antes de run_command/run_batch. Sin argumento lista TODOS (es grande, ~180 KB); pasa `command_type` (p. ej. "create_belt_conveyor") para traer SOLO ese schema. Un campo con refs del catálogo trae `x-catalogo` (categorías) en vez de la lista: búscalas con get_catalog.
get_connectionsUniones de ensamblaje DECLARADAS (persistidas) del documento: fijadores (a↔b) y anclajes a tierra, con sus nombres (para borrarlas con delete_connection). Read-only. Filtra con `ids` (piezas, NOMBRES DE GRUPO o command_ids: las uniones donde participa alguna) y `kind` (perno | soldadura | pegado | contacto | anclaje). Con más de 40 uniones responde el RESUMEN —conteos por tipo y una fila por tipo y PAR de piezas {kind, a, b, n, ejemplo}—; `resumen=true` lo fuerza y `resumen=false` trae la lista entera.
get_costingBOM COSTEADO en USD: cada fila con costo_ud/costo_total y su FUENTE (catálogo referencial / hardware peso×material×3 / a medida peso×material×2.5) + totales por categoría, catálogo vs fabricación y el ÍTEM MÁS COSTOSO: para optimizar costos y como base de la cotización. Si algo se cobra dos veces o no se cobra, trae `avisos` con su `monto_en_riesgo_usd` y la llamada que lo arregla (no se descuentan solos). Precios referenciales: confirmar con proveedor. Read-only.
get_design_guidelinesCriterio de INGENIERÍA que debes aplicar por DEFECTO al diseñar (máquinas, muebles, estructuras, cualquier objeto): el decálogo completo con detalle, CÓMO verificar cada regla en Apolo, cuándo preguntar vs. asumir, y ejemplos por dominio. Las instrucciones del servidor ya traen el resumen; consulta ESTO cuando vayas a diseñar algo no trivial (añadir una guarda, un soporte, un mueble) para no entregar piezas flotantes, sin montaje ni con la forma equivocada. Recuerda: el usuario es el CLIENTE y tú el INGENIERO — lo obvio se asume.
get_dofReporte de GRADOS DE LIBERTAD del ensamblaje (análogo 3D del dof/redundantes del croquis): por sólido, cuántos GDL le quedan tras ground/juntas/mates y su estado (fijo | parcial | libre | sobre_restringido) + qué lo restringe. Conteo Grübler determinista. OJO: el conteo es heurístico (no ve redundancia geométrica); un 'sobre_restringido' puede ser redundancia benigna — los conflictos REALES los rechaza el solver de mates al editar. Útil para responder '¿qué puede moverse y qué está sobre-restringido?'.
get_expression_grammarFunciones, constantes, operadores permitidos en los campos '=expr' y las variables del proyecto disponibles. Consúltalo antes de escribir expresiones complejas.
get_fitLímites y análisis de AJUSTE ISO 286 (V5.4) — consúltalo al DISEÑAR un asiento. Con `hole` (H7/G7/JS7/K7/M7/N7/P7…) y `shaft` (g6/h7/js6/k6/m6/n6/p6…): análisis completo del ajuste — juego/transición/apriete con juego_min/max en µm. Con uno solo: sus límites (ei/es µm, lo/hi mm) sobre el nominal. Criterio de asientos: inserto de chumacera UC → eje h7 (desliza; fijan los prisioneros); rodamiento prensado con anillo interior giratorio → k6. Los taladros llevan `fit` en drill_hole y los ejes la clase en el NOMBRE («Eje motriz Ø35 h7») — el plano rotula "Ø35 h7 (0/-0.025)" y engineering_check veri…
get_groupsGRUPOS / sub-ensamblajes del documento: nombre, padre (anidación), rol, comandos miembro y members faltantes. Los grupos se CREAN con run_command(type='create_group', params={name, members:[command_ids], parent?, role?}) — la membresía es por COMANDO (estable: las instancias nuevas de un patrón editado entran solas) — y se MUEVEN enteros con run_command(type='transform_group', {group, translate, rotate}). isolate/highlight/fit de render_view, pick_point, drawing y assembly_manual aceptan NOMBRES de grupo directamente. Read-only.
get_jobRecoge el resultado de una mutación que devolvió un RECIBO {"job": id} (run_command, edit_command, set_variable, run_batch, edit_batch o remove_commands tardaron más que la espera; también calc_report, assembly_manual, drawing_set y drawing: guarda el archivo en su `path` o en `path`). Espera hasta `wait_s` segundos (long-poll: responde en cuanto el job termina) y devuelve lo MISMO que habría devuelto la tool (sólidos + `contrato`), o `{"estado": "corriendo"}` si aún no acaba — vuelve a llamar. El resultado queda CACHEADO: re-preguntar es SIEMPRE seguro (no re-ejecuta nada). Si falló (p. ej. c…
get_kinematicsJuntas cinemáticas del modelo (nombre, tipo, padre/hijo, eje, límites).
get_mass_propertiesMasa (kg), centro de gravedad (mm) y bbox por pieza y del CONJUNTO. Sin `ids` analiza todas las piezas visibles; con ids solo esas (aunque estén ocultas). El catálogo pesa por su ficha (dato de placa); lo a-medida por volumen × densidad del material resuelto. Úsalo para vuelco/equilibrio (¿el COG cae dentro de la base?), repartos de carga y BOM de pesos. Read-only.
get_matesMates de ensamblaje del documento (uniones persistentes entre piezas).
get_motionEstudio de movimiento: fotogramas de juntas y duración.
get_requirementsBASES DE DISEÑO del proyecto (requisitos guardados: carga_kg, largo/ancho/ alto_paquete_mm, velocidad_m_s, inclinacion_deg, producto, entorno, normativa…). engineering_check y la memoria de cálculo los usan como defaults. Read-only.
get_scenariosLos escenarios de prueba del proyecto (la FAT virtual) con su estado: sin_correr, pasa, falla, sin_aserciones o vencido (la máquina o el escenario cambiaron desde la última corrida); con `nombre`, ése entero (definición y último resultado). delivery_check da ROJO si uno falla y AMARILLO si hay sin correr o vencidos. Read-only.
get_sceneEstado del modelo. Sin argumentos: TODA la escena (sólidos con id/nombre/bbox/volumen/ componente + variables + configuraciones) — cuidado en proyectos grandes. Para trabajar a ESCALA (miles de piezas) usa los filtros y NO vuelques la escena entera: - `summary=true`: entra por aquí — resumen por GRUPO (n_piezas, masa, bbox conjunto, sub-grupos) + «(sin grupo)» + totales + variables. La vista de una ojeada del proyecto. - `ids`: feature_ids o NOMBRES DE GRUPO o de subgrupo (se expanden a sus piezas) → sólo esas. - `name`: substring del nombre (case-insensitive), p. ej. "chumacera". - `limit` …
get_simulationLee por partes el resultado de una co-simulación (simulate con escenario o test_plc): sin `simulacion`, la lista de las últimas (en memoria; un reinicio las pierde). `parte`: 'resumen' (veredicto, aserciones y los NOMBRES de todas las señales), 'eventos' (paginados), 'final' (valores al final; `senales` filtra) o 'trazas' (pide `senales`: nombres D10 como «-M1.rpm», «-K1.%QX0.0», «-K1.cuenta», o patrones «-M1.*»; ventana `desde_s`–`hasta_s`; discretas por cambio y analógicas a 50 Hz, paginadas con `limite`/`offset`). Read-only.
get_stackupEvalúa las CADENAS DE COTAS (stack-up, V7.3): por cadena da el cierre nominal, el intervalo por PEOR CASO y por RSS (√Σt²), y el veredicto contra el requisito. Incluye las cadenas auto del patrón de pernos (join_bolted = cerrada por construcción). Verifica que la suma de tolerancias cierra el ajuste declarado SIN encadenar N measure. scope = all | declared | auto. Read-only.
get_topologyCaras y aristas de un sólido con su geometría descriptiva (tipo plano/cilíndrico, centro, normal/eje, área; longitud, dirección, radio de aristas). Úsalo para ELEGIR el selector declarativo antes de fillet/chamfer/drill/add_mate: caras por orientación (normal) → 'cara'/'direccion'; aristas largas → 'longitud'; cerca de un punto → 'cerca'. Los 'idx' son solo referencia: la selección sigue siendo declarativa, no por id. A ESCALA (piezas con muchos taladros): `only` ∈ {caras|aristas|anclas} trae solo esa familia; `min_mm` omite aristas más cortas que ese valor y caras menores que min_mm² (filtra …
gravity_testSimula la GRAVEDAD sobre TODA la máquina (cuerpos rígidos + colisión por casco convexo, motor MuJoCo) y reporta qué piezas SE CAEN y cuáles aguantan. A diferencia del chequeo estático, la FÍSICA decide si una pieza no-sujeta REPOSA sobre algo firme (no cae) o cuelga en el aire (cae). Por defecto sujeta SOLO lo DECLARADO (ground/fasten); with_autodetect=True suma el contacto geométrico (exploración). `exclude` trata esas piezas como NO sujetas ('¿y si a esta le falta el tornillo?'). Con `path` guarda además un GIF animado de la caída. Read-only: NO modifica el modelo.
list_projectsProyectos guardados (SQLite, con autoguardado).
list_revisionsLista las revisiones (instantáneas restaurables) del proyecto abierto.
measureDistancia mínima (mm) y puntos más cercanos entre dos sólidos a y b (ids). El gap real deja de ser ensayo-error. Opcional: face_a/face_b = selector declarativo (mode cara/direccion/ longitud/cerca) para medir contra UNA cara concreta. 0 = se tocan o solapan. Read-only.
motion_gifGIF animado de un estudio de movimiento, ESCRITO a `path` (las tools no devuelven binarios). Cada fotograma se pinta con el mismo motor VTK que render_view, con la cámara FIJA a la unión de todo el recorrido; `pingpong` añade la vuelta (bucle sin salto). COSTO REAL: el teselado no se cachea entre fotogramas (≈ steps × render de la escena) — en modelos grandes usa steps moderados (24-48) y baja size_px; si supera ~2 min el cliente corta por timeout aunque el servidor termine.
nearConsulta espacial por caja envolvente, de más cerca a más lejos. Da EXACTAMENTE uno de: - `point` [x,y,z]: '¿qué pieza hay por aquí?' (combínalo con pick_point). - `feature` (id): '¿qué RODEA a X?' — distancia AABB-AABB al resto, excluyendo X. - `box` [[min_x,min_y,min_z],[max_x,max_y,max_z]]: '¿qué hay en esta REGIÓN?'. `radius` mm (radius=0 con box/feature = solo lo que lo toca) + `limit` (def. 20). Read-only.
nestingOptimización de corte (nesting) para minimizar desperdicio. `mode`: "2d" (tableros/ vidrio en planchas stock_w×stock_h) o "1d" (barras/largueros de largo stock_w). `material` filtra (madera/vidrio/acero...). Devuelve nº de planchas/barras y % de desperdicio; el plano del acomodo está en GET /api/nesting.svg|dxf (mismos params). Read-only.
open_projectAbre un proyecto por id. Devuelve además un `briefing` compacto (V6.5b) para arrancar la sesión en UNA llamada: resumen por GRUPO (n_piezas/masa/bbox) + variables + requisitos + notas del agente + salud (ok/suprimidos) + variantes de diseño. Ya NO hace falta encadenar get_scene(summary)+get_requirements+get_agent_notes al abrir.
pick_pointPÍXEL→3D: 'señala' un punto en un render y obtén qué pieza/cara hay ahí. (u,v) son coordenadas NORMALIZADAS [0,1] de la imagen (0,0 = arriba-izquierda). Devuelve la feature/cara cuyo centro proyectado queda más cerca + su coordenada mundo (snap a geometría con la MISMA cámara del render VTK). Así seleccionas/ubicas apuntando en vez de calcular coordenadas. IMPORTANTE: pasa los MISMOS `view`/`azimuth`/`elevation`/`roll`/`pan`/`fit_ids`/`zoom` que usaste en `render_view` para esa imagen → así el píxel coincide con lo que viste (incluido el ángulo libre, el roll y el encuadre desplazado). Si rend…
previewGHOST: aplica `actions` (mismo formato que run_batch: [{type, params}, …]) sobre una COPIA del documento SIN tocar el modelo real — ensaya una colocación y equivocarte sale gratis (sin escombro de log). Dos modos: - `data=false` (default): devuelve el PNG con los sólidos nuevos resaltados (para VERLO). `labels` rotula ids; `section` ∈ {x,y,z} corta para ver dentro. - `data=true` (V6.5d): devuelve JSON `{fantasmas:[{name,bbox,volumen_mm3}], colisiones_ nuevas:[{a,b,tipo,volumen_mm3}]}` — las colisiones SOLO de los fantasmas (contra la escena y entre sí). Prueba N colocaciones con datos EX…
propose_commandsPropone a la persona un lote ORDENADO de comandos CAD como tarjetas de acción: NO se ejecuta nada hasta que la persona lo acepte. Mismo formato que run_batch ([{type, params, reason}, …]; los parámetros de cada comando, con get_command_schemas(command_type)). '$k' (1-indexado) referencia la pieza creada por la k-ésima acción del lote. Antes de mostrarse se ensaya en seco sobre una copia del documento: si una acción falla recibes el error para corregir y volver a proponer. Manda TODO el lote en una sola llamada.
publication_gateLA PUERTA DE PUBLICACIÓN: córrela ANTES de dar por terminada una máquina que va a la tienda (después de delivery_check en VERDE). Es más dura que la de entrega: un registro de ítems de calidad (estructura, función, montaje, seguridad, publicado, proceso), cada uno OK | FALLA | SIN_EVALUAR | NO_APLICA con su evidencia; se publica SÓLO si todo ítem aplicable está OK (SIN_EVALUAR bloquea igual que FALLA: «no se pudo ver» no es «está bien»). Corre la gravedad (obligatoria), las interferencias DENTRO de cada super-comando, el agarre de cada perno, el tensor y su carrera, la vida útil (L10 ≥ 20 000 …
quotationGenera la COTIZACIÓN (PDF multipágina) y la guarda en `path` (.pdf): resumen económico (catálogo vs fabricación, desglose por categoría, margen %, impuesto % opcional, PRECIO DE VENTA, notas) + detalle de partidas con la FUENTE de cada precio. Complemento comercial de calc_report. Si algo se cobra dos veces (dispositivo sin ligar a su pieza 3D) o no se cobra (cable 3D sin add_cable), devuelve `avisos` con su `monto_en_riesgo_usd` y cómo arreglarlo; el PDF los lista en su hoja 2. Precios referenciales: confirmar con proveedor.
redoRehace la última operación deshecha. `detail` como en undo (`rehecho` = qué rehízo).
remove_commandsBorra comandos del log por command_id (cirugía: quitar una pieza, un sub-ensamblaje o uniones) en UN cambio atómico, deshacible con UN undo. Si queda una referencia rota (un fijador, anclaje, junta o mate que nombra una pieza borrada) no borra NADA y el error dice cuál estorba, lista los dependientes y cuáles arrastraría `con_dependientes=true`. Éste borra además los fasten y ground que nombran las piezas de esos comandos y los quita de sus grupos, sin buscarlos con find_commands; la respuesta los lista en `dependientes` y `grupos_editados` (un grupo que quedaría vacío no se toca: lo dice `avi…
render_viewRender del modelo para VERLO. SIEMPRE motor VTK → sombreado SUAVE a color (color real por pieza, igual que el viewport web), normales interpoladas, sin bandas ni cuadrícula: la captura más limpia para auto-revisar tu trabajo. (Si el entorno no tuviera contexto OpenGL, da error claro en vez de degradar a una imagen con rejilla.) view ∈ {iso, frente, lateral, planta} elige el ángulo preset; azimuth/elevation (GRADOS) lo ANULAN para enfocar desde un ÁNGULO LIBRE cuando ningún preset sirve (azimuth = giro alrededor de Z, elevation = altura sobre el plano; override parcial: puedes dar solo uno). is…
resolve_expressionEvalúa una expresión (=expr) contra las variables del proyecto SIN modificar nada; devuelve {ok, value} o {ok:false, error}. Para comprobar una fórmula antes de usarla.
restore_revisionRestaura una revisión por id (red de seguridad tras ediciones arriesgadas).
run_batchEjecuta un lote ordenado de comandos [{type, params}, …]. Usa '$k' en los campos de id de feature para referenciar el sólido creado por la k-ésima acción del lote. `detail`: "diff" (def.) devuelve solo los sólidos creados por el lote + `total_solidos`; "full" toda la escena; "summary" solo id/nombre. Un `fasten` por conjuntos suma `uniones_expandidas` (cuántas uniones declaró cada uno). `expect` (CONTRATO, V6.5b) = lista de ASERCIONES estilo verify (distancia/volumen/bbox/ sin_interferencia/existe) que DEBEN cumplirse tras el lote; si alguna falla, el lote se revierte POR COMPLETO (el document…
run_commandEjecuta un comando CAD (ver get_command_schemas). Los campos numéricos aceptan '=expresión' con variables del proyecto. `detail`: "diff" (def.) devuelve solo los sólidos nuevos + `total_solidos`; "full" toda la escena; "summary" solo id/nombre de lo nuevo (con más de 40, "diff" y "summary" resumen `por_comando`). El bloque `variables` solo aparece si la operación tocó alguna (o detail="full"); usa get_scene para verlas siempre. Si tarda, recibes un RECIBO {"job": id}: recógelo con get_job(id) y NO reenvíes el comando.
save_configurationGuarda una VARIANTE SIN aplicarla: sólo sus COLUMNAS (las variables que la distinguen; lo demás es común). Sin `values` toma el valor ACTUAL de las columnas; la primera variante pide `values` (p. ej. {"largo_total": "4000"}), que crea o edita; una clave nueva entra en todas.
save_live_sessionVuelve una SESIÓN EN VIVO (la persona maneja la máquina en el visor: aprieta el verde, la seta…) en el escenario de prueba `nombre`: sus acciones y eventos con la hora virtual en que entraron, sobre su escenario de base y con la cola de cajas que tuvo la sesión. La corre por lote (las mismas trazas que se vieron) y devuelve `aserciones_sugeridas` con lo que pasó («-M1.rpm >= 1570 dentro_de 1.6 s desde pulsar -S1», «-M1.par_Nm == 0 dentro_de 0.2 s desde presionar -S0»), todas verdes sobre esa corrida: NO quedan en el escenario; acepta las que quieras con set_scenario(nombre, {…el `escenario` de…
save_revisionGuarda una revisión (instantánea restaurable) del proyecto abierto.
scan_motionEscanea las COLISIONES de un estudio de movimiento a lo largo del recorrido: muestrea `steps` instantes (FK + interferencia por instante — costo ≈ steps × check_interference posado) y devuelve SOLO los que colisionan, con pares y volumen. Lista vacía = recorrido limpio. Corre esto tras cada cambio del mecanismo; para garantizarlo por CONTRATO en un lote usa `expect` con joint_values. Read-only.
set_colorColor de VISUALIZACIÓN de uno o VARIOS sólidos ('#rrggbb'; None = volver al color automático). Pasa `feature` (uno) o `features` (lote — atómico), no ambos. Solo apariencia del viewport/render — no toca material, BOM ni peso.
set_materialFija (anula) el material de uno o VARIOS sólidos para el BOM/peso/rayado de sección. Pasa `feature` (uno) o `features` (lote — N piezas en 1 llamada, atómico: un id inexistente no aplica nada), no ambos. material=None vuelve al automático (catálogo o heurística por nombre). Ej.: 'acero', 'aluminio', 'acero inoxidable', 'laton', 'madera', 'vidrio'.
set_motionDefine (o borra, con lista vacía) un ESTUDIO DE MOVIMIENTO con nombre — autoría de cinemática sin salir del MCP (V6.8-C). Fotograma: {"t": segundos, "values": {junta: valor}} — los valores van ANIDADOS en "values" (el formato plano se rechaza) y las juntas se validan contra las declaradas (get_kinematics). OJO FK: una junta mueve solo sus HIJOS declarados — completa un cuerpo rígido multi-pieza con juntas 'fija' colgadas del conductor. Verifica el recorrido con scan_motion, míralo con motion_gif; en la UI aparece en el panel Cinemática.
set_requirementsGuarda las BASES DE DISEÑO del proyecto (reemplaza el dict completo; {} borra). Claves numéricas de convención: carga_kg, largo_paquete_mm, ancho_paquete_mm, alto_paquete_mm, velocidad_m_s, inclinacion_deg, temperatura_c. Texto libre: producto, entorno, normativa, notas. Con esto `engineering_check()` y `calc_report()` funcionan SIN argumentos y validan contra LO PEDIDO. Se persisten con el proyecto.
set_scenarioDeclara (o reemplaza) un ESCENARIO de prueba de la máquina con tablero; `escenario` null lo borra. Es metadato (no entra al log ni al undo). Forma: {duracion_s, descripcion?, condiciones?: {red_conectada, selectores {"-S5": "I"}, setas_retenidas [], plc_run}, acciones: [{t, accion: pulsar|soltar|presionar|liberar|girar|rearmar|abrir|cerrar| reponer, dispositivo, valor?, durante_s?, actuador?}], eventos: [{t, tipo: atasco (junta, par_Nm) | corte_de_fase (fase) | caida_de_red (factor) | cable_cortado (rama «-W3») | sensor_pegado (dispositivo) | falla | pro…
set_stackupDeclara una CADENA DE COTAS 1D con nombre (metadato del proyecto, se persiste; lista de eslabones vacía → la borra). Cada eslabón es UNO de: - {nombre, nominal_mm, sentido:±1, tol} — cota literal; nominal_mm acepta '=expr' (sigue a las variables → la cadena se re-verifica al cambiarlas). - {id, eje:x|y|z, sentido:±1, tol?} — mide el BBOX VIVO de esa pieza (auto-actualiza). `tol` es UNA fuente: {"pm":0.2} (± mm) · {"fit":"h7"} (ISO 286) · {"iso2768":"m"} (general) · {"lim":[lo,hi]} (límites absolutos). `requisito` de cierre: {min_mm|max_mm|entre:[a,b]}. Devuelve la evaluación inmediata (peor …
set_variableDefine o actualiza una variable de proyecto (p. ej. L = 2000). Cambiarla regenera todo lo que la usa. Si tarda, recibes un RECIBO {"job": id}: recógelo con get_job(id) y NO la reenvíes.
set_verticalDefine el vertical del proyecto ('metalmecanica' | 'carpinteria'), que fija el material por defecto de las piezas a-medida NO reconocidas (acero | madera).
set_visibilityMuestra u oculta un sólido individual (útil para aislar antes de render_view).
set_visibility_bulkMuestra u oculta varios sólidos a la vez (patrón aislar / mostrar todo).
simulateSimula la máquina EN MARCHA (dinámica MuJoCo): las juntas giran o deslizan movidas por `motores`, los `productos` (cajas) viajan sobre la banda o los rodillos y los `sensores` (fotoceldas) los ven pasar. Lo sujeto a tierra (ground/fasten) es estático; una pieza sin sujeción ni junta queda FUERA con aviso (eso lo prueba gravity_test). Unidades: mm, kg, s. - motores: [{junta, modo: 'velocidad'|'par', ...}]. 'velocidad' pide UNA consigna: `valor` (rpm; mm/s si la junta es prismática), `v_superficie_m_s` (banda o rodillo) o `placa` {potencia_kW, rpm, frecuencia_hz?, polos?, tk_tn?, inercia_rot…
test_plcPrueba un programa de PLC en texto estructurado (ST, IEC 61131-3) SIN guardarlo, como test_script. Compila contra los bornes del PLC `plc` («-K1»: %IX0.0 = borne I0.0, %QX0.0 = Q0.0, %IW1 = AI1) y devuelve `compila`, los `errores` con línea y columna («¿quisiste decir…?») y la tabla de `tags`. Con `escenario` (nombre de uno guardado u objeto, como en set_scenario) además CORRE la máquina con este programa en lugar del de ese PLC y devuelve veredicto, aserciones, eventos y las trazas de `senales` (por defecto las del PLC, «-K1.*»). `ciclos` = {PROGRAM: ms}. Cuando funcione, guárdalo con run_com…
test_scriptPrueba en seco un script build123d en el sandbox: devuelve {ok, volumen_mm3, bbox} o {ok:false, error} SIN tocar el documento. Itera la geometría sin crear/deshacer sólidos.
test_sketchPrueba en seco un croquis: lo resuelve con el solver (PlaneGCS) y devuelve {ok, residual, diagnostico, dof, redundantes, conflictivas, ...} SIN crear geometría. dof = grados de libertad restantes (0 = totalmente restringido); redundantes/ conflictivas identifican las restricciones culpables por nombre. Soporta tangent/ symmetric/equal_radius/concentric/midpoint/distance_point_line además de los tipos clásicos (el formato completo está en el schema de sketch_extrude). Itera hasta dof=0 sin redundantes antes de extruir/barrer.
undoDeshace la última operación. `detail`: "diff" (def.) responde lo que cambió el paso —`deshecho` (qué revirtió), comandos quitados/restaurados/editados, piezas y uniones nuevas o borradas, `variables` cambiadas y `total_solidos`—; "full" lista toda la escena.
verifyVerifica en UNA llamada un lote de ASERCIONES numéricas sobre el modelo (READ-ONLY) — declara tus INVARIANTES y compruébalas de golpe en vez de encadenar N measure + aritmética mental. Devuelve {ok, resultados:[{check, ok, actual, esperado}]}. Cada aserción es un dict con `tipo` (y un `nombre` opcional para etiquetarla): - {tipo:"distancia", a, b, min?|max?|entre?:[lo,hi]} — gap OCCT entre dos sólidos. - {tipo:"volumen", id?|grupo?|ids?, min?|max?|entre?} — volumen (suma si son varios). - {tipo:"bbox", id?|grupo?|ids?, eje:"x"|"y"|"z", min?|max?|entre?} — tamaño de la caja conjunta. - {tipo:"s…
Signals
- Stars
- 3
- Forks
- 2
- Open issues
- 0
- Weekly downloads
- 27
- Last commit
- Oct 24, 2026 (4 days ago)
- Last release
- Aug 8, 2026 (2 months ago)
- Last package publish
- Aug 8, 2026 (2 months ago)
From GitHub (fetched Oct 24, 2026) and the package registry.
Details
- Registry name
io.github.mariorojasmz/apolo-cad- Version
- 0.1.0
- Auth
- No auth
- Packages
- pypi apolo-cad
- License
- MIT
- Repository
- github.com/mariorojasmz/apolo-cad
- First seen
- Oct 24, 2026
- Last checked
- Oct 24, 2026
Cite this page
Apolo Cad MCP server. Agent Mart. https://agentmart.dev/connectors/mariorojasmz-apolo-cad (last updated 2026-10-24)