Skip to main content
Glama
Erryb95

aras-plm-mcp

by Erryb95

Consultar antes de intentar

aras_how_to responde "cómo hago X desde un cliente externo" y "por qué este error" antes de que el modelo comience a adivinar.

Deliberadamente no indexa la documentación oficial de Aras. Este corpus describe el JavaScript del lado del cliente y el código C# del lado del servidor — precisamente las rutas que no funcionan desde el exterior —, por lo que señalizaría con confianza hacia callejones sin salida. La respuesta del Manual del programador para adjuntar un archivo es aras.vault.selectFile, que solo existe dentro del cliente de Arasexists.

Se basa en dos fuentes que son realmente confiables:

  1. Conocimiento verificado contra una instancia real, con el mensaje de error que Aras devuelve. <Complete>1</Complete>, <ApplyItem> aplicando solo el primer elemento de un lote, los ItemTypes dependientes teniendo que ser creados dentro de la relación — ninguno deesto está en ningún manual.

  2. La instancia en sí — su catálogo UserMessage y Methods instalados. Esa es la verdad de esaa instalación en lugar de una genérica.

Y lo dice cuando no sabe, en lugar de devolver la coincidencia más cercana. Una herramienta que responde a todo es tan inútil como una que no responde a nada.

Related MCP server: kicad-mcp

Decisiones de diseño que vale la pena conocer

Solo lectura de forma predeterminada. Las escrituras en un PLM están versionadas y auditadas, por lo que se encuentran activadas a propósito: ARAS_READONLY=false. Cada una de las 21 herramientas de escritura con código se rechaza cortésmente mientras que true.

dryRun predeterminado a activado para operaciones masivas. aras_replace_component y aras_bulk_update te muestran las filas flexibles y no cambian nada hasta que lo pidas.

La eliminación se planifica antes de llevarse a cabo. aras_plan_delete informa qué hace referencia al elemento y se negar cuando algo lo hace. Cuando no puede verificar una relación, devuelve -1 en lugar de pretender que la relación está vacía— una comprobación honesta es mejor que otra que te tranquilice de forma gratuita.

Las denegaciones de datos se descifran. Aras devuelve un HTTP 500 se para un permiso denegado, no un 403. aras_get_type_permissions te dice qué identidad falta; aras_lookup_error busca el mensaje en el catálogo UserMessage.

Las referencias de elementos solo llegan como anotaciones, y solo con $select. Consultar Part BOM con $select produce related_id@aras.id y related_id@aras.keyed_name; sin él, no viene nada y las filas parecen metadatos opacos. Esto es codé una vez en readItemRef() (src/aras/odata.ts) para que ningún llamador tenga que recordarlo. También es la forma más sencilla de construir un navegador de BOM que devuelve silenciosamente un árbol vacío.


Instalación

npm install
npm run build

Copia .env.example a .env y rellénalo. Para Claude Code, agrégalo a .mcp.json:

{
  "mcpServers": {
    "aras-plm": {
      "command": "node",
      "args": ["/path/to/aras-plm-mcp/dist/index.js"],
      "env": {
        "ARAS_URL": "http://localhost/InnovatorServer",
        "ARAS_DATABASE": "InnovatorSolutions",
        "ARAS_USER": "admin",
        "ARAS_PASSWORD": "…",
        "ARAS_CLIENT_ID": "IOMApp",
        "ARAS_READONLY": "true"
      }
    }
  }
}

La autenticación es OAuth 2.0 con contraseña de propietario de recursos contra el cliente IOMApp, ámbito de Innovator.

Requiere Node 20+ y una instancia de Aras Innovator con la que tengas permitido hablar.


Cinco pruebas

Cada suite corre contra una instancia viva, escribe solo en elementos con prefijo ZZ-, y los elimina después. El último flujo asegura que los datos de producción no hayan sido tocados.

node test-flussi.mjs      # ten whole business flows, request to conclusion
node test-demo.mjs        # the 39 blocks of the demo script, one by one
node test-full.mjs        # connection, discovery, reading, navigation
node test-product.mjs     # BOM, where-used, AML, documents, revisions
node test-lifecycle.mjs   # lifecycle, transitions, roles
node test-schema.mjs      # custom ItemTypes and properties
node test-admin.mjs       # identities and permissions
node test-analytics.mjs   # dashboards, metrics, effectivity
node test-reports.mjs     # reports, saved queries, sequences, methods
node test-write.mjs       # read-only refusals
node test-writepath.mjs   # real writes, created and removed

test-flussi.mjs es el interesante. No prueba herramientas—seeciona preguntas, que es como alguien en una empresa se las preguntaría:

"Un diseñador se ha unido: crea su cuenta y ponla en el departamento correcto." "Encodifica un nuevo componente, llévalo por la aprobación, y publícalo." "Reemplaza un componente en todas partes, pero antes dime dónde caería." "Prueba de eliminar un componente que se usa en un BOM: debe negarse."


Lo que no funciona, y por qué

Cuatro cosas son inaccesibles desde un cliente externo. Esto no es un descuido y cada herramienta afectada lo dice y señala la alternativa en lugar de fallar de manera opaca.

Evidencia

Subir archivos al vault

Seis intentos distintas, todas rechazadas: File Item cannot be added, Can't bind model. El manual del programador solo documenta JavaScript al lado del cliente (aras.vault.selectFile) y C# lado del servidor (setFileProperty, con una ruta local al servidor)

Expresiones de efecto en un BOM

definiciones es un dialecto XML no documentado; Aras responde 'named-constant' or 'constant' node must be presented

Ejecutar consultas de Query Builder

No hay ninguna acción AML que ejecute un qry_QueryDefinition guardado desde fuera

Informes basados en JavaScripts

Method type not supported: JavaScript — porque es código del cliente

La lectura, por otro lado, funciona y está verificada. aras_read_file descarga el contenido a través del recurso de media OData (File('<id>')/$value), siempre recurriendo al punto de enlace del vault, y entrega algo legible: texto para formatos de texto, texto extraído para PDF que contengan alguno, y la imagen en sí misma para PNG/JPEG/GIF/WebP para que se pueda ver de verdad. Un dibujo escaneado dice que necesitaría OCR en lugar de devolver un string vacío.

docs/field-notes.md es el registro de campo: cada defecto que la prueba en vivo sacó a la luz, y la exacta error que prueba cada límite.


Documentación

Introducción

Desde cero a tu primer respuesta de Aras

Arquitectura

Cómo está compuesta, y la trampa que da forma a todo

Recorrido

Diez flujos comerciales completos, como preguntas

Pruebas

Las suites y cómo ejecutarlas sin dañar nada

Notas de campo

Lo que las pruebas en vivo transportan: defectos encontrados y cuatro cosas que no funcionan

docs/it/ contiene el material original italiano: un script de demostración de 39 bloques y el registro de prueba crudo.

Cómo contribuir# aras-plm-mcp

Un servidor MCP para Aras Innovator PLM que conoce el esquema en lugar de adivinarlo.

71 herramientas sobre OData y AML. Probado contra una instancia real de Aras Innovator 2025 (14.35.0): 260 aserciones en diez suites, más un script de demostración de 39 pasos ejecutado de principio a fin. Cada una de las 71 herramientas es ejercitada por al menos una suite, y cada herramienta de escritura es ejercitada realizando una escritura real.


El problema

La API OData de Aras Innovator es dinámica. El documento de servicio responde 501 Not Implemented, y una instancia estándar expone 484 ItemTypes cuyos nombres y propiedades dependen de cómo el administrador configuró el modelo de datos. No hay un catálogo estático que leer.

Un envoltorio HTTP simple — get_items(itemtype, filter) — traslada ese problema al modelo. Tiene que adivinar que el tipo es Part y no Parts, que la lista de materiales es Part BOM y no BOM, que el campo de cantidad es quantity y no qty. Cada solución equivocada es una ida y vuelta y un error opaco.

Este servidor inspecciona el esquema y lo devuelve.

aras_describe_item_type  itemType: "Part"
  → 41 typed properties, real mandatory flags, outgoing relationships

Lo que OData solo no puede ver

Hay tres cosas en Aras que son invisibles para OData, y cada una es una pregunta que la gente realmente hace. Este servidor las alcanza a través de AML:

Pregunta

Por qué falla OData

Cómo se responde

"Muéstrame las revisiones anteriores."

OData devuelve solo la generación actual — is_current eq '0' produce cero filas

get ItemAllVersions

"Libera esta pieza."

Las transiciones del ciclo de vida no se exponen como datos

promoteItem, con el rol requerido resuelto primero

"Avanza esta orden de cambio."

EvaluateActivity, incluyendo el <Complete>1</Complete> no documentado

La última se necesitó un registro del servidor para encontrarla. Aras responde An internal error has occured; el registro dice Workflow: EvaluateActivity: Complete value not found.


Herramientas

Herramienta

Qué hace

aras_ping

Conexión, base de datos, usuario, recuento de ItemTypes

aras_list_item_types

Listar/buscar ItemTypes, tolerante a errores tipográficos

aras_describe_item_type

Atributos tipados, indicadores obligatorios, relaciones salientes

aras_search

Búsqueda en multitud de tipos* sobre varios ItemTypes a la vez

aras_get_list_values

Valores permitidos para atributos basados en listas

aras_how_to

Consultar antes de intentar: qué funciona desde fuera y por qué un error significa lo que significa

aras_query_items, aras_get_item, aras_get_relationships, aras_get_bom, aras_where_used, aras_get_documents, aras_get_aml, aras_get_files, aras_read_file, aras_get_history, aras_get_revisions, aras_get_my_identities, aras_get_identity_members, aras_export_aml

aras_get_bom (explosión recursiva con cantidades acumuladas y detección de ciclos por rama), aras_manage_bom_line, aras_replace_component, aras_copy_part, aras_add_manufacturer_part, aras_check_release_readiness, aras_check_effectivity

aras_create_change, aras_add_affected_item, aras_get_change_impact, aras_get_workflow, aras_advance_change, aras_vote_activity, aras_delegate_activity

Mapas de ciclo de vida y estados con el rol que requiere cada transición; usuarios, grupos, pertenencias y permisos; creando ItemTypes con instancias utilizables; tableros, métricas, informes, consultas guardadas, secuencias, procesos; registros del servidor de los archivos Serilog y del ItemType SystemEventLog.

Ejecuta aras_ping primero: te dice lo que tienes conectado.


Consultar antes de intentar

aras_how_to responde "¿cómo hago X desde un cliente externo?" y "por qué ocurre este error" antes de que el modelo empiece a especular.

Deliberadamente no indexa la documentación oficial de Aras. Ese corpus describe JavaScript del lado del cliente y C# del lado del servidor: precisamente las rutas que no funcionan desde fuera, por lo que apuntaría con confianza a callejones roñosos. La respuesta manual del Programador para adjuntar un archivo es aras.vault.selectFile, que solo existe dentro del cliente de Aras.

Se basa en dos fuentes que realmente son confiables:

  1. Conocimiento verificado contra una instancia real, con el mensaje exacto que Aras devuelve. <Complete>1</Complete>, <ApplyItem> aplicando solo el primer elemento de un lote, ItemType dependientes que deben crearse dentro de la relación — nada de esto está en ningún manual.

  2. La propia instancia — su catálogo UserMessage y los Methods instalados. Eso es la verdad de esa instalación, no una verdad genérica.

Y dice cuando no lo sabe, en lugar de devolver la coincidencia más cercana. Una herramienta a que responde todo es tan inútil como una que no responde nada.

Decisiones de diseño que vale la pena conocer

Solo lectura por defecto. Los cambios en un PLM se versionan y auditan, así que se habilitan a propósito: ARAS_READONLY=false. Cada una de las 21 herramientas de escritura se niega amablemente cuando es true.

dryRun y se activa por defecto para operaciones masivas. aras_replace_component y aras_bulk_update te muestran las filas de horas afectadas y no cambian nada hasta que se lo pides.

La eliminación se planifica antes de realizarse. aras_plan_delete informa qué elementos hacen referencia al elemento y se niega si algo lo hace. Cuando no podía verificar una relación devuelve -1 en lugar de fingir que la relación está vacía: una comprobación honesta es mejor que otra que te tranquilice gratis.

Las denegaciones de perros se descifran. Aras devuelve un HTTP 500 genérico para un permiso denegado, no un 403. aras_get_type_permissions te dice qué identity falta; aras_lookup_error busca en el mensaje el catálogo UserMessage.

Las referencias a objetos sólo llegan como anotaciones, y sólo con $select Al consultar Factory con $select obtienes related_id@aras.id y related_id@aras.keyed_name; sin él, no vuelve nada. Esto se codifica una serie en readItemRef() (src/aras/odata.ts) para que ningún llamador tenga que acordarse. También es la manera más rápida de crear un historiador de BOM que devuelve un árbol vacío en silencio.


Instalación

npm install
npm run build

Copie .env.example a .env y rellénelo. Para Claude Code, añadir a .mcp.json:

{
  "mcpServers": {
    "aras-plm": {
      "command": "node",
      "args": ["/path/to/aras-plm-mcp/dist/index.js"],
      "env": {
        "ARAS_URL": "http://localhost/InnovatorServer",
        "ARAS_DATABASE": "InnovatorSolutions",
        "ARAS_USER": "admin",
        "ARAS_PASSWORD": "…",
        "ARAS_CLIENT_ID": "IOMApp",
        "ARAS_READONLY": "true"
      }
    }
  }
}

La autenticación es OAuth 2.0 con credenciales de propietario del recurso contra el cliente IOMApp, ámbito Innovator.

Requiere Node 20+ y una instancia de Aras Innovator a la que te permitan habitar.


Pruebas y verificación

Cada suite corre contra una instancia real, escribe solo en elementos prefijos ZZ- y los elimina después. El último escenarioo afirma que los datos productivos quedaron intactos.

node test-flussi.mjs      # ten whole business flows, request to conclusion
node test-demo.mjs        # the 39 blocks of the demo script, one by one
node test-full.mjs        # connection, discovery, reading, navigation
node test-product.mjs     # BOM, where-used, AML, documents, revisions
node test-lifecycle.mjs   # lifecycle, transitions, roles
node test-schema.mjs      # custom ItemTypes and properties
node test-admin.mjs       # identities and permissions
node test-analytics.mjs   # dashboards, metrics, effectivity
node test-reports.mjs     # reports, saved queries, sequences, methods
node test-write.mjs       # read-only refusals
node test-writepath.mjs   # real writes, created and removed

La -flussi.mjs es el interesante. No prueba herramientas; prueba preguntas, como las haría alguien en una organización con su compañía:

"Un diseñador ha llegado: cread su la cuenta y colóquelo en el departamento correcto." "Codifica un nuevo componente, lo lleva por la aprobación y ahora es" "Reemplaza una componente en todas partes, pero primero dime dónde caería." "Intentelo eliminar un componente que se usa en un BOM: debe negarse."


Qu lo que no funciona, y por qué

Cuatro cosas son inalcanzables desde un cliente externo. Esto no es un e buscado**, y cada herramienta afectada lo dice y señala la alternativa en lugar de fallar de forma opaca**.

La evidencia

Por qué

Subir archivos al vaulto

Seis intentos distintos, todos rechazados: File Item cannot be added, Can't bind model. El Manual de Programadores solo documentó JavaScript de lado del cliente (aras.vault.selectFile) y C# lado del servidor (configuración de setFileProperty, con una ruta local al servidor)

Expresiones de effetividad en un BOM

definition es un dialecto XML no documentado; Ella contesta 'named-constant' or 'constant' node must be present

Ejecutar consultas del Constructor

No hay acción AML que tenga una query_QueryDefinition guardada desde el exterior

Informes basados en JavaScript

Method type not supported: JavaScript: es código cliente

Leer, por otro lado, funciona y está verificado. aras_read_file descarga contenido a través del recurso de media OData (File('develop')/$value) y tiene una fallback al vault. La, ofrece algo legible: texto para formatos de texto, texto extraído para PDF que lo contienen, y la imagen propia para PNG/JPEG/GIF/WebP para que realmente se pueda mirar. Un dibujo escaneado avisa de que necesita OCR en lugar de devolver una cadena vacía.

docs/field-notes.md es el registro de datos: cada defecto que se observó las pruebas en vivo, y el error exacto que establece cada límite.


Documentación

Cómo empezar

De cero a tu primer respuesta desde Aras

Arquitectura

Cómo está formado, mediante la trampa que lo condiciona todo

Recorrido

Diez flujos de trabajo globales, en forma de preguntas

Pruebas (docs/testing.md)

Suits, y conocéase cómo ejecutarlas sin dañar nadaelate.

Notas de campo

La actividad de las pruebas en vivo: fallos encontrados, y cuatro cosas que no funcionan

docs/it/ guarda el material editorial original en italiano: un scriptdemo de 39 bloques y el registro fuente de pruebas en bruto.

Contribuciones

Traduce solo el texto de la pregunta, respetando la táctica y el contenido y evitar extra poner éip que no estaba. En español, no se traduce ItemType, ni los nombres de herramientas como aras_get_item, etc.204

Ser aclamólico y preserva los format de las tablas.

En "El problema" párrafo, hay una variación: "A thin HTTP wrapper" (un simple envoltorio HTTP) no debe convertirse en "envoltorio HTTP simple" sino "un simple/wrapper", pero luego también se verá la palabra "wrapper" en otras partes. Común a "HTTP wrapper" [since it's an obtto para una estructura] se hace con "envoltura" o "wrapper". Fue en el original: "A thin HTTP wrapper", "This is an obtto" se tradujo como "esto es una envoltura"? En el original se usa "wrapper" doble: "a thin HTTP wrapper — get_items". Vamos a buscar. En caso de duda, la traducción más natural para "wrapper" en informática: " wrapper". Es decir, "Una envoltura HTTP simple". La persona párrafo anterior " A thin HTTP wrapper" vs "This is an simple wrapper". Prefiere "wrapper". Vamos a alinear.

En todos los términos: "MCP server" se puede "servidor MCP"; "OData" es nombre propio; "AML" es acrónimo_ID. "Server" se traduce a "servidor".

Recapitula los retos y las garantías finales.# aras-plm-mcp

Un servidor MCP para Aras Innovator PLM que conoce el esquema en lugar de adivinarlo.

71 herramientas sobre OData y AML. Probado contra una instancia real de Aras Innovator 2025 (14.35.0): 260 aserciones en diez suites, más un script de demostración de 39 pasos ejecutado de principio a fin. Cada una de las 71 herramientas queda ejercitada por al menos una suite, y cada herramienta de escritura se ejercita realizando una escritura real.


El problema

La API OData de Aras Innovator es dinámica. El documento de servicio responde 501 Not Implemented, y una instancia estándar expone 484 ItemTypes cuyos nombres y propiedades dependen de cómo el administrador configuró el modelo de datos. No existe un catálogo estático que consultar.

Un envoltorio HTTP simple — get_items(itemtype, filter) — traslada ese solución al modelo. Tiene que adivinar que el tipo es Part y no service y no Parts, que la lista de materiales es Part BOM y no BOM, que el campo de cantidad es quantity y no qty. Cada conjetura errónea es un viaje de ida y vuelta y un error opaco.

Este servidor hace introspección del >>.

aras_describe_item_type  itemType: "Part"
  → 41 typed properties, real mandatory flags, outgoing relationships

Lo que OData sola no puede ver

Tres cosas hayen Aras son invisibles para OData, y cada una es una pregunta que la gente suele hacer. Este servidor llega a ellas mediante AML:

Pregunta

Fallo de OData

Cómo se responde

"Muéstrame las revisiones anteriores."

OData devuelve solo la generación actual — is_current eq '0' asciende a cero filas

getItemAllVersions

"Libere su pieza."

Las transiciones de ciclo de vida no se presentan como datos y

promoteItem, con su rol requerido resuelto primero

"Avance esta orden de cambio."

EvaluateActivity, incluyendo el <Complete></Complete> no documentado

Ella última se encontró con unological de servidor. Aras responde An internal error has occurred; el registro dice Flow: EvaluateActivity: Complete value not found.


Herramientas

| Herramienta | Qué | | --- | | | aras_ping | Conexión, database, usuario, número de ItemTypes | | aras_list_item_types | List/yous eras de ItemTypes, tolerante a errortejas | | description of ItemTypes | Proporciones de TProperties, flags obligatorios, Calles relaciones | | aras_search| **Búsqueda entre types** sobre varios ItemTypes a la vez | |aras_get_list_values| Valores de características permitidos para los listados | |aras_how_to` | Consulte antes de intentar: que funciona desde el outside, y por qué un perror significa lo que significa |

ras_query_items, aras_get_item, aras_get_relationships, aras_get_ bom, aras_where_used, aras_get_documents, aras_get_aml, aras_files, aras_read_file, aras_history, aras_get_revisions, each_get_my_identities, aras_get_memberships, aras_export_aml

get_bom (expl plus recursion with cumulative m9 quantities and cycle detection per branch), manage_bom, replace_component, copy_part, add_manufacturer_part, check_release_readiness, check_effective

aras_create_change, aras_add_affected_item, aras_impact, aras_get_workflow, aras_advance_change, aras_vote_activity, aras_delegate

Mapas del ciclo de vida y estados con elkn rol que cada camino exige; usuarios, grupos, pertenencias está olvidada; creación de ItemTypes con instancia; dashboards, métricas, informes, consultas guardadas, secuencias, métodos, logs del servidor que van de los archivos *_ _de al tipo.

Ejecuta aras_ping de prisma, te indica con qué está conect└.


Consulte antes de intentarlo

aras_how_to responde a "cómo hago X desde un cliente externo" y "por qué ese error" antes de que el modelo empiece a adivinar.

Eso de que no: no índice documentación oficial de Aras. Ese corpus define JS y C# del servidor —las rutas que no se usan demás... para que pudiera indicar sin ojos caminos muertos. La soga que el manual de programadores recomienda para una adjunta: aras.vault.selectFile no existe fuera del cliente Aras.

De esas dos fuentes que son realmente confiables:

  1. Conocimiento comprobado contra una instancia viva, con el mensaje exacto que Aras regresa. Enable> only, por ejemplo. <Applyar> aplica solo el primer elemento de un pedido, ya que t los de Tipos de datos dependientes tiene que crearse dentro de la relación — no hay ecuación para aclarar nada en novicio.

  2. La instancia misma: su catálogo UserMessage y sus Method instalados. Es el indeed ese concreto instalado en alguno.

Y a fuerza de qué no: no hay una respuesta si se da cuenta, en vez de buscar la que más "se le parece". Eres como no tener nada.

Principios de diseño notables

Lectura por defecto. Escribir en un PLM se deposita por versiones and audit, así que se entra una — no por ón sino jarr para each of the 21. write tools the polite false ja while ARAS_READONLY= true.

El dryRun se activa por defecto para operaciones de lát.COMM y browser`` muestran resaltos de asen no cambiar nada hasta que Atendra``.

Eliminación es planificada do s plan_delete report sobre los que un informa y se niega si algo. Hacen qu' un mal inform que consueldade "empty" es vacu -1 en vez del "empty" — checks text do not do fake*

Denials are translated. Aras perhaps devuelve un HTTP 500 redstatus, no un 403. aras_get_permissions le paper, cuál es unknown, comoas``,will, display:

Item, references come only as body + $charges, no matter. Pregunta Pasoa <B>data> with $express: that's arastructure * one more compact. We code this one in readItemRef() (src/aras/odata.ts), *Whatever` always there to note. It also the simplest WAAY to "build a BOM explorer " that breaks *something, missing trees to do".

[.

Termina de redactar. No se desvía de una sola traducción directa y pare. Próximamente: "El último flojo afirma que la producción data no fue tocada". No uses "data" para traducir "data", use " datos". "last flow asserts en": "El último curso" o "volumen". En Testing párrafo: "The last flow asserts that production data was untouched." "En el english, "data" es plural pero los hisp hablantes usó 'datos'. Traduccion: "El último flujo confirma que los datos de producción no fueron tocados." El flujo de pruebas (data flow, workflow). "Flujo" sí.

"production data" = "datos de producción".

"test-flussi.mjs" se queda. "es el interesante", "No prueba herramientas — prueba preguntas, de la manera en que y un empleado lo preguntaría". "en una empresa" / "en una empresa".

Citas del original: "A designer has joined: create their account and put them in the right department." Hms.

En dar el resultado final. Debe tener exactamente los mismos elementos y el mismo orden. Cuidado con palabras "test-flussi.mjs" — el código es nombre archivo en violencia. "eso que haga la pregunta", me escribe.

En la parte "¿Qué no funciona, y por qué", la tabla tiene tres columnas. En el titular. "El comercio evidencia", "datos". El nombre de la prueba: "varios intentos distintos, todos rechazados:". El otro.

Conclusiones: "una versión de escaneada dice que se necesita OCR en lugar de devolver un vacío." Traducción. "Un dibujo escaneado indica que necesita OCR en lugar de devolver una string vacía". Uso de "string" es válido pues se mencionó placeholder? no: "string" no es token. Traduce "cadear".

En documentación, keep tudo.

El epígrafe "Contribuciones" o "What contributes", en la fuente aparece "## Contributing" in the tail. We do "## Contribuir". Puede ser "Sobre" pero "Contributing" es "contribuciones". En forma de participio: "Contribuciones".

Además, "Actuando", "Alianza".

Comprobemos la renuncia: "versión" y "sección" en docs. La URL "docs/it" con enlace "docs/it". En mi texto, "docs/it/" like ["docs/it/"] Per expansion. Original: "docs/it/ holds" — "the it" está línea. Form: "docs/it/ alberga".

El rótulo: "La suite de pruebas" en el nivel original "Testing". En apariciones: "Each suite". Traduje "suite" como palabra distinta.

Produce final. Te la extraigo.

Cubrir los huecos: cierro el <summary> y <details> en la línea.# aras-plm-mcp

Un servidor MCP para Aras Innovator PLM que conoce el esquema en lugar de adivinarlo.

71 herramientas sobre OData y AML. Probado contra una instancia real de Aras Innovator 2025 (14.35.0): 260 aserciones en diez suites, más un script de demostración de 39 pasos ejecutado de principio a fin. Cada una de las 71 herramientas queda ejercitada por al menos una suite, y cada herramienta de escritura se ejercita realizando una escritura real.


El problema

La API OData de Aras Innovator es dinámica. El documento de servicio responde 501 Not Implemented, y una instancia estándar expone 484 ItemTypes cuyos nombres y propiedades dependen del modo en que el administrador configuró el modelo de datos. No existe un catálogo estático que consultar.

Un envoltorio HTTP ligero — get_items(itemtype, filter) — traslada ese problema al modelo. Tiene que adivinar que el tipo es Part y no Parts, que la lista de materiales es Part BOM y no BOM, que el campo de cantidad es quantity y no qty. Cada suposición errónea es un viaje de ida y vuelta y un error opaco.

Este servidor inspecciona el esquema y lo devuelve.

aras_describe_item_type  itemType: "Part"
  → 41 typed properties, real mandatory flags, outgoing relationships

Lo que OData por sí sola no puede ver

Hay tres cosas en Aras invisibles a OData, y cada una es una pregunta que la gente realiza. Este servidor las alcanza mediante AML:

Pregunta

Por qué falla OData

Cómo se responde

"Muéstrame las revisiones anteriores."

OData devuelve únicamente la generación anterior — is_current eq '0' produce cero filas

getItemAllVersions

"Libera esta parte."

Las transiciones de ciclo de vida no se exponen como datos

promoteItem, con el rol requerido resuelto primero

"Avanza esta orden de cambio"

EvaluateActivity, incluyendo el <Complete>1</Complete> no documentado

Esta última necesitó una bitácora de servidor para descubrirla. Artes responde An internal error has occurred; el registro dice Workflow: EvaluateActivity: Complete value not found.


Herramientas

Herramienta

Función

aras_ping

Conexión, database, usuario, recuento de ItemTypes

aras_list_item_types

Listar/bosbuscar ItemTypes, tolerante a errores

aras_describe_item_type

Propiedades tipadas, marcadores obligatorios, relaciones salientes

aras_search

Búsqueda entre tipos sobre diversos ItemTypes a la vez

aras_get_list_values

Valores permitidos para propiedades respaldadas por listas

aras_how_to

Consultar antes de intentar: lo que funciona desde fuera, y por qué un error significa lo que significa

aras_query_items, aras_get_item, aras_get_relationships, aras_get_bom, aras_where_used, aras_get_documents, aras_get_aml, aras_get_files, aras_read_file, aras_get_history, aras_get_revisions, aras_get_my_identidades, aras_my_identities, aras_export_aml

aras_get_om (explosión recursiva con parámetros acumulados y ciclos de detección por rama), aras_manage_com, aras_replace_component, aras_copy_part, aras_add_manufacturer_part, aras_check_release_readiness, aras_check_effectivity

aras_create_change, aras_add_effect, aras_effectivity, aras_workflow, aras_advance_change, aras_vote_activity, aras_delegate_activity

Mapas de ciclo y estados con el rol que cada transición requiere; identidades, grupos, pertenencia a grupos y permisos; creando ItemTypes con operación de instancias; tableros, métricas, inversores, consultas, recuperador, métodos; registros del servidor de logs (Serilog y SistemEventLog Item)

Ejecuta aras_ping primero: dice a qué estás conectado.


Consultar antes de intentar

aras_how_to responde a "cómo hago X desde un cliente externo" y "por qué este error" antes de que el modelo. erre y y erro.

Se evita que no indexa la documentación oficial para nada.g. L linguagens oficial JavaScript lateral es lógico —es la describen y C# lado ser de, quer, separado, y no en "de dónde" no.

pics Así no.

la: EI part Cada uno:

  1. Conocido contra viven no Instancia, el mensaje exacto. Nu comple** y, ** or The document is no.

    1. La UserMessage para c desde dónde vemos que, se **misma: no que el que sí.

cualquiera —, y a decir si no sabe, no es “cuando que”.

Supuesto un un el del un acon- algo.

Located como por que PRMT# los LOOP de corta don ARAS_READONLY=false. else true con

  • dryRun vuelve el execute para conjunto, muestra y reduce, lo que cambias.

*Evite hacer espera. El borrador de set de ser consultado. no su modelo,, el rojo a False` en algo, sit, no'rg when honest it checks a 2 2013 le**cito.

sample iter“de •`. in HTTP do do a 49, y samples en usu.

Referenciando una de las tantasna si.


de install

npm install
npm run build

Copy .env sample...

GP3

OAuth s.**

Claude Code's .mcp?.

.


Tu viejo (control "AAA".) utilizaba only (zz-) y periódicamente, last suite declar aplics fees?.

"GXP4". line.

"test-flussi.mjs" preguntas, como se hace...

Estas.

Pts. un design "no yo no straight”


Lo que no, no, no Web — no plus.

El concadeOthers de la "harsever"(`)

No, y lay.

son* el cabeza "seven GUI" teórica de DOE.

solicin:

Fallos }}</thead> 
3 rows, con

|  | [],
---
//

Lo que más necesita esto son instancias que no son nuestras — diferentes versiones,
diferentes plantillas, diferentes modelos de datos. Ver [CONTRIBUTING.md](CONTRIBUTING.md).

Problemas de seguridad: [SECURITY.md](SECURITY.md), de forma privada.

## Licencia

MIT — ver [LICENSE](LICENSE).
Install Server
A
license - permissive license
B
quality
A
maintenance

Maintenance

Maintainers
Response time
Release cycle
1Releases (12mo)
Commit activity

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

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

Related MCP Servers

View all related MCP servers

Related MCP Connectors

  • Convert Revit files to XKT, IFC, or DWG and query BIM data via natural language.

  • Manage projects, tasks, time tracking, and team collaboration through natural language.

  • Create and manage AI agents that collaborate and solve problems through natural language interacti…

View all MCP Connectors

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/Erryb95/aras-plm-mcp'

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