ignition-mcp-server

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.

Category
Visit Server

README

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


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 and write tag values on a running Ignition gateway via WebDev
  • Script Execution — run Python scripts on the gateway in gateway scope
  • 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).

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.

Part of Project Automate by Nodeblue.


Installation

Install from source:

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

Requires Python 3.10+.

Note: pip install ignition-mcp-server from PyPI is coming soon. For now, install from source as shown above.


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_tag, write_tag, execute_script, and get_history tools. Requires the WebDev module on the gateway with API endpoints configured (see Gateway Setup below).


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")

Requires --gateway-url 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'])")

Requires --gateway-url 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 ✅

  • [x] list_alarms / get_alarm — parse alarm pipeline configurations
  • [x] list_named_queries / get_named_query — parse SQL named queries with parameters

v0.3 — Live Gateway Interaction ✅

  • [x] read_tag(tag_path) / write_tag(tag_path, value) — live tag interaction via Ignition WebDev module
  • [x] execute_script(code) — run scripts on the gateway
  • [x] get_history(tag_path, start, end) — query tag history

v0.4 — Cross-Platform Intelligence ✅

  • [x] Cross-reference Ignition tags with Studio 5000 L5X PLC logic via bridge-mcp-server
  • [x] "This alarm fires when tag X goes true — here's the PLC logic that drives X"
  • [x] OPC item path extraction (opcItemPath, opcServer) in tag summaries

Future

  • [ ] RAG pipeline over Ignition documentation + project corpus
  • [ ] Ignition script generation (gateway timer scripts, Perspective bindings)
  • [ ] Perspective view scaffolding from natural language descriptions
  • [ ] Local LLM support for air-gapped deployments

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      # 13 tests — live gateway tools 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


<p align="center"> <i>Built by <a href="https://www.nodeblue.ai">Nodeblue</a> — Engineering-driven technology across software, industrial automation, and applied research.</i> </p>

Recommended Servers

playwright-mcp

playwright-mcp

A Model Context Protocol server that enables LLMs to interact with web pages through structured accessibility snapshots without requiring vision models or screenshots.

Official
Featured
TypeScript
Magic Component Platform (MCP)

Magic Component Platform (MCP)

An AI-powered tool that generates modern UI components from natural language descriptions, integrating with popular IDEs to streamline UI development workflow.

Official
Featured
Local
TypeScript
Audiense Insights MCP Server

Audiense Insights MCP Server

Enables interaction with Audiense Insights accounts via the Model Context Protocol, facilitating the extraction and analysis of marketing insights and audience data including demographics, behavior, and influencer engagement.

Official
Featured
Local
TypeScript
VeyraX MCP

VeyraX MCP

Single MCP tool to connect all your favorite tools: Gmail, Calendar and 40 more.

Official
Featured
Local
Kagi MCP Server

Kagi MCP Server

An MCP server that integrates Kagi search capabilities with Claude AI, enabling Claude to perform real-time web searches when answering questions that require up-to-date information.

Official
Featured
Python
graphlit-mcp-server

graphlit-mcp-server

The Model Context Protocol (MCP) Server enables integration between MCP clients and the Graphlit service. Ingest anything from Slack to Gmail to podcast feeds, in addition to web crawling, into a Graphlit project - and then retrieve relevant contents from the MCP client.

Official
Featured
TypeScript
E2B

E2B

Using MCP to run code via e2b.

Official
Featured
Neon Database

Neon Database

MCP server for interacting with Neon Management API and databases

Official
Featured
Exa Search

Exa Search

A Model Context Protocol (MCP) server lets AI assistants like Claude use the Exa AI Search API for web searches. This setup allows AI models to get real-time web information in a safe and controlled way.

Official
Featured
Qdrant Server

Qdrant Server

This repository is an example of how to create a MCP server for Qdrant, a vector search engine.

Official
Featured