For automation and OT architects in manufacturing and energy
An OPC UA MCP server that browses, reads and queries history, and never writes
An OPC UA MCP server lets Claude browse, read and query history on an aggregating OPC UA server in the level 3.5 DMZ with a read-only role. The OPC Foundation's server, checked on 19 September 2026, exposes Write and Call in its default profile. For MQTT and Sparkplug B, Pexon adds a last-value cache and denies NCMD and DCMD.
Two routes to the same shop floor
OPC UA or the unified namespace: what an agent gets from each
| What the agent has to answer | OPC UA server | MQTT / Sparkplug B UNS |
|---|---|---|
| What exists here? | Browse the address space; companion specifications help where the vendor implemented them. | The topic tree, plus the metric list each edge node and device announces in its birth certificate. |
| What is the value now? | Read, on demand. | Only what a last-value cache has kept. MCP is request and response; MQTT pushes and forgets. |
| What happened last night? | HistoryRead, if the server has history access configured. | Nothing, unless a historian subscribes to the UNS. A broker is not a history. |
| What must never be callable? | Write, Call, HistoryUpdate, AddNodes and DeleteNodes. | Publishing to NCMD and DCMD topics, which Sparkplug defines as commands to edge nodes and devices. |
| Where is access enforced? | X.509 application certificates plus the user role on the server. | Broker ACLs per client identity, over TLS. |
Most plants that run a UNS also run OPC UA servers underneath it. The connector can read both; the tool list decides which question goes where.
Why this is hard for agents
The protocol is standard. The address space is not.
OPC UA standardises how to ask, not what the answer is called. Browse names are whatever the machine builder or integrator chose, and companion specifications only help on equipment that implements them. An agent needs a map of your naming before it can answer anything about your line.
Then come zones. The OPC UA server embedded in a controller sits at level 1 or 2; the agent sits in the office. We connect only to an aggregating server in the DMZ at level 3.5, which is also where a DCS copy belongs: ABB documents OPC UA and OPC HDA access to System 800xA history, so an 800xA site is read from that downstream copy and never from its level 2 servers.
Certificates are a project of their own.
The OPC Foundation's MCP server also runs as a single process: a session opened on one instance is not found by another, and the README says neither session affinity nor a shared broker is provided. For the UNS the difficulty is different. MQTT has no request and response, so an agent needs a last-value cache in front of the broker, and without a disciplined ISA-95 topic hierarchy the tree is as hard to read as a bad address space.
What we build
Same OPC Foundation library, different tools registered
Opc.Ua.Mcp default profile (full)
- Attribute: Read and HistoryRead, but also Write and HistoryUpdate.
- Node management: AddNodes, AddReferences, DeleteNodes, DeleteReferences.
- Method: Call, which invokes whatever methods the server exposes.
- PKI: TrustCertificate and RemoveCertificate.
- Smallest profile: core still includes WriteValue and CallMethod.
Pexon read-only deployment
- Registered: Browse, TranslateBrowsePaths, Read and HistoryRead, nothing else.
- Server-side role: An OPC UA user whose role can only read, so the server refuses a write even if a tool existed.
- Placement: The aggregating server in the DMZ, one process, pinned.
- UNS: Broker ACL denies NCMD and DCMD to the agent's identity; answers come from a last-value cache.
- Audit: Every call logged with the person, the node or topic, and the result size.
The first tool list
Seven named read operations, agreed with the plant before the build
- browse_equipment(path) Walks the aggregated address space from a known root and returns node names, types and units.
- describe_node(node_id) Returns data type, engineering unit, range and the companion specification type, if one is implemented.
- read_values(node_ids) Current values for a capped number of nodes per call, with source timestamps and status codes.
- read_history(node_id, start, end, aggregate) HistoryRead with an aggregate such as average or maximum, never a raw export of every sample.
- uns_list_topics(prefix) The UNS topic tree below a prefix, so the agent can locate a line without guessing names.
- uns_last_value(topic) The latest decoded Sparkplug B metric values from the cache, with the time they arrived.
- uns_metric_definitions(edge_node) The metric names and types announced in the node's and devices' birth certificates.
How you start
From zone drawing to a connector in production
Today
Data is on the shop floor, agents are not
OPC UA servers in controllers, perhaps a UNS broker, and no path an agent is allowed to use.
where most plants are
Stage 1
Readiness Blueprint
Aggregating server and read-only role identified, the tool list agreed with the plant, and a costed build plan. All prices are net and exclude VAT.
€4,900 fixed, 2 weeks
Stage 2
Use-case pilot
The connector in production for one question, such as shift handover or downtime root cause, deployed in your environment from your repository.
from €15,000
Stage 3
Operate
You run it, or we monitor it. Either way the code, the tests and the runbook are yours.
from €3,000 per month
When not to build this
If you already run HighByte Intelligence Hub, use its embedded MCP server first: it has shipped since version 4.2 in July 2025, and version 4.3 added MCP tools for MQTT and OPC UA. We would then restrict and connect rather than build. And no OPC UA MCP server belongs anywhere near a control loop. The reasoning behind keeping even official servers read-only is on industrial MCP server security. We have not yet built this connector for a named customer.
Related
- MCP servers for industrial systems: 52 systems mapped — where OPC UA and the UNS sit among the other OT and IT systems
- PI System integration for Claude — the historian route, where the history the UNS lacks usually lives
- Claude MCP server development — the protocol side for any internal system
Questions about OPC UA, MQTT and agents
Is there an official OPC UA MCP server?
Yes, in the OPC Foundation's .NET reference stack. Opc.Ua.Mcp in the UA-.NETStandard repository covers the OPC UA Part 4 service sets over stdio or Streamable HTTP and ships as NuGet libraries you can embed. Its default profile, full, registers every tool, and even the smallest profile, core, contains WriteValue and CallMethod. We use it as a library and register only the read tools.
Can the agent connect straight to the OPC UA server in a PLC?
No, and we will not set it up that way. A PLC-embedded server sits at level 1 or 2, and an agent connection from the office network would cross the zones the plant already drew. The connector reads an aggregating OPC UA server in the DMZ, the same place a historian or a DCS copy already sits. For ABB System 800xA, for example, ABB documents OPC UA and OPC HDA access to history, which is the downstream copy we would read.
Does an MQTT MCP server understand Sparkplug B?
Not the generic ones we checked on 19 September 2026. ezhuk/mqtt-mcp, for example, offers one tool to receive and one to publish a message on a topic, with no Sparkplug decoding. Sparkplug B payloads are protobuf, and the metric definitions arrive in birth certificates. A useful UNS connector decodes both, answers from a last-value cache and never has the right to publish to a command topic.
What does an OPC UA MCP server cost to build?
The two-week Readiness Blueprint is fixed at €4,900: the aggregating server and its read-only role identified, the tool list agreed, and a costed plan. A first production connector is usually a use-case pilot from €15,000. Monitoring, if you want us to watch it in operation, starts at €3,000 per month. All prices are net and exclude VAT.
What will an OPC UA or UNS connector not do?
It will not close a loop or react to an alarm. Answers come back in seconds through a request and response protocol, which suits diagnosis and reporting and nothing time-critical. It also cannot repair an address space whose browse names only make sense to the integrator who wrote them, or a topic tree without an ISA-95 hierarchy. Where history is missing on the server or the UNS, the agent has no history either.
Next step
Not a sales call. An architecture call.
Thirty minutes with the engineer who would build it, ideally with your zone drawing and the name of your aggregating server.
