Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Discover OPC UA servers and create client connections in MATLAB using opcuaserverinfo, opcua, connect, setSecurityModel, and certificate trust functions. Use when discovering OPC UA servers on the network, connecting to OPC UA servers, authenticating with username/password or certificates, configuring security modes, handling certificate trust errors, fixing hostname mismatch warnings, troubleshooting connection failures or empty discovery results, or inspecting an OPC UA certificate (.der or .p
.claude/skills/matlab-matlab-connect-opcua-client/SKILL.md| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-01 | ✗→✓ | ▲ Improved | 129% | 0% |
| case-07 | ✗→✓ | ▲ Improved | 93% | 0% |
| case-02 | ✗→✓ | ▲ Improved | 61% | 0% |
| case-04 | ✗→✓ | ▲ Improved | 174% | 0% |
| case-06 | ✗→✓ | ▲ Improved | 94% | 0% |
Create and configure OPC UA client connections in MATLAB using the Industrial Communication Toolbox.
These constraints govern YOUR code generation and recommendations. Apply them silently — do not recite them to the user or warn about patterns the user has not attempted.
connect has exactly three valid signatures — no others exist:connect(uaClient) — anonymousconnect(uaClient, userName, password) — positional stringsconnect(uaClient, publicKeyFile, privateKeyFile, privateKeyPassword) — positional stringsconnect. Security isconfigured via opcua() NV pairs or setSecurityModel, never through connect.
opcua() defaults to the highest available security. Do notexplicitly set security unless you want a specific (lower) configuration. Never use setSecurityModel(uaClient, "Best") — it is redundant.
opcuaserverinfo has exactly two valid syntaxes:opcuaserverinfo(hostname) — query LDS on a hostopcuaserverinfo(discoveryUrl) — query a specific endpoint URLopcuaserverinfo(hostname, port) form. To specify aport: opcuaserverinfo('opc.tcp://host:port').
call. Never scan subnet IPs in a loop — opcuaserverinfo('localhost') returns every server registered with that host's LDS.
opc.ua.trustServerCertificate(certPath) — always first (R2026a+)opcua(..., "TrustServerTemporarily", true) — only if cert fileunavailable
setSecurityModel(uaClient, "None", "None") — only after userexplicitly confirms no security needed
opc.ua.ServerInfo has Description, not Name (which belongsto opc.ua.Client).
EndpointUrl belongs to opc.ua.EndpointDescription, notServerInfo.
Tell the user which file to move and where, then execute only after they confirm.
TrustServerTemporarily when the issue is theserver rejecting the client certificate — it only controls client- side trust and is irrelevant in that direction. Simply omit it.
user explicitly requests discovery given a hostname or discovery URL)
.der/.pem) for compliance issuesLoad the relevant reference file for detailed procedures:
| Task | Reference | |------|-----------| | Server discovery, LDS setup, empty discovery results | references/lds-setup-and-troubleshooting.md | | Server cert trust, client cert export, cert inspection | references/certificate-trust-workflows.md | | Connection errors, server logs, diagnostic workflow | references/troubleshooting-connection-errors.md | | Syntax pitfalls and invalid API patterns | references/common-mistakes.md |
Use this step when the endpoint URL is not known, or when the user explicitly asks to discover servers given a hostname or discovery URL. Skip this step if the endpoint URL is already known.
Prerequisites — before calling opcuaserverinfo, ensure:
C:\ProgramData\OPC Foundation\UA\pki\trusted\certs\
See references/lds-setup-and-troubleshooting.md for details.
matlab% LDS-based discovery (preferred — finds all registered servers) serverInfo = opcuaserverinfo('localhost'); % Direct endpoint discovery (when you know the server URL) serverInfo = opcuaserverinfo('opc.tcp://myserver:53530/OPCUA/SimulationServer'); % Pass discovery result directly to opcua() uaClient = opcua(serverInfo(1)); connect(uaClient);
matlabserverUrl = "opc.tcp://hostname:port/path"; uaClient = opcua(serverUrl);
The opcua function also accepts a ServerInfo object directly from opcuaserverinfo.
matlab% R2025a+ (preferred) — Name-Value pairs in constructor uaClient = opcua(serverUrl, ... MessageSecurityMode="Sign", ... ChannelSecurityPolicy="Basic256Sha256"); % R2020a+ (backward-compatible) — setSecurityModel after construction uaClient = opcua(serverUrl); setSecurityModel(uaClient, "Sign", "Basic256Sha256");
If the server's certificate is not yet trusted by MATLAB, the connection will fail. Follow the escalation order in Must-Follow Rules. Load references/certificate-trust-workflows.md for details.
matlabconnect(uaClient); % anonymous connect(uaClient, "myuser", "mypassword"); % username/password connect(uaClient, "cert.der", "key.pem", "keypass"); % certificate
matlabif isConnected(uaClient) fprintf("Connected to %s\n", uaClient.EndpointUrl); end disconnect(uaClient);
| Function | Purpose | Available From | |----------|---------|----------------| | opcuaserverinfo | Discover OPC UA servers via LDS or direct URL | R2015b | | opcua | Create OPC UA client (from URL or ServerInfo) | R2015b | | connect | Connect to server | R2015b | | disconnect | Disconnect from server | R2015b | | isConnected | Check connection status | R2015b | | setSecurityModel | Configure security mode/policy | R2020a | | opc.ua.exportClientCertificate | Export MATLAB client cert to file | R2020a | | opc.ua.trustServerCertificate | Trust a server cert (file path) | R2026a | | opc.ua.rejectServerCertificate | Reject a server cert (file path) | R2026a | | findDescription | Filter ServerInfo array by description text | R2015b | | findAuthentication | Filter ServerInfo array by auth type | R2015b |
opc.ua.Client| Property | Type | Description | |----------|------|-------------| | Hostname | string | Server hostname | | Port | double | Server port | | Name | string | Client name | | EndpointUrl | string | Selected endpoint URL | | Status | string | Connection status | | Timeout | double | Connection timeout (seconds) | | MessageSecurityMode | enum | Active security mode | | ChannelSecurityPolicy | enum | Active channel policy | | UserAuthTypes | cell | Available auth types on server | | Endpoints | array | Available endpoint descriptions |
Does NOT have: UserName, Password, IsConnected, Security, SecurityMode, SecurityPolicy, Certificate, PrivateKey.
Use isConnected(uaClient) (method) to check connection status.
opc.ua.ServerInfo| Property | Type | Description | |----------|------|-------------| | Hostname | char | Host name | | Port | double | TCP port | | Description | char | Human-readable server description | | UserTokenTypes | cell | Supported auth types | | BestMessageSecurity | enum | Highest message security | | BestChannelSecurity | enum | Highest channel security policy | | Endpoints | array | opc.ua.EndpointDescription objects |
opc.ua.EndpointDescription| Property | Type | Description | |----------|------|-------------| | EndpointUrl | char | Full endpoint URL | | MessageSecurityMode | enum | Security mode for this endpoint | | ChannelSecurityPolicy | enum | Channel security policy | | UserAuthTypes | cell | Auth types on this endpoint |
matlab% Discover all servers via LDS serverInfo = opcuaserverinfo('localhost'); % Discover and connect serverInfo = opcuaserverinfo('localhost'); uaClient = opcua(serverInfo(1)); connect(uaClient);
matlab% Default (highest) security, anonymous uaClient = opcua("opc.tcp://myserver:53530/OPCUA/SimulationServer"); connect(uaClient); % Username/password connect(uaClient, "myuser", "mypassword"); % User certificate connect(uaClient, "C:/certs/user.der", "C:/certs/user.key", "keypassword");
matlab% R2025a+ uaClient = opcua("opc.tcp://myserver:53530/OPCUA/SimulationServer", ... UseDiscoveryHostname=true); % Pre-R2025a — resolve via discovery serverInfo = opcuaserverinfo("myserver"); uaClient = opcua(serverInfo(1)); connect(uaClient);
Load references/certificate-trust-workflows.md, then run:
matlabinspectOpcUaCertificate("path/to/server_cert.der");
| Error | Fix | |-------|-----| | opcuaserverinfo returns empty | Check LDS prerequisites; see references/lds-setup-and-troubleshooting.md | | "Server certificate not trusted" | opc.ua.trustServerCertificate(certPath) | | "Client certificate rejected" | Export via opc.ua.exportClientCertificate, add to server | | "BadIdentityTokenRejected" | Check uaClient.UserAuthTypes | | "Hostname mismatch" warning | UseDiscoveryHostname=true (R2025a+) | | "BadSecurityChecksFailed" | Run inspectOpcUaCertificate; see references/troubleshooting-connection-errors.md |
For detailed error-to-fix mapping, load references/troubleshooting-connection-errors.md.
Copyright 2026 The MathWorks, Inc.
Other measured skills in the registry, with their headline benchmark lift.