Connects to an OPC UA server and exposes it via MCP (Model Context Protocol)
Server exposes 3 read-only OPC UA tools with basic verb-noun naming and functional descriptions, but lacks critical schema documentation, parameter descriptions, and output structure guidance. Tool descriptions are present but thin (40-60 chars), and input schemas exist but lack descriptions for parameters. No error handling guidance, no output schema documentation, and no pagination support despite tools that could return large result sets. Follows basic conventions but misses LLM-optimization patterns that would enable confident tool selection and error recovery.
Find nodes by browse name pattern (supports wildcards)
Find nodes by display name pattern (supports wildcards)
Read the current value of one or more OPC UA nodes
Parameter 'node_ids' in read_value and 'pattern' in find_by_display_name/find_by_browse_name lack descriptions in schema. LLMs cannot understand constraints or expected formats without parameter-level documentation.
No output schema documented for any tool. LLMs cannot plan downstream calls or extract relevant fields. read_value should document the structure of returned values (type, timestamp, quality). find_* tools should document NodeInfo structure (node_id, browse_name, display_name, node_class).
No pagination support in find_by_display_name and find_by_browse_name despite potential for returning large node trees. Wildcard patterns could match hundreds of nodes; no limit, offset, or total_count in the schema.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | D | 52 | 2026-07-28+ | v2 |
| 2026-03-09 | F | 40 | - | v1 |
Tool descriptions are below baseline (194 chars). read_value is ~50 chars, find_by_display_name is ~55 chars. Descriptions lack context on WHEN to use each tool, what they return, and any prerequisites (e.g., 'Call this first to browse available nodes before reading their values').
No error handling guidance. If a node_id is invalid, LLM has no recovery hint. Should return: 'Node not found: <node_id>. Call find_by_display_name() to search for available nodes.' Error handling is silent in current implementation.
read_value accepts an array of node_ids but no documentation on behavior if some fail. Should document: 'Returns a dict mapping node_id → value or error. If one node fails, others still return results.'
No tool annotation hints (readOnlyHint, destructiveHint, idempotentHint). All three tools are read-only but this is not declared in the tool definition for LLM planning.