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 answerOPC UA serverMQTT / 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

  1. 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

  2. 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

  3. 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

  4. 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

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.