Skip to content

MCP server for Industrial IoT, SCADA and PLC systems. Unifies MQTT sensors, Modbus devices and industrial equipment into a single AI-orchestrable API. Features real-time monitoring, alarms, time-series storage and actuator control.

License

Notifications You must be signed in to change notification settings

poly-mcp/IoT-Edge-MCP-Server

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 

History

12 Commits
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

MseeP.ai Security Assessment Badge

IoT/Edge MCP Server

Featured Article

Model Context Protocol (MCP) server for Industrial IoT, Edge Computing and Automation

This server transforms industrial infrastructure into an AI-orchestrable system, exposing 11 powerful tools for complete IoT/SCADA/PLC control via HTTP endpoints. Perfect for AI-driven industrial automation, predictive maintenance, and smart factory operations.

✨ Features

  • 🏭 Multi-Protocol Support - Unified interface for industrial systems:

    • MQTT for wireless IoT sensors and actuators
    • Modbus TCP/RTU for PLC and industrial devices
    • Time-series data with InfluxDB integration
    • Real-time caching with Redis
    • Simulated mode for testing without hardware
  • πŸ“Š Complete Sensor Management - Monitor and analyze industrial data:

    • Real-time sensor readings (temperature, pressure, flow, etc.)
    • Historical data with aggregations (mean, max, min)
    • Multi-sensor batch operations
    • Quality indicators and signal monitoring
  • ⚑ Actuator Control - Command industrial equipment:

    • Valve control (open/close)
    • Motor management (start/stop/speed)
    • Pump operations
    • PLC register manipulation
  • 🚨 Alarm System - Enterprise-grade monitoring:

    • Multi-priority alarms (LOW, MEDIUM, HIGH, CRITICAL)
    • Automatic threshold monitoring
    • Alarm acknowledgment tracking
    • Real-time notifications
  • πŸ”’ Production Features - Enterprise-ready:

    • Rate limiting for command safety
    • Comprehensive error handling
    • Connection pooling and auto-reconnect
    • Full audit logging
    • Thread-safe operations

πŸš€ Quick Start

Installation

# Clone the repository
git clone https://github.com/llm-use/iot-mcp-server.git
cd iot-mcp-server

# Install dependencies
pip install -r requirements.txt

# For testing without hardware, use simulation mode
pip install -r requirements-sim.txt

Starting the Server

Option 1: Simulation Mode (No Hardware Required)

python IoT_mcp_sim.py

Option 2: Production Mode (Real Hardware)

# Configure your devices in iot_config.yaml
# Start required services (MQTT, InfluxDB, Redis)
docker-compose up -d

# Start the server
python IoT_mcp.py

Server will start on http://localhost:8000

πŸ€– Using with PolyMCP

This MCP server is designed to work seamlessly with PolyMCP - a powerful framework for orchestrating MCP servers with AI agents.

Example: AI-Controlled Industrial System

#!/usr/bin/env python3
import asyncio
from polymcp.polyagent import UnifiedPolyAgent, OllamaProvider

async def main():
    # Initialize your LLM provider
    llm = OllamaProvider(model="gpt-oss:120b-cloud", temperature=0.1)
    
    # Connect to IoT MCP server
    agent = UnifiedPolyAgent(
        llm_provider=llm, 
        mcp_servers=["http://localhost:8000/mcp"],  
        verbose=True
    )
    
    async with agent:
        print("βœ… IoT MCP Server connected!\n")
        
        # Chat with your AI to control the industrial system
        while True:
            user_input = input("\n🏭 You: ")
            
            if user_input.lower() in ['exit', 'quit']:
                break
            
            result = await agent.run_async(user_input, max_steps=5)
            print(f"\nπŸ€– System: {result}")

if __name__ == "__main__":
    asyncio.run(main())

Example Commands

Once connected, you can ask the AI agent to:

  • "Check the status of all temperature sensors and report any anomalies"
  • "What's the average pressure in tank 1 over the last 6 hours?"
  • "Open the main valve and start pump 1"
  • "Show me all critical alarms that haven't been acknowledged"
  • "If temperature exceeds 50Β°C, activate cooling system"
  • "Generate an end-of-shift report with key metrics"
  • "Monitor vibration sensor and alert if it exceeds normal range"
  • "Optimize energy consumption by analyzing motor usage patterns"

That's it! PolyMCP handles all the complexity of:

  • Tool discovery and selection
  • Multi-step industrial process automation
  • Real-time monitoring and alerting
  • Complex decision logic implementation

πŸ“‘ API Endpoints

Once the server is running, you can access:

  • API Documentation: http://localhost:8000/docs
  • List All Tools: http://localhost:8000/mcp/list_tools
  • Invoke Tool: POST http://localhost:8000/mcp/invoke/{tool_name}

πŸ› οΈ Available Tools

View all available tools (11 tools)

Sensor Operations

  • read_sensor - Read current value from a single sensor
  • read_multiple_sensors - Batch read multiple sensors
  • get_sensor_history - Retrieve historical data with optional aggregation

Actuator Control

  • execute_actuator_command - Send commands to actuators (valves, motors, pumps)

System Management

  • get_device_topology - View complete system architecture
  • list_devices - List all registered devices with status
  • get_system_status - Overall system health and statistics

Alarm Management

  • get_active_alarms - View active alarms by priority
  • acknowledge_alarm - Confirm alarm acknowledgment

PLC Operations

  • read_modbus_registers - Read PLC registers via Modbus
  • write_modbus_register - Write values to PLC registers

πŸ”§ Configuration

Basic Configuration (iot_config.yaml)

mqtt:
  broker: "localhost"
  port: 1883
  username: "iot_user"
  password: "secure_password"

modbus:
  devices:
    - device_id: "plc_01"
      name: "Main PLC"
      type: "tcp"
      host: "192.168.1.100"
      port: 502

influxdb:
  url: "http://localhost:8086"
  token: "your-token"
  org: "iot"
  bucket: "sensors"

redis:
  host: "localhost"
  port: 6379

Environment Variables

export MQTT_BROKER="broker.hivemq.com"
export INFLUX_TOKEN="your-token"
export REDIS_HOST="localhost"

πŸ“‹ Requirements

For Production Mode:

  • Python 3.8+
  • MQTT Broker (Mosquitto, EMQX, HiveMQ, or any MQTT 3.1.1/5.0 broker)
  • InfluxDB 2.0+ (for time-series data)
  • Redis (for caching)
  • Industrial devices (PLCs with Modbus, IoT sensors)

For Simulation Mode:

  • Python 3.8+
  • No external dependencies!

πŸ› Troubleshooting

Can't connect to MQTT?

  • Check broker is running: mosquitto_sub -h localhost -t '#'
  • Verify credentials in config
  • Check firewall settings

Modbus connection failed?

  • Ensure PLC is accessible: ping <plc_ip>
  • Verify Modbus is enabled on device
  • Check port (usually 502 for TCP)

No sensor data?

  • Check MQTT topics match configuration
  • Verify sensor is publishing data
  • Look at Redis cache: redis-cli get sensor:*

πŸ—οΈ Architecture

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”     β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”     β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚ IoT Sensors │────▢│  MQTT       │────▢│             β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜     β”‚  Broker     β”‚     β”‚             β”‚
                    β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜     β”‚   IoT MCP   β”‚     β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”     β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”     β”‚   Server    │────▢│  PolyMCP    β”‚
β”‚    PLCs     │────▢│  Modbus     │────▢│             β”‚     β”‚  AI Agent   β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜     β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜     β”‚             β”‚     β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
                                        β”‚             β”‚
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”                         β”‚             β”‚     β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚  InfluxDB   │◀────────────────────────│             │────▢│   Redis     β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜                         β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜     β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

🀝 Contributing

Contributions are welcome! This project demonstrates industrial IoT integration with MCP protocol.

Development Setup

# Clone repo
git clone https://github.com/llm-use/iot-mcp-server.git

# Create virtual environment
python -m venv venv
source venv/bin/activate  # or venv\Scripts\activate on Windows

# Install dev dependencies
pip install -r requirements-dev.txt

# Run tests
pytest tests/

πŸ“ License

MIT License - See LICENSE file for details

πŸ”— Related Projects

  • PolyMCP - Simple and efficient way to interact with MCP servers using custom agents
  • Model Context Protocol - Open protocol for tool integration with LLMs
  • MQTT Protocol - Lightweight messaging protocol for IoT
  • Modbus Protocol - Industrial communication protocol
  • Mqttcpp - A lightweight and fast C++ library for building MQTT clients and brokers

πŸ’‘ Why This Project?

This MCP server bridges the gap between Industrial IoT and AI agents. With PolyMCP, you can:

  1. Natural Language Control - "Check all pressure sensors and alert if any are abnormal"
  2. Complex Automation - AI can orchestrate multi-step industrial processes
  3. Predictive Maintenance - AI analyzes trends and predicts failures
  4. Energy Optimization - AI optimizes equipment usage for efficiency
  5. Incident Response - AI handles alarms and executes emergency procedures

No complex industrial protocols to learn - PolyMCP and AI handle everything!

πŸš€ Use Cases

  • Smart Factory - AI-driven production line optimization
  • Building Automation - Intelligent HVAC and lighting control
  • Energy Management - Real-time consumption optimization
  • Predictive Maintenance - Equipment failure prediction
  • Quality Control - Automated anomaly detection
  • Emergency Response - AI-managed incident handling

Designed for PolyMCP

Star ⭐ this repo if you find it useful!

About

MCP server for Industrial IoT, SCADA and PLC systems. Unifies MQTT sensors, Modbus devices and industrial equipment into a single AI-orchestrable API. Features real-time monitoring, alarms, time-series storage and actuator control.

Topics

Resources

License

Stars

Watchers

Forks

Languages