Skip to main content
Glama
Nodeblue-AI

ignition-mcp-server

by Nodeblue-AI

ignition-mcp-server

The first AI-powered development tool for Ignition SCADA — an MCP server that lets any AI agent read, understand, and interact with your Ignition projects and gateways.

License: MIT Python 3.10+ MCP

NOTE

This connector is early community tooling from Nodeblue. The complete system is Nexus, our industrial intelligence platform — these repos are just its connector layers.

Nexus reads and reasons over your entire operation: PLC logic, SCADA systems, live controller data, documentation, fault history, and MES/ERP records. It works across vendors — Rockwell, Siemens, Ignition, the CODESYS family, and 500+ more brands through PLCopen. It diagnoses faults on the running line, holds a persistent memory of the operation, and answers in plain English, cited to the source.

The Nodeblue open-source connectors

Connector

What it does

studio5000-mcp-server

Rockwell/Allen-Bradley Studio 5000 — parse L5X exports: tags, UDTs, routines, AOIs, cross-references

ignition-mcp-server (this repo)

Ignition SCADA — views, scripts, tags, UDTs, alarms, live gateway read/write

bridge-mcp-server

Correlates Ignition SCADA tags with Studio 5000 PLC logic end-to-end


What This Does

ignition-mcp-server connects AI agents (Claude, GPT, local LLMs) to your Ignition SCADA projects via the Model Context Protocol. It gives the AI structured access to:

  • Tags — browse tag hierarchies, filter by folder path, see data types and values

  • Perspective Views — read component trees, bindings, event handlers, and styles

  • Scripts — read project library scripts and gateway event scripts with scope info

  • UDTs — list and inspect User Defined Type definitions with member details

  • Alarm Pipelines — read alarm notification configurations with stages, profiles, and transitions

  • Named Queries — read SQL query definitions with parameters, database targets, and types

  • Live Tag Read/Write — read tag values on a running Ignition gateway via WebDev; writes are opt-in (--enable-writes)

  • Script Execution — run Python scripts on the gateway in gateway scope (opt-in, --enable-writes)

  • Tag History — query historical tag data with time range filtering

Works with both Ignition 8.1+ project exports (.zip files) and 8.3+ filesystem-based projects (direct directory access).

Related MCP server: ignition-mcp

Why This Exists

Ignition has ~300,000+ installations worldwide and zero AI tooling — no vendor copilot, no third-party tools, no academic research. Every other major automation platform (Siemens, Rockwell, Schneider) has AI assistants. Ignition has nothing.

This server fills that gap. It's open-source, agent-agnostic, and works offline.

Built and maintained by Nodeblue. These connectors are early community tooling from our work on Nexus, where this capability ships production-grade — alongside cross-vendor correlation, live fault diagnosis, and a persistent memory of the operation.


Installation

pip install ignition-mcp-server

Requires Python 3.10+.

To install from source instead:

git clone https://github.com/nodeblue-ai/ignition-mcp-server.git
cd ignition-mcp-server
pip install .

Quick Start

stdio (local — kiro-cli, Claude Desktop, Claude Code)

ignition-mcp-server

SSE (remote — server on one machine, agent on another)

ignition-mcp-server --transport sse --port 8080

With live gateway connection

ignition-mcp-server --gateway-url https://my-gateway:8088 --gateway-username admin --gateway-password changeme

This enables the read-only live tools: read_tag and get_history. Requires the WebDev module on the gateway with API endpoints configured (see Gateway Setup below).

WARNING

Live writes are disabled by default. write_tag and execute_script can change values on a running SCADA system and actuate real equipment. To enable them, you must explicitly opt in with --enable-writes:

ignition-mcp-server --gateway-url https://my-gateway:8088 --enable-writes

Only do this against non-production gateways, or when you fully understand what the connected AI agent is allowed to touch. Gated, audited, human-approved live writes are part of Nexus.


Configuration

kiro-cli

Add to your ~/.kiro/settings.json:

{
  "mcpServers": {
    "ignition": {
      "command": "ignition-mcp-server",
      "args": []
    }
  }
}

With live gateway access:

{
  "mcpServers": {
    "ignition": {
      "command": "ignition-mcp-server",
      "args": ["--gateway-url", "https://my-gateway:8088"]
    }
  }
}

Claude Desktop

Add to your Claude Desktop MCP config:

{
  "mcpServers": {
    "ignition": {
      "command": "ignition-mcp-server",
      "args": []
    }
  }
}

SSE (remote)

Start the server on your engineering workstation:

ignition-mcp-server --transport sse --host 0.0.0.0 --port 8080

Connect from any MCP client using the SSE URL: http://<host>:8080/sse


Available Tools

ping

Health check. Returns "pong".

get_tags(project_path, tag_path?, provider?)

Browse tags in the project. Optionally filter by folder path and tag provider.

get_tags("/path/to/project", "Conveyors/Line1")
get_tags("/path/to/project", "", "edge")

Returns tag names, types, data types, values, and documentation.

list_tag_providers(project_path)

List all tag provider names in the project (e.g. default, edge, MQTT).

list_views(project_path)

List all Perspective view paths in the project.

get_view(project_path, view_path)

Get a Perspective view's component tree with bindings and events.

get_view("/path/to/project", "Overview")

Returns component hierarchy, property bindings, and event handler counts.

list_scripts(project_path)

List all scripts with their scope (gateway, client, all).

get_script(project_path, script_path)

Get the source code of a project script.

get_script("/path/to/project", "ignition/script-python/utils")

list_udts(project_path)

List all UDT (User Defined Type) definition names.

get_udt(project_path, udt_name?)

Get UDT definition(s) with member details, parameters, and documentation.

get_udt("/path/to/project", "Motor_UDT")

list_alarms(project_path)

List all alarm pipeline names in the project.

get_alarm(project_path, pipeline_name)

Get an alarm pipeline's configuration including stages, notification profiles, and transitions.

get_alarm("/path/to/project", "MainAlarmPipeline")

Returns pipeline stages with type (delay, notification), notification profile names, contact info, consolidation periods, and transition counts.

list_named_queries(project_path)

List all named query names in the project.

get_named_query(project_path, query_name)

Get a named query's SQL, parameters, database connection, and type (Query vs Update).

get_named_query("/path/to/project", "GetActiveFaults")

Returns the SQL text, parameter definitions with data types and defaults, target database, and description.

read_tag(tag_path)

Read the current value of one or more tags from a live gateway. Comma-separate for multiple tags.

read_tag("[default]Conveyors/Line1/Speed")
read_tag("[default]Conveyors/Line1/Speed, [default]Conveyors/Line1/Running")

Requires --gateway-url at startup.

write_tag(tag_path, value)

Write a value to a tag on a live gateway. Handles boolean/numeric coercion automatically.

write_tag("[default]Conveyors/Line1/Speed", "1800")

Disabled by default. Requires --gateway-url and --enable-writes at startup.

execute_script(code)

Execute a Python script on the Ignition gateway in gateway scope.

execute_script("system.tag.readBlocking(['[default]Conveyors/Line1/Speed'])")

Disabled by default. Requires --gateway-url and --enable-writes at startup.

get_history(tag_path, start, end)

Query historical tag data from the gateway's historian.

get_history("[default]Conveyors/Line1/Speed", "2026-04-12T00:00:00Z", "2026-04-12T12:00:00Z")

Requires --gateway-url at startup.


Supported Project Formats

Format

How to Use

Project directory (8.1+ or 8.3+)

Point project_path to the project folder containing project.json

Project export (.zip)

Point project_path to the .zip file exported from Ignition Gateway or Designer

8.3 filesystem

Point to data/projects/<ProjectName>/ on the Gateway


Example Conversation

You: What tags are under the Conveyors folder?

Agent calls: get_tags("/projects/MyPlant", "Conveyors")

Agent: The Conveyors folder contains 2 items:
- Line1 (Folder) — 3 child tags: Running (Boolean), Speed (Float4), Faulted (Boolean)
- Line2_Motor (UDT Instance) — type: Motor_UDT

You: What does the Motor_UDT look like?

Agent calls: get_udt("/projects/MyPlant", "Motor_UDT")

Agent: Motor_UDT has 3 members:
- Running (Boolean) — Motor running status
- Faulted (Boolean) — Motor fault status
- Speed_RPM (Float4) — Motor speed in RPM
Parameters: MotorName (String)

You: Show me the Overview view

Agent calls: get_view("/projects/MyPlant", "Overview")

Agent: The Overview view has a flex container with 3 children:
1. titleLabel (ia.display.label) — bound to view.params.title
2. speedDisplay (ia.display.led-display) — bound to tag [default]Conveyors/Line1/Speed
3. startButton (ia.input.button) — has 1 onClick event handler

Gateway Setup

The live tools (read_tag, write_tag, execute_script, get_history) require the WebDev module on your Ignition gateway with the following REST endpoints:

Endpoint

Method

Purpose

/system/webdev/api/tags/read

POST

Read tag values

/system/webdev/api/tags/write

POST

Write tag values

/system/webdev/api/script/run

POST

Execute gateway scripts

/system/webdev/api/history/query

POST

Query tag history

Example WebDev Python resource for /api/tags/read:

def doPost(request, session):
    import json
    body = json.loads(request["data"])
    paths = body.get("tagPaths", [])
    values = system.tag.readBlocking(paths)
    return {
        "json": [
            {"path": str(v.path), "value": v.value, "quality": str(v.quality)}
            for v in values
        ]
    }

See the Ignition WebDev docs for full setup instructions.


Roadmap

v0.2 — Alarms & Named Queries ✅

  • list_alarms / get_alarm — parse alarm pipeline configurations

  • list_named_queries / get_named_query — parse SQL named queries with parameters

v0.3 — Live Gateway Interaction ✅

  • read_tag(tag_path) / write_tag(tag_path, value) — live tag interaction via Ignition WebDev module

  • execute_script(code) — run scripts on the gateway

  • get_history(tag_path, start, end) — query tag history

v0.4 — Cross-Platform Intelligence ✅

  • Cross-reference Ignition tags with Studio 5000 L5X PLC logic via bridge-mcp-server

  • "This alarm fires when tag X goes true — here's the PLC logic that drives X"

  • OPC item path extraction (opcItemPath, opcServer) in tag summaries

v0.5 — Write Safety Gate ✅

  • write_tag / execute_script disabled by default — opt in with --enable-writes

  • Safety warnings in tool descriptions and CLI help

Maintenance

  • PyPI publication (pip install ignition-mcp-server)

  • New Ignition version format support as releases come out

  • Bug fixes and edge cases from real project exports — issues welcome

This connector is feature-complete for its scope: single-project comprehension plus gateway connectivity. Development beyond that scope happens in Nexus.


This Connector vs. Nexus

The connector is the access layer. Nexus is the intelligence that sits on top of it — and of every other connector — as one system.

Capability

This connector

Nexus

Parse Ignition projects (tags, views, scripts, UDTs, alarms, queries)

Live gateway read / history

Live writes

⚠️ opt-in flag, unaudited

✅ gated, audited, human-approved

Cross-vendor: Rockwell, Siemens, CODESYS family (500+ brands), OPC UA

Live fault diagnosis on the running line (root-cause, cited)

Knowledge layer: your manuals, SFS/DOO docs, fault history — searchable, linked to logic

Persistent memory of the operation across sessions

Script generation, view scaffolding, code generation

Fleet scale: auto-discovery, whole-plant inventory, monitoring, alarming

Local LLM / air-gapped deployment

If you're evaluating this connector for anything beyond a single project on a single gateway, talk to us about Nexus.


Development

git clone https://github.com/nodeblue-ai/ignition-mcp-server.git
cd ignition-mcp-server
pip install -e .
pip install pytest
pytest tests/ -v

Project Structure

src/ignition_mcp_server/
├── __init__.py
├── __main__.py          # CLI entry point (stdio/SSE, gateway config)
├── server.py            # FastMCP server with all 17 tool definitions
├── project_source.py    # Read from .zip or directory (LRU-cached)
├── gateway_client.py    # HTTP client for live Ignition WebDev API
└── parsers/
    ├── tags.py          # Tag hierarchy parser (multi-provider)
    ├── views.py         # Perspective view parser
    ├── scripts.py       # Script discovery and reader
    ├── udts.py          # UDT definition parser
    ├── alarms.py        # Alarm pipeline parser
    └── named_queries.py # Named query parser

tests/
├── test_server.py       # 59 tests — parsers, project sources, error handling
├── test_gateway.py      # 18 tests — live gateway tools + write gating with mock HTTP server
└── fixtures/
    ├── sample-project/  # Synthetic Ignition project (directory)
    └── sample-project.zip

Contributing

Contributions welcome. This is an open-source project under MIT license.

If you have real Ignition project exports you can share (or anonymized versions), those are especially valuable for testing edge cases.


License

MIT


Install Server
A
license - permissive license
A
quality
B
maintenance

Maintenance

Maintainers
Response time
Release cycle
Releases (12mo)
Commit activity

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Servers

  • F
    license
    -
    quality
    A
    maintenance
    MCP server that connects AI assistants to Siemens TIA Portal via the Openness API. AI-assisted PLC programming, project management, hardware configuration, cross-reference analysis, and deployment. 16 tools, 166 actions.
    27
  • A
    license
    C
    quality
    C
    maintenance
    MCP server for Inductive Automation Ignition, enabling AI assistants to browse and write tags, query history and alarms, manage projects, and deploy Perspective views through natural language.
    43
    1
    MIT
  • A
    license
    A
    quality
    A
    maintenance
    An MCP server that turns AI assistants into competent Festo/CODESYS PLC engineers by grounding them in curated, manufacturer-accurate knowledge and forcing every artifact through a machine-checked validation pipeline for CODESYS import.
    18
    45
    1
    MIT
  • F
    license
    B
    quality
    B
    maintenance
    Universal MCP server for industrial PLC communication, enabling AI agents to read sensors, alarms, status, setpoints, and write setpoints via adapters for Modbus, S7, or custom PLCs.
    6

View all related MCP servers

Related MCP Connectors

  • Self-hosted MCP gateway: turn any API, database or MCP server into AI connectors — no code.

  • MCP server for AI agents to plan, verify, and deploy Cloudflare-native apps.

  • An MCP server for Arcjet - the runtime security platform that ships with your AI code.

View all MCP Connectors

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/Nodeblue-AI/ignition-mcp-server'

If you have feedback or need assistance with the MCP directory API, please join our Discord server