npm node-opcua-modeler-mcp-serverstreamable-httpupdated 12d ago
An MCP server that gives AI agents access to the OPC UA companion specification type system β 589 types across 22 industrial namespaces, plus 1,533 engineering units β and lets agents validate, generate, reverse-engineer, and create OPC UA information models.
What can you do with OPC UA Modeler?
node-opcua-modeler-mcp-server
An MCP server that gives AI agents access to the OPC UA companion specification type system β 589 types across 22 industrial namespaces, plus 1,533 engineering units β and lets agents validate, generate, reverse-engineer, and create OPC UA information models.
Built on node-opcua, the most widely used OPC UA stack for Node.js.
Why?
When an AI agent needs to build an OPC UA information model, it must know:
- What companion spec types exist (DI, Machinery, Robotics, Machine Toolsβ¦)
- What components, properties, and methods each type has
- What namespace dependencies are required
- What engineering unit symbols are valid (UNECE Rec. 20)
This MCP server answers all of those questions β offline, for free, in milliseconds.
Quick Start
With Claude Desktop
Add to your claude_desktop_config.json:
{
"mcpServers": {
"opcua-modeler": {
"command": "npx",
"args": ["-y", "node-opcua-modeler-mcp-server"],
"env": {
"OPCUA_MODELER_API_KEY": "stfv_your_api_key_here"
}
}
}
}
Note: The API key is optional for discovery tools (offline) and
opcua_model_validate(50 anonymous calls/day). It is required foropcua_model_generate,opcua_model_reverse, andopcua_model_create. Register at opcua-modeler.sterfive.io and create a key under Settings β API β the free tier gives 25 calls/day for 90 days; see pricing for paid plans.
With any MCP client
npx node-opcua-modeler-mcp-server
The server communicates over stdio using the Model Context Protocol.
Using a local backend instead of the hosted API
If you run the OPC UA Modeler CLI on the same machine, the model tools can be served from it instead of the hosted API β your YAML never leaves the host.
Start the server (requires a licence that includes the serve entitlement):
opcua-modeler serve
Then set one environment variable in your MCP client config:
{
"mcpServers": {
"opcua-modeler": {
"command": "npx",
"args": ["-y", "node-opcua-modeler-mcp-server"],
"env": {
"OPCUA_MODELER_BACKEND": "local"
}
}
}
}
No API key is needed in this mode β the client discovers the local endpoint and its credentials automatically.
| Variable | Values | Purpose |
|---|---|---|
OPCUA_MODELER_BACKEND |
cloud (default), local |
Which backend serves the model tools |
OPCUA_MODELER_API_KEY |
stfv_β¦ |
API key, cloud backend only |
OPCUA_MODELER_API_URL |
URL | Override the hosted API base URL |
Notes
- The two backends are never mixed, and there is no fallback between them. If
localis selected and no server is running, the call fails with instructions rather than silently sending your model to the hosted API. - The seven discovery tools are local to this package and work offline on either setting.
opcua_model_create(AI generation) is available on thecloudbackend only.
Tools
list_namespaces
List all 25 OPC UA companion spec namespaces with aliases, URIs, and dependencies.
β list_namespaces()
β [
{ "alias": "di", "name": "OPC UA for Devices", "uri": "http://opcfoundation.org/UA/DI/", "dependencies": [] },
{ "alias": "robotics", "name": "OPC UA for Robotics", "uri": "http://opcfoundation.org/UA/Robotics/", "dependencies": ["di", "ia"] },
...
]
resolve_dependencies
Resolve the full dependency chain for companion spec aliases. Returns a topologically sorted list for the YAML namespaces: block.
β resolve_dependencies({ aliases: ["machineTool"] })
β ["di", "ia", "machinery", "isa95JobControl", "machineryJobs", "machineTool"]
list_types
List all ObjectTypes and VariableTypes defined in a companion spec namespace.
β list_types({ alias: "robotics" })
β [
{ "browseName": "MotionDeviceType", "kind": "ObjectType", "subtypeOf": "di:ComponentType", ... },
{ "browseName": "AxisType", "kind": "ObjectType", "subtypeOf": "di:ComponentType", ... },
...
] // 25 types
get_type_details
Get the full structure of a type β components, properties, methods, interfaces, including inherited members.
β get_type_details({ alias: "robotics", browseName: "MotionDeviceType" })
β {
"browseName": "MotionDeviceType",
"kind": "ObjectType",
"subtypeOf": "di:ComponentType",
"interfaces": ["di:IVendorNameplateType", "di:ITagNameplateType"],
"components": [
{ "browseName": "robotics:Axes", "nodeClass": "Object", "typeDefinition": "FolderType", "modellingRule": "Mandatory" },
{ "browseName": "robotics:PowerTrains", "nodeClass": "Object", "typeDefinition": "FolderType", "modellingRule": "Mandatory" },
...
],
"properties": [
{ "browseName": "di:Manufacturer", "dataType": "LocalizedText", "modellingRule": "Mandatory" },
{ "browseName": "robotics:MotionDeviceCategory", "dataType": "MotionDeviceCategoryEnumeration", "modellingRule": "Mandatory" },
...
]
}
search_types
Search for types across all companion specs by keyword.
β search_types({ query: "temperature" })
β [
{ "alias": "glass", "browseName": "MotorTemperatureTooHighEventType", ... },
{ "alias": "padim", "browseName": "TemperatureMeasurementVariableType", ... },
{ "alias": "amb", "browseName": "OverTemperatureConditionClassType", ... }
]
find_engineering_unit
Find the official UNECE Rec. 20 engineering unit symbol. Supports fuzzy matching and natural language aliases.
β find_engineering_unit({ query: "celsius" })
β { "symbol": "Β°C", "matchType": "alias", "confidence": 1 }
β find_engineering_unit({ query: "revolutions per minute" })
β { "symbol": "r/min", "matchType": "alias", "confidence": 1 }
β find_engineering_unit({ query: "bar" })
β { "symbol": "bar", "matchType": "exact", "confidence": 1 }
opcua_model_validate βοΈ
Validate an OPC UA YAML model for correctness. Returns diagnostics with severity, codes, messages, and line numbers. Works without an API key (limited to 5 calls/day).
β opcua_model_validate({ yaml: "namespaces:\n di:\n..." })
β {
"valid": true,
"diagnostics": [
{ "severity": "warning", "code": "W001", "message": "...", "line": 42 }
]
}
opcua_model_generate βοΈ
Generate OPC UA NodeSet2.xml and Symbols.CSV from a validated YAML model. Returns base64-encoded artifacts. Requires an API key.
β opcua_model_generate({ yaml: "namespaces:\n di:\n...", include_docs: false })
β {
"valid": true,
"artifacts": {
"nodeset2_xml": "PD94bWwg...",
"symbols_csv": "bmFtZSxu..."
},
"diagnostics": []
}
opcua_model_reverse βοΈ
Reverse-engineer a NodeSet2.xml file back into the YAML DSL format. Requires an API key.
β opcua_model_reverse({ xml: "<?xml version=..." })
β {
"yaml": "namespaces:\n di:\n...",
"diagnostics": []
}
opcua_model_create βοΈ
Generate an OPC UA YAML model from a natural language description using AI. The AI will auto-detect relevant companion specs, generate a validated model with documentation, and auto-correct validation errors. Requires an API key.
β opcua_model_create({ prompt: "A robotic welding cell with two robot arms, each having 6 axes, temperature monitoring on each motor" })
β {
"success": true,
"yaml": "namespaces:\n di:\n robotics:\n...",
"attempts": 2,
"diagnostics": [],
"model": "gemini-2.5-pro",
"tokens": { "input": 4200, "output": 1800 }
}
β opcua_model_create({ prompt: "A CNC lathe with spindle speed and temperature", forceSpecs: ["di", "cnc"] })
β {
"success": true,
"yaml": "namespaces:\n di:\n cnc:\n...",
"attempts": 1,
"diagnostics": [],
"model": "gemini-2.5-pro",
"tokens": { "input": 3500, "output": 1200 }
}
Coverage
Companion Specifications (25)
| Alias | Specification | Types |
|---|---|---|
padim |
OPC UA for PA-DIM | 101 |
ijtBase |
OPC UA for IJT Base | 65 |
machineTool |
OPC UA for Machine Tools | 63 |
di |
OPC UA for Devices | 44 |
glass |
OPC UA for Glass Manufacturing | 36 |
machineVision |
OPC UA for Machine Vision | 36 |
adi |
OPC UA for Analyzer Devices | 35 |
commercialKitchenEquipment |
OPC UA for Commercial Kitchen Equipment | 35 |
robotics |
OPC UA for Robotics | 25 |
ia |
OPC UA for Industrial Automation | 20 |
amb |
OPC UA for AMB | 18 |
autoId |
OPC UA for AutoID | 18 |
metalForming |
OPC UA for Metal Forming | 16 |
machinery |
OPC UA for Machinery | 15 |
gds |
OPC UA GDS | 14 |
woodworking |
OPC UA for Woodworking | 13 |
cnc |
OPC UA for CNC Systems | 12 |
| β¦and 5 more | ||
| Total | 22 namespaces | 589 types |
Engineering Units
1,533 official UNECE Rec. 20 symbols plus 134 natural language aliases (e.g., "celsius" β Β°C, "revolutions per minute" β r/min). Every alias resolves to a symbol the modeler engine accepts β the lookup never invents one.
How It Works
The server ships with a pre-generated catalog.json containing all type information extracted from OPC Foundation's official NodeSet2.xml files via node-opcua. All queries are answered from this static catalog β no network required, no API key needed.
ββββββββββββββββββββββββββββββββββββββββββββββββββββ
β node-opcua-modeler-mcp-server β
β β
β LOCAL TOOLS (offline, free) β
β ββββββββββββββββββββββββββββββββββββββββββ β
β β catalog.json (1.7 MB) β β
β β β’ 25 companion spec registries β β
β β β’ 589 type summaries + details β β
β β β’ 1,533 engineering units β β
β ββββββββββββββββββββββββββββββββββββββββββ β
β 6 tools β query the catalog β
β β
β CLOUD TOOLS (via api.opcua-modeler.sterfive.io) β
β 4 tools β validate / generate / reverse / createβ
β β
β stdio transport (JSON-RPC) β
ββββββββββββββββββββββββββββββββββββββββββββββββββββ
Use Cases
- AI-assisted OPC UA modeling β agents can discover types, resolve dependencies, and validate unit symbols before generating YAML/XML models
- Copilot integration β add OPC UA awareness to coding assistants
- Industrial digital twin design β explore companion spec type hierarchies interactively
- Learning OPC UA β ask an AI to explain types and their relationships
Requirements
- Node.js β₯ 18
Related
- OPC UA Modeler β web app β Create, validate, and generate OPC UA information models in the browser
- Product page β OPC UA Modeler overview, features, and licensing
- Documentation β Guides, YAML DSL reference, and how-tos
- Specification reference β Rendered OPC UA information-model specification
- node-opcua β Full OPC UA stack for Node.js
- Model Context Protocol β Open protocol for AI tool integration
Licensing
Three layers, stated once:
| What | Licence |
|---|---|
This package (node-opcua-modeler-mcp-server, the MCP client and its catalog) |
Apache License 2.0 from version 1.5.0 β see NOTICE for trademark and third-party notices. Versions 1.0β1.4.x were published under MIT and remain so. |
The hosted OPC UA Modeler API (opcua-modeler.sterfive.io/api/v1) that the cloud backend calls |
Sterfive API Terms of Use β anonymous discovery, free and paid plans. |
The OPC UA Modeler CLI and opcua-modeler serve (the local backend) |
Sterfive commercial licence β see the product page. |
"OPC UA Modeler" and "Sterfive" are trademarks of Sterfive SAS; the Apache licence grants no rights to them. Contributions are accepted under the Developer Certificate of Origin.
Β© Sterfive SAS
Install
Add OPC UA Modeler to your client. Pick the one you use.
{
"servers": {
"node-opcua-modeler-mcp-server": {
"type": "http",
"url": "https://api.opcua-modeler.sterfive.io/api/mcp"
}
}
}Add to `.vscode/mcp.json` in your workspace.
claude mcp add node-opcua-modeler-mcp-server -- npx -y node-opcua-modeler-mcp-servercodex mcp add node-opcua-modeler-mcp-server -- npx -y node-opcua-modeler-mcp-serveramp mcp add node-opcua-modeler-mcp-server -- npx -y node-opcua-modeler-mcp-server{
"mcpServers": {
"node-opcua-modeler-mcp-server": {
"command": "npx",
"args": [
"-y",
"node-opcua-modeler-mcp-server"
]
}
}
}Add to `claude_desktop_config.json`, then restart Claude Desktop.
{
"mcpServers": {
"node-opcua-modeler-mcp-server": {
"command": "npx",
"args": [
"-y",
"node-opcua-modeler-mcp-server"
]
}
}
}Add to `~/.cursor/mcp.json`, or `.cursor/mcp.json` for a single project.
{
"mcpServers": {
"node-opcua-modeler-mcp-server": {
"command": "npx",
"args": [
"-y",
"node-opcua-modeler-mcp-server"
]
}
}
}Add to `~/.codeium/windsurf/mcp_config.json`.
{
"mcpServers": {
"node-opcua-modeler-mcp-server": {
"command": "npx",
"args": [
"-y",
"node-opcua-modeler-mcp-server"
]
}
}
}Add to `cline_mcp_settings.json` via the MCP Servers panel.
{
"mcpServers": {
"node-opcua-modeler-mcp-server": {
"command": "npx",
"args": [
"-y",
"node-opcua-modeler-mcp-server"
]
}
}
}Add to `~/.gemini/settings.json`.
{
"mcpServers": {
"node-opcua-modeler-mcp-server": {
"type": "local",
"command": "npx",
"args": [
"-y",
"node-opcua-modeler-mcp-server"
],
"tools": [
"*"
]
}
}
}Add to `~/.copilot/mcp-config.json`, or run `/mcp add` inside the CLI.
{
"context_servers": {
"node-opcua-modeler-mcp-server": {
"command": {
"path": "npx",
"args": [
"-y",
"node-opcua-modeler-mcp-server"
]
}
}
}
}Add to your Zed `settings.json`.
npx -y node-opcua-modeler-mcp-serverRun `goose configure`, choose **Add Extension β Command-line Extension**, and paste this command.
Score
39 / 100
Incomplete
- Documentation25/25
- Maintenance25/25
- Trust6/20
- Capability0/15
- Install experience15/15
- Documents what it does and how to connect
- Has a resolvable package or endpoint
- Exposes at least one tool, prompt or resource
- README has substantive content
- Includes a code example
- Documents its configuration
- Mentions credentials or security posture
- Last commit 5 days ago
- Has a release history
- Repository is not archived
- No licence detected
- Namespace verified in the official MCP registry
- Claimed by its owner
- Published under an organisation
- 0 tool(s) documented
- Provides prompt templates
- Provides resources
- 18 documented install method(s)
- Published to a package registry
- Offers a hosted endpoint β no local install
Version history
| Versions | Published |
|---|---|
| 1.6.1Latest | Aug 27, 2026 |
| 1.6.0 | Aug 27, 2026 |
| 1.5.0 | Aug 19, 2026 |
| 1.4.2 | Jul 31, 2026 |
| 1.3.0 | Jul 20, 2026 |
| 1.2.3 | Jul 16, 2026 |
| 1.2.2 | Jul 16, 2026 |
| 1.2.1 | Jul 15, 2026 |
| 1.1.0 | Jun 25, 2026 |
| 1.0.1 | Jun 25, 2026 |