Skip to main content
Glama
aalperakiss

acp-mcp-agent

by aalperakiss

acp-mcp-agent

Licencia: Apache 2.0 Python 3.10+ Plataforma: Windows ANSYS 2026 R1

Resumen

Un servidor MCP que permite a un agente LLM manejar ANSYS Composite Pre [ACP(Pre)] — leer un laminado, cambiar ángulos de fibra y número de capas, comprobar reglas de fabricación y exportar el modelo de análisis y las definiciones de composite.

Se comunica con ACP de dos maneras, y la diferencia importa:

agent ─┬─ acp_*      ──► PyACP ──► acp_grpcserver.exe   headless, batch / optimisation
       └─ acp_gui_*  ──► TCP 47800 ──► ACP-Pre GUI      live, visible on screen

PyACP lanza su propia sesión ACP sin interfaz y no puede conectarse a una ventana ACP-Pre en ejecución. Por eso existe una segunda vía: un pequeño listener de socket que se ejecuta dentro del Python embebido de la GUI, que ejecuta las ediciones del modelo en el hilo principal de wx. Los ángulos cambian y el viewport se redibuja mientras lo observas.

Las dos sesiones son independientes. acp_gui_* edita el modelo abierto en la GUI; acp_* edita el de la sesión sin interfaz. Elige una por tarea y quédate ahí.

El alcance es la mitad aguas arriba del bucle de composites. La resolución y el postprocesado permanecen donde ya funcionan:

acp-mcp-agent (lay-up) ──► analysis model ──► Mechanical (BC / mesh / solve)
                       ──► composite defs ──► PyDPF-Composites

Related MCP server: ansys-aedt-mcp

Demostración en vivo

Requisitos

ANSYS

con ACP. Desarrollado y probado con 2026 R1 (AWP_ROOT261)

Python

3.10+ para el lado del servidor — cualquier intérprete que lance tu cliente MCP

Paquetes

mcp, pydantic, ansys-acp-core (ver requirements.txt)

SO

Windows. El puente en sí es portable, las rutas documentadas no lo son

Cliente

Cualquier cliente MCP. Verificado con Claude Desktop

ANSYS no es un paquete pip. ansys-acp-core inicia el servidor gRPC de ACP desde una instalación local de ANSYS; sin una, nada de esto se ejecuta.

El puente de la GUI no necesita nada instalado: se ejecuta dentro del Python embebido de ACP-Pre (3.10 en la versión probada 2026 R1) y usa solo la biblioteca estándar más wx, que ACP-Pre ya proporciona.

Rutas

Nada en este repositorio tiene una ruta específica de máquina compilada. Una variable de entorno lleva la ubicación:

Variable

Leída por

Significado

ACP_BRIDGE_PATH

acp_mcp.py, install_autoload.py, acp_gui_autoload.py

ruta completa a acp_gui_bridge.py

ACP_PROBE_OUT

00_probe_pyacp.py, gui_probe.py

dónde escribir la salida de la sonda (por defecto: junto a 00_probe_pyacp.py, directorio temporal para la sonda de la GUI)

ACP_PROBE2_OUT

gui_probe2.py

dónde escribir la salida de la sonda (por defecto: directorio temporal)

install_autoload.py incrusta la ruta resuelta en el modelo donde se instala, por lo que la copia embebida no necesita variable de entorno después.


Estructura del repositorio

acp_mcp.py              the MCP server - 15 tools, stdio transport
acp_gui_bridge.py       socket listener that runs INSIDE ACP-Pre
acp_gui_autoload.py     tiny loader, embedded in a model for a persistent bridge
install_autoload.py     embeds the loader in the open model, one call
mcp_config.example.json client registration template
requirements.txt
probes/
  00_probe_pyacp.py     stage 1: what this PyACP install actually exposes
  gui_probe.py          GUI console API exploration
  gui_probe2.py         deeper GUI console API dump
docs/
  pyacp_api_report.txt  reference probe output (yours lands in probes/)
  gui_probe2_out.txt    reference GUI console dump, 2026 R1
  acp-scripting-notes.md   undocumented ACP behaviour worth knowing

Configuración desde cero

1. Instala el lado de Python

git clone https://github.com/aalperakiss/acp-mcp-agent.git
cd acp-mcp-agent
pip install -r requirements.txt

¿Entregado como zip en lugar de repositorio? Descomprímelo en cualquier lugar, cd a la carpeta y ejecuta la línea de pip install — nada aquí depende de git, y las rutas en este README son todas relativas a la raíz de la carpeta.

Usa un solo intérprete y recuerda su ruta absoluta — venv, Anaconda, lo que sea — pero debe ser exactamente el intérprete que pongas en la configuración del cliente. Un servidor que "no encuentra mcp" casi siempre es un segundo Python.

2. Prueba tu instalación de ANSYS

python probes\00_probe_pyacp.py

Solo sonda de sesión: si launch_acp() falla aquí, nada más abajo importa. El informe cae en probes\pyacp_api_report.txt; docs\pyacp_api_report.txt es la referencia de la máquina de desarrollo, guardada para comparar. Luego apúntalo a un modelo:

python probes\00_probe_pyacp.py C:/path/to/your.acph5

PyACP renombró varios métodos entre versiones, así que acp_mcp.py resuelve cada operación en tiempo de llamada desde el diccionario CANDIDATES cerca del inicio del archivo. Compara el informe de la sonda con CANDIDATES, PLY_ANGLE_ATTRS y PLY_COUNT_ATTRS, y añade cualquier nombre real que falte — un lugar, una edición.

¿Necesitas un .acph5? Abre ACP-Pre y Archivo → Guardar como. Tener ACP-Pre abierto no ayuda a PyACP por sí mismo.

3. Registra el servidor con tu cliente

La configuración de Claude Desktop está en %APPDATA%\Claude\claude_desktop_config.json. Pega la entrada acp de mcp_config.example.json dentro del objeto mcpServers existente, junto a lo que ya haya. No reemplaces el archivo. Cuida las comas y duplica cada barra invertida (o usa barras normales).

Luego cierra el cliente por completo — incluida la bandeja del sistema — y vuelve a abrirlo. La lista de herramientas se fija al inicio; un cliente en ejecución nunca verá un servidor nuevo.

Comprobación rápida sin cliente:

npx @modelcontextprotocol/inspector python acp_mcp.py

4. Verifica la mitad sin interfaz

Llama en orden, confirmando que cada una devuelve JSON en lugar de Error:

  1. acp_import_model

  2. acp_get_layup

  3. acp_set_ply_angles — cambia una capa, luego vuelve a leer el laminado

  4. acp_check_layup_rules — las violaciones en un modelo real son normales

  5. acp_update_and_export

  6. acp_save_for_gui — abre el resultado en ACP-Pre y revísalo visualmente

Eso ya es trabajo útil: abrir un modelo, listar el laminado, cambiar ángulos, comprobar reglas, exportar. Vale la pena convivir con ello un tiempo antes de automatizar más.

5. Inicia el puente de GUI en vivo

Abre ACP-Pre con un modelo, abre la consola de Python y pega una línea:

exec(open('<repo>/acp_gui_bridge.py').read())

Deberías ver:

[acp_gui_bridge] listening on 127.0.0.1:47800

Ahora acp_gui_status del agente devuelve pong: true y el nombre del modelo abierto. Desde ahí acp_gui_set_ply_angles redibuja el viewport en vivo.

El listener vive en el proceso de ACP-Pre. Cierra ACP-Pre y desaparece — pega la línea de nuevo, o hazlo persistente como abajo.

6. Puente persistente (opcional)

Incrusta el autoloader en el modelo como objeto Script, para que ACP-Pre inicie el listener por sí solo. En la consola de ACP-Pre:

import os
os.environ['ACP_BRIDGE_PATH'] = '<repo>/acp_gui_bridge.py'
exec(open('<repo>/install_autoload.py').read())

Luego guarda el modelo. Tres cosas hacen que esto sea seguro en lugar de imprudente:

  • El cargador está embebido, el puente no. Un objeto Script almacena el código como cadena, así que incrustar todo el puente enviaría un listener a cada máquina que abra el archivo. El cargador lee el puente desde el disco en su lugar; sin archivo, sin listener, una línea impresa.

  • Es idempotente. El modo always se dispara en cada model.update(), incluida la actualización que el propio puente dispara tras una edición de capa. La protección en sys._acp_bridge evita que se reenlace el puerto 47800 a mitad de una petición.

  • Obtiene db por sí mismo. Los objetos Script se ejecutan con globales vacíos — sin db, sin model. El cargador alcanza el espacio de nombres de la consola a través de __main__.

Los Scripts se ejecutan al actualizar el modelo, no al abrir el archivo, así que install_autoload.py dispara una actualización para levantar el listener de inmediato. Para eliminarlo después, pon model.scripts['acp_agent_bridge'].active = False y guarda.

Aun así, mantén una copia separada habilitada para agente de los modelos compartidos. Un objeto Script es invisible en una revisión de diseño, y un colega que abra tu .acph5 no debería heredar un listener de socket por accidente.


Herramientas

Sin interfaz (PyACP)

Herramienta

Hace

acp_import_model

lanzar una sesión sin interfaz y cargar un modelo

acp_get_layup

capas en orden de apilado: ángulo, capas, material

acp_set_ply_angles

establecer orientaciones de fibra, con ajuste opcional a conjunto fabricable

acp_set_ply_counts

establecer número de capas; 0 desactiva una capa

acp_check_layup_rules

simetría, balance, ±45 exterior, ≤4 consecutivas, fracciones de dirección

acp_update_and_export

actualizar, escribir modelo de análisis y definiciones de composite

acp_save_for_gui

escribir un .acph5 para inspeccionar en ACP-Pre

Primero el vector de diseño, exporta una vez: las herramientas set_* no actualizan ni exportan.

GUI en vivo (puente de socket)

Herramienta

Hace

acp_gui_status

si el puente es alcanzable, qué modelo está abierto

acp_gui_get_layup

leer el laminado del modelo de la GUI

acp_gui_set_ply_angles

establecer ángulos, redibujar inmediatamente

acp_gui_set_ply_counts

establecer número de capas, redibujar inmediatamente

acp_gui_add_ply

añadir nuevas capas de modelado, heredando material y OSS

acp_gui_save

guardar el modelo de la GUI

acp_gui_export

exportar modelo de análisis / definiciones de composite desde la GUI

acp_gui_exec

Python arbitrario en la sesión en vivo, con db y model en alcance

Prefiere las herramientas tipadas sobre acp_gui_exec para ediciones rutinarias; la herramienta de forma libre es para exploración y casos puntuales.

acp_gui_add_ply toma una lista de ángulos y añade una capa por entrada, en orden de apilado. El material y el conjunto de selección orientado se heredan de una capa existente (la última del grupo por defecto, o copy_from), porque create_modeling_ply necesita referencias a objetos que un agente no puede mantener. Un grupo sin capas en absoluto no puede sembrarse desde aquí — crea la primera capa en ACP-Pre.

Los ángulos se ajustan a 0, ±15, ±30, ±45, ±60, 90 por defecto. Desactiva el ajuste explícitamente cuando quieras orientaciones intermedias.


Solución de problemas

Síntoma

Causa

Faltan herramientas nuevas tras editar la configuración

Cliente no reiniciado por completo. La lista de herramientas se fija al inicio

Cannot reach the live ACP-Pre bridge

ACP-Pre cerrado, o el puente nunca se cargó en este proceso

La llamada al puente agota el tiempo tras 300 s

GUI ocupada — un diálogo abierto bloquea el hilo principal

No active model

ACP-Pre en ejecución sin modelo cargado

launch_acp() falla

ANSYS no encontrado, o el Python incorrecto. Revisa la sonda primero

Puerto 47800 en uso

Un listener huérfano. sys._acp_bridge.stop() en la consola


Brechas conocidas

  • acp_check_layup_rules aplana todo en una sola pila. Las piezas de varias regiones necesitan agrupación por OSS antes de que esto sea fiable en geometría real.

  • La creación de capas existe solo en la interfaz gráfica en vivo (acp_gui_add_ply). Las herramientas acp_* sin interfaz gráfica todavía solo editan capas existentes, por lo que un modelo controlado a través de PyACP debe construirse con suficientes capas de repuesto desde el principio.

  • Aún no existe una herramienta para eliminar capas. Desactive una capa con acp_gui_set_ply_counts establecido en 0.

  • La herramienta de exportación no informa de la masa; la ruta del atributo varía demasiado entre versiones como para adivinarla. Añádala una vez que su informe de sondeo muestre la real.

  • Verificado solo contra una versión de ANSYS. El mecanismo CANDIDATES existe porque las versiones más antiguas y más nuevas diferirán.

  • Sin pruebas. La ruta de verificación es el sondeo más la secuencia manual de herramientas en los pasos 4 y 5.

  • El bucle de optimización no se ha iniciado. Tres decisiones siguen abiertas: si el optimizador llama a ACP directamente o a través de MCP, si la resolución se ejecuta en lote o a través de un MCP de Mechanical, y qué conjunto de criterios de fallo establece la restricción. Prevea un modelo sustituto: una evaluación es una resolución completa, y 200 de ellas son como mínimo un día de trabajo.

Nota de seguridad

El puente escucha solo en 127.0.0.1 y no tiene autenticación. acp_gui_exec ejecuta Python arbitrario dentro de ACP-Pre. Cualquier cosa que pueda alcanzar ese puerto en la máquina tiene el mismo poder. No lo vincule a 0.0.0.0 y no lo ejecute en una sesión compartida.


Contribuciones

Se aceptan issues y pull requests, especialmente informes de sondeo de versiones de ANSYS distintas de 2026 R1: esa es la forma más rápida de completar CANDIDATES. Adjunte el probes/pyacp_api_report.txt generado e indique la versión.

Las contribuciones se aceptan bajo la Licencia Apache 2.0 (véase la sección 5 de la licencia). Sin CLA.

Licencia

Licencia Apache 2.0 — consulte LICENSE y NOTICE.

ANSYS, ACP, Composite PrepPost, Mechanical y Workbench son marcas comerciales de ANSYS, Inc. Este proyecto es una integración independiente y no está afiliado, respaldado ni soportado por ANSYS, Inc. Aquí no se redistribuye ningún software ni documentación de ANSYS; se requiere una instalación local de ANSYS con licencia.

Maintenance

ActivityMaintained
ResponsivenessSyncing

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Connectors

Related MCP Servers

  • A
    license
    B
    quality
    C
    maintenance
    Enables AI agents to automate COMSOL Multiphysics simulations, including model management, geometry building, physics configuration, meshing, solving, and results visualization through the MCP protocol.
    78
    MIT
  • A
    license
    Not graded
    quality
    B
    maintenance
    Enables AI agents to automate COMSOL Multiphysics simulations, including model management, geometry building, physics configuration, meshing, solving, and results visualization via the MCP protocol.
    MIT

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/aalperakiss/acp-mcp-agent'

If you have feedback or need assistance with the MCP directory API, please join our Discord server