MCP Module Early Access

MCP Module Early Access

We are excited to announce the Early Access (EA) release of the new MCP Module for Ignition. This initial, limited-scope release is designed to demonstrate IA's commitment to the emerging AI landscape, providing a streamlined way to use Ignition to connect OT data with external Large Language Model (LLM) clients and tools.
This module requires a nightly build of the Ignition platform to run until the full release of Ignition 8.3.5.

What is the Early Access MCP Module?

The Model Context Protocol (MCP) Module is a new addition to the Ignition ecosystem, developed to bridge Ignition’s data with generative AI tools. This EA build provides the base infrastructure for connectivity and is focused on establishing a secure server implementation.

Limited Scope: What to Expect

This initial early access release is solely intended for early adopters who are willing to experiment and provide feedback.

Key Non-Goals for this EA Release:

  • This is not intended to provide complete, out-of-the-box solutions for using MCP.
  • The module will not include an Ignition-native MCP client.
  • The module itself does not provide any “primitives” (tools/resources/prompts).

The EA release will be provided free**, as-is** here on the forum for users to experiment with. While we have no plans to do so, we reserve the right to break any user defined primitives created in this early access during this EA period. This is an official IA module, but is not being offered with our usual backwards compatibility and stability guarantees. Crucially,

Support is not available for this early access release.

Future Plans

We recognize that the novelty of the Model Context Protocol means there are no true experts in the industry, and this EA phase is designed with a "learn-as-we-go" approach. We plan to iteratively develop and roll out new features based on real-world usage data and user feedback.

The full “1.0” release of the module will be a standard Ignition module available for use with 8.3 some time after this early access period concludes, and will be available as part of an existing solution suite.

Technical Details

The EA module implements the Model Context Protocol (MCP) version 2025-06-18 using the streamable HTTP transport layer and is compatible with Standard, Cloud, and Maker editions.

Each MCP “server” instance must be configured manually on disk by creating an appropriate config.json and resource.json file; more on that below. The 1.0 release will have a standard web based configuration experience.

The MCP module introduces three new resource types in the Designer for different "primitives":

  • Tools - Allows users to define a script to run when invoked by an MCP client.
  • Resources - Provides static data to share with MCP clients.
  • Prompts - Creates a function to invoke whenever an MCP client requests the given prompt, allowing you to generate a custom prompt for the client to use or customize further.

We look forward to gathering feedback and working with the community during this Early Access period.

To download the module, please complete our survey.

9 Likes

Getting Started

  1. Open the Designer.
  2. Create a new ‘Tool’ resource in the Model Context Protocol workspace.
    1. Give the tool a description to help your LLM choose to invoke it.
  3. Save the project and note your project’s name.
  4. Go to the Ignition installation directory and locate the /data/config/resources/core/ directory.
  5. Create a new folder named com.inductiveautomation.mcp/. Navigate into it.
  6. Create a new folder named server-config/. Navigate into it.
  7. Create a new folder named testing/. Navigate into it. Remember this resource name, we’ll reference it later.
  8. Create a new resource.json file. Enter the below contents:
{
    "scope": "A",
    "version": 1,
    "restricted": false,
    "overridable": true,
    "files": [
        "config.json"
    ],
    "attributes": {
        "uuid": "4895f9b3-eeb1-436f-b327-e54ab873db86"
    }
}
  1. Create a new config.json file. Enter the below contents; replace $test with the name of the project where you defined your test tool earlier.
    1. Note! The wildcard after the project/test entry means that all defined tools in this project will be exposed on this particular MCP server. This is useful for testing, but could lead to context pollution. Instead of a literal string ”*”, you can pass an array of paths to limit to a discrete set of tools/resources/prompts.
{
  "title": "Testing",
  "version": "1.0.0",
  "permissions": {
    "type": "AllOf",
    "securityLevels": [
      {
        "children": [],
        "name": "Authenticated"
      }
    ]
  },
  "tools": {
    "project/$test": "*"
  },
  "resources": {},
  "prompts": {}
}
  1. Scan the config filesystem, on the Platform Overview page.
  2. Create an API Key and copy it to a text file.
  3. In your LLM client of choice, figure out how to define an MCP server; often this is with an mcp.json file. The exact specification varies between clients, but generally you will end up with something like this. Note that the trailing portion of the url, testing, must match the resource name created as a folder earlier.
{
    "servers": {
        "ignition": {
            "url": "http://localhost:8088/data/mcp/testing",
            "type": "http",
            "headers": {
                "X-Ignition-API-Token": "your-token-here"
            }
        },
    }
}
  1. In your LLM client, confirm you are connected to the MCP server and ask it to invoke your test tool.

Easy Mode

Alternately, for an easier setup you can run this curl snippet, populating with your API key and project name(s) as needed:

curl -X POST http://localhost:8088/data/api/v1/resources/com.inductiveautomation.mcp/server-config \
     -H "Content-Type: application/json" \
     -H "X-Ignition-API-Token: your-token-here" \
     -d '[
  {
    "name": "testing",
    "collection": "core",
    "enabled": true,
    "description": "Test MCP Server Implementation",
    "config": {
      "title": "Testing",
      "version": "1.0.0",
      "permissions": {
        "type": "AllOf",
        "securityLevels": [
          {
            "children": [],
            "name": "Authenticated"
          }
        ]
      },
      "tools": {
        "project/test": "*"
      },
      "resources": {
        "project/test": "*"
      },
      "prompts": {
        "project/test": "*"
      }
    }
  }
]'

Alternate Scripted Setup

Summary

def createMcpServer(
	api_token, 
	server_name = "testing",
	project = system.project.getProjectName(),
	server_url = system.vision.getGatewayAddress(),
):
	if api_token is None:
		print "api token is missing"
		return

	url = "{}/data/api/v1/resources/com.inductiveautomation.mcp/server-config".format(server_url)
    
	data = [
    	{
    		"name": server_name,
    		"collection": "core",
    		"enabled": True,
    		"description": "{} MCP Server Implementation".format(server_name),
    		"config": {
    			"title": server_name,
    			"version": "1.0.0",
    			"permissions": {
    				"type": "AllOf",
    				"securityLevels": [
    					{
    						"children": [],
    						"name": "Authenticated"
						}
					]
				},
				"tools": {
					"project/{}".format(project): "*"
				},
				"resources": {
					"project/{}".format(project): "*"
				},
				"prompts": {
					"project/{}".format(project): "*"
				}
			}
		}
	]

	headers = {"X-Ignition-API-Token": api_token}
	
	return system.net.httpClient.post(url, data=data, headers=headers)

Usage:

createMcpServer("test:apiTokenHere")
2 Likes