Hybrid Track: Govern Without Disrupting Production

Your SCADA, MES, and historians keep running. We add governance on top.


What You'll Achieve

By the end of this track:

  • Unified production view across SCADA, MES, and historians
  • Standardized OEE that everyone trusts
  • Full audit trail of every query and metric
  • MCP connection for AI-powered production analysis

All without touching your existing control systems.


Phase 1: Connect Your Data

Step 1.1: Create IoT Hub Connection

Connect your existing production data to OpenIndustrial.

Option A: Using the UI

  1. Open your workspace
  2. Drag a Connection node from the Node Bank onto your canvas
  3. Click the node to open the Inspector
  4. In Settings, configure for Azure IoT Hub
  5. Enter your connection string
  6. Commit your changes (click the save icon in the top-left)

Option B: Ask Azi

Step 1.2: Common Production Data Sources

SourceProtocolOI Connection
SCADA/PLCOPC-UA via EdgeIoT Hub
MESAPI/DatabaseDatabase connection
HistorianMQTT/OPC-UAIoT Hub
Quality systemAPI/CSVDatabase connection
Thinking Tip:

Start with your historian—it typically has the most complete production data.


Phase 2: Create Production Surfaces

Step 2.1: Create Line Surface

Ask Azi:

"Create a surface for Line 1 production monitoring that includes cycle time, quality, and availability data."

Azi proposes:

  • Surface name: Line-1-Production
  • Nodes: CycleTime, QualityMetrics, Availability
  • Description: Line 1 OEE components

Review and approve.

Step 2.2: Create Additional Surfaces

Build out your production hierarchy:

SurfaceNodesPurpose
Line-2-ProductionSame structureLine 2 monitoring
Quality-ControlDefects, Inspections, HoldsQC visibility
Downtime-TrackingStops, Causes, DurationAvailability analysis

Surfaces become governed containers. The same query definition applies consistently across lines.


Phase 3: Build Production Queries with Azi

Every query is tracked, standardized, and auditable.

Step 3.1: OEE Query

Ask Azi:

"Create a warm query that calculates OEE (Availability × Performance × Quality) for Line 1 over the last shift."

Azi proposes:

let ShiftStart = ago(8h);
let Availability = ProductionData
| where Line == "Line1" and Timestamp > ShiftStart
| summarize RunTime = sum(iff(Status == "Running", Duration, 0)),
            PlannedTime = sum(Duration)
| project Availability = RunTime / PlannedTime;
let Performance = ProductionData
| where Line == "Line1" and Timestamp > ShiftStart
| summarize ActualUnits = sum(Units),
            IdealCycleTime = 60, // seconds
            RunTime = sum(iff(Status == "Running", Duration, 0))
| project Performance = (ActualUnits * IdealCycleTime) / (RunTime * 60);
let Quality = QualityData
| where Line == "Line1" and Timestamp > ShiftStart
| summarize GoodUnits = sum(iff(Status == "Pass", 1, 0)),
            TotalUnits = count()
| project Quality = GoodUnits / TotalUnits;
print OEE = toscalar(Availability) * toscalar(Performance) * toscalar(Quality) * 100

Review, adjust parameters, approve.

Step 3.2: Downtime Pareto

Ask Azi:

"Build a query that shows top 10 downtime causes by duration for this week."

Azi proposes:

DowntimeEvents
| where Timestamp > ago(7d)
| summarize TotalMinutes = sum(DurationMinutes), Count = count() by Cause
| top 10 by TotalMinutes desc
| project Cause, TotalMinutes, Count,
          Percentage = TotalMinutes / toscalar(DowntimeEvents | where Timestamp > ago(7d) | summarize sum(DurationMinutes)) * 100

Step 3.3: Quality Trend

Ask Azi:

"Create a query that shows first-pass yield by day for the last 30 days."

Azi proposes:

QualityData
| where Timestamp > ago(30d)
| summarize GoodUnits = sumif(1, Status == "Pass"),
            TotalUnits = count() by bin(Timestamp, 1d)
| extend FirstPassYield = GoodUnits * 100.0 / TotalUnits
| order by Timestamp asc

Phase 4: Access Your APIs

Step 4.1: Find Your Endpoint

  1. Open the APIs menu in the top bar
  2. Select Warm Query Manager
  3. Choose your warm query from the dropdown
  4. Copy the endpoint URL and code examples

Step 4.2: Integrate with Dashboards

Every warm query gets an API endpoint:

curl -X GET 'https://www.openindustrial.co/api/workspaces/explorer/warm-queries/line1-oee' \
  -H 'Authorization: Bearer YOUR_TOKEN'

Step 4.3: Common Integrations

IntegrationUse Case
Andon boardReal-time OEE display
Shift handoffAutomated production summary
MESGoverned metrics in existing system
AlertingNotify when OEE drops below target

Phase 5: Connect MCP-Native AI

Step 5.1: Get MCP Configuration

  1. Open the APIs menu in the top bar
  2. Select API Keys to generate a JWT token
  3. Use the configuration below with your workspace ID and token

Step 5.2: Configure Claude Desktop

{
  "mcpServers": {
    "production-data": {
      "command": "npx",
      "args": [
        "-y",
        "@openindustrial/mcp-server",
        "--workspace", "YOUR_WORKSPACE_ID",
        "--token", "YOUR_TOKEN"
      ]
    }
  }
}

Step 5.3: Ask Production Questions

Ask Claude:

"What's causing the OEE drop on Line 1 this week compared to last week?"

Claude queries your governed data, correlates downtime with quality, and provides insights—all logged.

When the plant manager questions an AI recommendation, you can show exactly what data it used and what queries it ran.


What You Built

ComponentStatus
IoT Hub connection✓ Connected to historian/SCADA
Production surfaces✓ Line-level organization
OEE queries✓ Standardized, governed
API endpoints✓ Dashboard integration
MCP integration✓ Claude analyzing production

Category Metrics

MetricYour Result
Time to First Governed Query~30 minutes
Queries built3+
Audit coverage100%
AI connectedClaude Desktop

Before vs After

Before Control PlaneAfter Control Plane
"Everyone calculates OEE differently"One query, one definition, auditable
Spreadsheet shift reportsGoverned API endpoints
AI guesses about root causeAI insights with data lineage
Manual downtime analysisAutomated, traceable Pareto

Next Steps

If you want to...Go to...
Try the Full trackFull Track →
See query patternsPatterns →
Deep-dive on MCPMCP Guide →
Explore energyEnergy Journey →
On this page