Energy & Critical Infrastructure

Agents read OT tools, a person approves writes.

Energy companies use agents for maintenance planning, fault analysis, field reports and regulatory compliance. Some want read access to OT systems. EPDK regulations and critical-infrastructure guides keep the OT network closed. Thulpar runs in front of the OT tool servers as an MCP proxy. Schemas are pinned, write tools are denied by default and read tools are labelled.

Policy template

tr-public-sector

Recommended install

On-premise or air-gap, Standard tier. The MCP proxy in front of the OT tools.

Surfaces
MCP proxyCheck API
Regulatory basis
  • EPDK regulations · Energy Market legislation
  • Presidential Circular 2019/12 (critical infrastructure)
  • NIS2 (EU subsidiaries), the IEC 62443 context
Policy template

The OT/IT boundary

Sensor data the agent reads must not flow to external tools. Writes must not happen at all.

Watch the runs →
Runs

The scenarios below are derived from the product’s real rules.

Every scenario is an agent run written to the product’s real rules. It shows the stage, the rails, the decision, the finding, the approval and the ledger entry step by step.

3 scenarios →
Energy & Critical Infrastructure

What comes up in practice

The OT/IT boundary

Sensor data the agent reads must not flow to external tools. Writes must not happen at all.

Tool-server drift

When an MCP server updates, a new tool must not run without authorisation.

Incident evidence

After an incident, what the agent saw, what it proposed and who approved must sit in one chain.

Runs

3 scenarios

The player opens on the flagship scenario. Pick the others below.

Maintenance-planning agent on the OT MCP proxy · Maintenance-planning agent · OT MCP proxymcptr-public-sectorstandart
Decision trailMaintenance Planner · qwen3-32b · vLLM · plant data centre (air-gap)
S
01tool_callsystem
The proxy receives tools/list: 4 tools; the schema hashes match the pinned version exactly.
U
02inputuser
Shift engineer: “Propose maintenance for transformer TRF-2 from its 24-hour temperature trend.”
A
03tool_callagent
The scada:read_tags {tags: "TRF-2.*", hours: 24} read call; a permit in the ot-read group.
T
04tool_resulttool
288 samples return; the oil temperature exceeded 85 °C twice, the fan threshold is 85 °C.
A
05tool_callagent
The agent wants to call scada:write_setpoint {tag: "TRF-2.fan_threshold", value: 80}.
A
06tool_callagent
The cmms:open_work_order {asset: "TRF-2", note: "fan threshold 85→80 °C proposal, oil analysis"} call.
A
07tool_callagent
The agent wants to put the 288 samples on the shared drive with export:csv (“for reporting”).
M
08outputmodel
The answer: the trend summary, the work order and the pending approval; a note that the export was denied.
Thulpar · Rails

The agent reads SCADA and proposes maintenance; Cedar denies the set-point write, the proposal goes to the shift lead.

scada:read_tagsscada:write_setpointcmms:open_work_orderexport:csv
Controls: GR-TOOL-01 · GR-TOOL-02 · GR-TOOL-03 · GR-IFC-01 · GR-LOG-01
Evidence ledger0000…0000
Simulation · runs in your browser · no request leaves the pageadded latency: 0 ms · 8 steps · SHA-256 chain
Controls exercised in these scenarios

9 GR-*

idcontrolOWASPrails
GR-TOOL-01Tool-call privilege policy (default deny)LLM06 / ASI02, ASI03 / MCP02tool.authz, tool.args
GR-TOOL-02Durable human approval on high-impact actions, four eyesLLM06 / ASI02, ASI09labels.sink
GR-TOOL-03Tool schema pinning / diff / quarantine (rug-pull)LLM03 / ASI04 / MCP03, MCP04tool.schema_pin
GR-IFC-01Information-flow labels (integrity, confidentiality, tenant, PII class) enforced at sensitive sinksLLM02 / ASI01, ASI03 / MCP10labels.sink, pii.detect
GR-LOG-01Tamper-evident event log (model/tool/policy/approval/hit), ≥ 6 months, auditor export— / — / MCP08
GR-INJ-02Indirect injection from tool/RAG output: untrusted label, no new tool call without policyLLM01, LLM08 / ASI01, ASI06 / MCP06, MCP10injection.indirect, file.hidden_text
GR-MEM-01Memory-poisoning policy + provenance— / ASI06 / MCP10memory.write
GR-OUT-01Output handling: no raw HTML, code sandbox, schema validationLLM05 / ASI05 / MCP05code, schema, regex, secrets, file.analyze, file.type, file.active_content, yara
GR-EXF-01Tenant egress allowlist; no remote images in chat; no PII in URLs; SSRFLLM02, LLM05 / ASI02 / MCP06exfil, tool.args, file.qr

The full catalogue and evidence packs →

See it in your own environment.

A one-hour technical demo: your scenario, your policy pack, on a closed-circuit install. Then the install kit and a trial licence for a pilot.