MCP server for OPC UA: read, write, browse, call methods, history, events and alarms.
14 tools with mixed quality. Naming is verb-forward and clear (read_, write_, browse_, call_, subscribe_, etc.), following pattern:tool conventions. Descriptions are present but brief (avg ~60 chars, well below the 194-char baseline). Input schemas are visible and typed, but parameter descriptions are sparse or missing entirely. Output schemas are not documented. Error handling and recovery guidance are absent. No tool annotations (readOnlyHint/destructiveHint). Composition is reasonable, tools are single-purpose and chainable, but parameter interdependencies are underdocumented.
Acknowledge an OPC UA alarm or condition.
Perform an action on an OPC UA alarm (acknowledge, confirm, shelve, unshelve).
Browse the OPC UA address space: list the children of a node, or walk a browse path.
Call an OPC UA method on an object.
Get the status of the OPC UA server.
List active alarms and conditions from an OPC UA server.
Read aggregated historical values of an OPC UA node.
Output schemas not documented. LLMs cannot plan downstream calls or extract required fields (e.g., what does read_opcua_nodes return? field names, types, pagination?). Violates pattern:tool and pattern:response-shaper.
Parameter descriptions are minimal or absent. E.g., 'aggregate_function' says 'The aggregate function to apply (e.g., Average, Total, Maximum)' but does not specify valid enum values, constraints, or when to use each. Violates pattern:tool-description and pattern:constrained-input.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | C | 62 | 2026-07-28+ | v2 |
Read historical events from an OPC UA node.
Read the historical values of an OPC UA node.
Read the present value of one or more OPC UA nodes.
Subscribe to events from an OPC UA node.
Subscribe to value changes on one or more OPC UA nodes.
Unsubscribe from value changes on OPC UA nodes.
Write a value to one or more OPC UA nodes.
No tool annotations (readOnlyHint, destructiveHint, idempotentHint). LLMs cannot distinguish safe reads from destructive writes without explicit hints. write_opcua_nodes, call_opcua_method, acknowledge_alarm, and act_on_alarm should be marked destructiveHint=true. Violates current MCP spec (2026-07-28).
No error handling or recovery guidance. Tools do not document what errors are retryable, user-fixable, or fatal. E.g., if read_opcua_nodes fails with 'node not found', the LLM has no guidance on next steps. Violates pattern:recovery-guide and pattern:error-classification.
Subscription tools (subscribe_opcua_nodes, subscribe_opcua_events) lack documentation of how subscriptions persist, how to retrieve updates, and when to call unsubscribe. Unclear if subscriptions are stateful or if updates are polled. Violates pattern:tool-description.