ignition-mcp-server
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@ignition-mcp-server list all tags in the Main folder"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
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.
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 |
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 |
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: @inscada/mcp-server
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-serverRequires 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-serverSSE (remote — server on one machine, agent on another)
ignition-mcp-server --transport sse --port 8080With live gateway connection
ignition-mcp-server --gateway-url https://my-gateway:8088 --gateway-username admin --gateway-password changemeThis 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).
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-writesOnly 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 8080Connect 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 export ( | Point |
8.3 filesystem | Point to |
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 handlerGateway 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 |
| POST | Read tag values |
| POST | Write tag values |
| POST | Execute gateway scripts |
| 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 configurationslist_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 moduleexecute_script(code)— run scripts on the gatewayget_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_scriptdisabled by default — opt in with--enable-writesSafety 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/ -vProject 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.zipContributing
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
Available Tools
17 toolsexecute_scriptA
Execute a Python script on the Ignition gateway and return the result.
DISABLED by default — requires the server to be started with --gateway-url AND --enable-writes. Scripts run in gateway scope with access to system.* functions and can change gateway state or actuate equipment.
Args: code: Python code to execute on the gateway.
Inputs: code (required). Returns: Generic wrapper for non-object return types.
get_alarmA
Get an alarm pipeline's configuration including stages, notifications, and transitions.
Args: project_path: Path to Ignition project directory or .zip export. pipeline_name: Alarm pipeline name (from list_alarms output).
Inputs: project_path (required), pipeline_name (required). Returns: Generic wrapper for non-object return types.
get_historyA
Query historical tag data from a live Ignition gateway.
Requires the server to be started with --gateway-url and a historian configured on the gateway.
Args: tag_path: Full tag path (e.g. "[default]Conveyors/Line1/Speed"). start: Start time as ISO 8601 (e.g. "2026-04-12T00:00:00Z"). end: End time as ISO 8601 (e.g. "2026-04-12T12:00:00Z").
Inputs: end (required), start (required), tag_path (required). Returns: Generic wrapper for non-object return types.
get_named_queryA
Get a named query's SQL, parameters, database connection, and type.
Args: project_path: Path to Ignition project directory or .zip export. query_name: Named query name (from list_named_queries output).
Inputs: query_name (required), project_path (required). Returns: Generic wrapper for non-object return types.
get_scriptA
Get the source code of an Ignition project script.
Args: project_path: Path to Ignition project directory or .zip export. script_path: Script resource path (from list_scripts output).
Inputs: script_path (required), project_path (required). Returns: Generic wrapper for non-object return types.
get_tagsA
Get tags from an Ignition project, optionally filtered by folder path.
Args: project_path: Path to Ignition project directory or .zip export. tag_path: Optional folder path to filter (e.g. "Conveyors/Line1"). provider: Tag provider name (default: "default"). Use list_tag_providers to discover.
Inputs: project_path (required), provider, tag_path. Returns: Generic wrapper for non-object return types.
get_udtB
Get UDT definition(s) with member details.
Args: project_path: Path to Ignition project directory or .zip export. udt_name: Optional UDT name. If empty, returns all UDTs.
Inputs: project_path (required), udt_name. Returns: Generic wrapper for non-object return types.
get_viewA
Get a Perspective view's component tree, bindings, and structure.
Args: project_path: Path to Ignition project directory or .zip export. view_path: View path (e.g. "Overview" or "Screens/MotorDetail").
Inputs: view_path (required), project_path (required). Returns: Generic wrapper for non-object return types.
list_alarmsB
List all alarm pipeline names in an Ignition project.
Args: project_path: Path to Ignition project directory or .zip export.
Inputs: project_path (required). Returns: Generic wrapper for non-object return types.
list_named_queriesA
List all named query names in an Ignition project.
Args: project_path: Path to Ignition project directory or .zip export.
Inputs: project_path (required). Returns: Generic wrapper for non-object return types.
list_scriptsA
List all scripts in an Ignition project with their scope.
Args: project_path: Path to Ignition project directory or .zip export.
Inputs: project_path (required). Returns: Generic wrapper for non-object return types.
list_tag_providersA
List all tag provider names in an Ignition project (e.g. 'default', 'edge').
Args: project_path: Path to Ignition project directory or .zip export.
Inputs: project_path (required). Returns: Generic wrapper for non-object return types.
list_udtsB
List all UDT (User Defined Type) names in an Ignition project.
Args: project_path: Path to Ignition project directory or .zip export.
Inputs: project_path (required). Returns: Generic wrapper for non-object return types.
list_viewsA
List all Perspective view paths in an Ignition project.
Args: project_path: Path to Ignition project directory or .zip export.
Inputs: project_path (required). Returns: Generic wrapper for non-object return types.
pingA
Health check — verify the server is running.
Inputs: no named parameters. Returns: Generic wrapper for non-object return types.
read_tagA
Read the current value of one or more tags from a live Ignition gateway.
Requires the server to be started with --gateway-url pointing to an Ignition gateway with the WebDev module installed.
Args: tag_path: Tag path(s), comma-separated for multiple (e.g. "[default]Conveyors/Line1/Speed").
Inputs: tag_path (required). Returns: Generic wrapper for non-object return types.
write_tagA
Write a value to a tag on a live Ignition gateway.
DISABLED by default — requires the server to be started with --gateway-url AND --enable-writes. Writing to a live gateway can actuate real equipment. The value is sent as-is; the gateway handles type coercion.
Args: tag_path: Full tag path (e.g. "[default]Conveyors/Line1/Speed"). value: Value to write (string representation — gateway coerces to tag data type).
Inputs: value (required), tag_path (required). Returns: Generic wrapper for non-object return types.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
Loading tool schema changelog…
TDQS
Scored across 17 tools
Each tool targets a distinct Ignition resource or live-gateway operation; list/get pairs are clearly scoped, and project-file tools like get_tags are differentiated from live tag tools like read_tag and get_history. No two tools appear to do the same thing.
Nearly all tools use snake_case verb_noun (list_views, get_view, execute_script, read_tag). Minor deviations are get_tags instead of the list_* pattern used for most other resources, and the bare ping health check.
17 tools are reasonable for covering tags, providers, views, scripts, UDTs, alarms, named queries, and live gateway operations, but slightly above the ideal 3-15 range.
The surface covers reading and inspecting most Ignition project resource types plus live tag read/write, script execution, and history. Gaps include no create/update/delete for project resources and no direct named-query execution, though execute_script can work around some.
Related MCP Connectors
Context and control for any AI. Agent identity, scoped access, and proof across tools.
Protocol-native energy infrastructure orchestration for AI data centers. Provides 46 MCP tools across 8 grid protocols (IEC-61850, DNP3, Modbus, OCPP, OpenADR, IEEE 2030.5, IEC 60870-5-104, ICCP) with 5 core API primitives: connect, dispatch, settle, comply, and intel. Enables AI agents to programmatically interact with substations, grid interfaces, and energy assets for real-time workload-grid coordination.
Query Allen-Bradley and Siemens PLC projects, live tag values, and analyses in plain English.
Connect your AI to your own devices, 3D printers, factory tools and a shared agent task pool.
Related MCP Servers
- AlicenseNot gradedqualityBmaintenanceEnables AI assistants to interact with Inductiveautomation's Ignition SCADA/MES platform through its REST API. Provides 45+ tools for gateway management, project operations, backup handling, log analysis, and license activation.43GPL 3.0

@inscada/mcp-serverofficial
AlicenseAqualityDmaintenanceEnables AI assistants to interact with inSCADA systems via the Model Context Protocol, providing 39 tools for live data, alarms, scripts, historical analysis, charts, and more.3948 npmMIT- AlicenseAqualityBmaintenanceThe 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.1712MIT
- AlicenseBqualityBmaintenanceProvides AI agents with safe, governed read access to industrial control systems (OPC-UA, Modbus, S7, Mitsubishi, MTConnect, MQTT/Sparkplug) plus cross-protocol diagnostics for troubleshooting data breaks, alarm floods, and unhealthy tags.15610MIT