aras-plm-mcp
aras-plm-mcp
MCP-сервер для Aras Innovator PLM, который знает схему, а не угадывает её.
71 инструмент поверх OData и AML. Проверено на живом инстансе Aras Innovator 2025 (14.35.0): 260 проверок в десяти наборах тестов, а также демонстрационный сценарий из 39 шагов, выполняемый от начала до конца. Каждый из 71 инструментов задействован хотя бы одним набором тестов, а каждый инструмент записи выполняет реальную запись.
Проблема
OD простой OData API из Aras Innovator динамический. Служебный документ возвращает 501 Not Implemented, а типовой инстанс предоставляет 484 ItemTypes, имена и свойства которых зависят от того, как администратор настроил модель данных. Никакого статического каталога для чтения нет.
Тонкая HTTP-рамка — get_items(itemtype, filter) — перекладывает эту проблему на модель. Ей приходится догадывается, что тип — Part, а не Parts, что материального состава Part BOM, а не BOM, that the quantity field is quantity, а не qty. Каждая неверная угадка — обработка запроса и непонятная ошибка.
Этот сервер инсталлирует схему и отдаёт её вам.
aras_describe_item_type itemType: "Part"
→ 41 typed properties, real mandatory flags, outgoing relationshipsRelated MCP server: kicad-mcp
Что OData не видит
Три вещи в Aras невидимы для OData, и каждая из них — это вопрос, который люди действительно задают. Это сервер обращается к ним через AML:
Вопрос | Why OData is failing | Как отвечает |
"Покажи предыдущие ревизии." | OData returns only the current plus generation — |
|
"Выпусти эту деталь." | Переходы жизненного цикла не представлены как данные |
|
"Продвинь этот заказ на изменение." | — |
|
Последний пришлось искать в журнале сервера. Aras отвечает An internal error has occured; в журнале написано Workflow: EvaluateActivity: Complete value not found.
Tools
Инструменты | Что делает |
| Connection, database, user, count "Type-Item" |
| Список/поиск ItemTypes, терпимость к опечаткам |
| Типизированные property, флаги обязательности, исходящие связи |
| Кросс-поиск по нескольким ItemTypes одновременно |
| Допустимые значения для properties on a list |
| Проконсультируйтесь, прежде чем пробовать: что работает извне, и почему ошибка означает именно это |
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 (recursive раскрытие с Cumulative amounts и определение cycles branch), 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
Maps lifecycle-states with the required role of each transition; users, groups, memberships and permissions; создание ItemTypes с рабочими экземплярами; comum dashboards, metrics, reports, saved queries, sequences, methods; server logs from both Serilog files and the SystemEventLog ItemType.
Запустите aras_ping первой — она скажет, к чему вы подключены.
Проконсультируйтесь перед попыткой
aras_how_to отвечает на вопросы "как мне выполнить X из внешнего клиента" и "почему эта ошибка" до того petrol, как модель начнёт угадывать.
Он она не индекср official documentation. That corpus describes client-side JavaScript and C# code — exactly the ways that don't work from the outside — so wouldn't his would lead back to a dead end. The Programmer's Guide's answer to how a file attached is aras.vault.SelectFile, which there is only exists inside the Aras client.
It relies on two actually reliable sources:
Knowledge verified through a live instance, with the exact message that Argo returns.
<Complete>1</Complete>,<ApplyItem>applies only the first element of a batch, and dependent ItemTypes have to be created the variables within а relationship — нwhile none of it in no manual.The instance itself — its
UserMessagecatalogue and installedMethods. Tensions is the truth of of that installation, and not generic.
And is saying that when does not know what it says, instead of returning the nearest match. A tool that answers everything is as useless as one that answers nothing.
Useful design descriptions
By default — read-only. A record in PLM is versioned-and-qualified, so she is switched on deliberately: ARAS_READONLY=false. All 21 write tools politely fail while it is true.
dryRun by default on for batch operations. aras_replace_component and aras_bulk_update show the affected of the rows and do nothing until asked.
Not only...
Explain: aras_plan_delete reports the references to ara item and refuses in the case of such dependency. If the relationship could not get of the contract, this returns -1 instead of false "it empty": an honest comparison is better valuable than a smile that does not guarantee.
Denials of permission are decoders. For a denied permission Aras returns generic HTTP 500 rather than 403. aras_get_type_permissions will tell you which identity is missing; aras_lookup_error looks at the UserMessage catalogue.
Item links always go as annotations, and only with $select. с Query Part BOM with $select returns related_id@aras.id and related_id@aras.keyed_name; without it everything returns to nothing, but strings look like transparent metadata. This is encoded once in readItemRef() (src/aras/odata.ts) so no caller does not need to think. It is also the easiest way to build a BOM explorer that silently returns the empty tree.
First steps
npm install
npm run buildCopy .env.example to .env and fill in. For Claude Code, add to .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"
}
}
}
}The auth — into the client: OAuth 2.0 Resource Owner etc. Password Credentials for the IOMApp client, scope Innovator.
Requires Node.js 20+ and an Aras Innovator instance that talks with it is allowed.
Testing
Каждый набор тестов is running on a live instance, writes only to objects with ZZ- prefix and removes them afterwards. The last scenario asserts that value of anonymity.
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 removedtest-flussi.mjs is interesting. It tests not tools — it tests questions, as they asked in the company:
"A designer has joined: create an account for them and put them in the right department." "Build a new component, take it through approval and release it." "Replace a component everywhere, but first say where you find it." "Try to delete a component used in the BOM: it must be refused."
What doesn't work and why
Four things are unreachable from an external client. This is not a trap. Each of these tools says exactly that and points to an alternative rather than making an ambiguous failure.
Evidence | |
Uploading files to the vault | Six attempts, all rejected: |
Applicability expressions on a BOM |
|
Running Query Builder queries | No AML command can run the saved |
Journal based on JavaScript |
|
Reading on the other hand works and verified. aras_read_file loads the content via OData media resource `File(('')/$value), backtracking to the way to the endpoint; and gives something readable: text formats — text, PDF — the extracted text if exists, and the images for PNG/JPEG/GIF/WebP, so they can be viewed at all. A scanned drawing says the user can read it directly "OCR", not the line is empty.
docs/field-notes.md — field journal: every defect that a "live test" found, as well as the exact error that confirms each limit.
Documentation
От нуля к the first result from Aras | |
How is it composed, and the trap that "built it all" | |
Ten complete business processes in question | |
Тестовые наборы and how to run them carelessly | |
What found out live testing: found defects and the four things that don't work |
In docs/it/ — the original Italian resource: 30-block demo script and the raw testing log.
Contributions to the project
Экземпляры, которые не являются нашими, — это то, что нужно больше всего: разные версии, разные шаблоны, разные модели данных. См. CONTRIBUTING.md.
Вопросы безопасности: SECURITY.md, конфиденциально.
Лицензия
MIT — см. LICENSE.
Maintenance
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
- AlicenseNot gradedqualityDmaintenanceEnables Claude Desktop to interact with Aras Innovator PLM systems via OAuth 2.0, allowing users to query PLM data, create items, and call server methods through natural language.16MIT
- AlicenseNot gradedqualityBmaintenanceEnables natural language interaction with KiCad projects, schematics, and PCBs, supporting project management, design rule checking, netlist extraction, and datasheet RAG search.2MIT
- AlicenseNot gradedqualityFmaintenanceProvides access to Autodesk Platform Services API, enabling interaction with ACC projects and issues through natural language.25MIT
- AlicenseBqualityDmaintenanceIntegrates PTC Windchill and Creo Parametric with LLM-based clients via the Model Context Protocol, enabling natural language interaction with PLM and CAD systems for tasks like part search, BOM retrieval, model operations, and exports.114MIT
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…
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
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