Gates an LLM agent's writes to an OPC UA server on ranges, rate of change and live interlocks.
Connect Runs on your machine
claude mcp add otgate-opcua -e OTGATE_BACKEND=<OTGATE_BACKEND> -e OTGATE_POLICY=<OTGATE_POLICY> -e OTGATE_AUDIT=<OTGATE_AUDIT> -e OTGATE_SHADOW=<OTGATE_SHADOW> -e OTGATE_RATE_HISTORY=<OTGATE_RATE_HISTORY> -e OTGATE_OPCUA_ENDPOINT=<OTGATE_OPCUA_ENDPOINT> -- uvx otgate==0.1.1
{
"mcpServers": {
"otgate-opcua": {
"command": "uvx",
"args": [
"otgate==0.1.1"
],
"env": {
"OTGATE_BACKEND": "<OTGATE_BACKEND>",
"OTGATE_POLICY": "<OTGATE_POLICY>",
"OTGATE_AUDIT": "<OTGATE_AUDIT>",
"OTGATE_SHADOW": "<OTGATE_SHADOW>",
"OTGATE_RATE_HISTORY": "<OTGATE_RATE_HISTORY>",
"OTGATE_OPCUA_ENDPOINT": "<OTGATE_OPCUA_ENDPOINT>"
}
}
}
}
{
"mcpServers": {
"otgate-opcua": {
"command": "uvx",
"args": [
"otgate==0.1.1"
],
"env": {
"OTGATE_BACKEND": "<OTGATE_BACKEND>",
"OTGATE_POLICY": "<OTGATE_POLICY>",
"OTGATE_AUDIT": "<OTGATE_AUDIT>",
"OTGATE_SHADOW": "<OTGATE_SHADOW>",
"OTGATE_RATE_HISTORY": "<OTGATE_RATE_HISTORY>",
"OTGATE_OPCUA_ENDPOINT": "<OTGATE_OPCUA_ENDPOINT>"
}
}
}
}
{
"servers": {
"otgate-opcua": {
"type": "stdio",
"command": "uvx",
"args": [
"otgate==0.1.1"
],
"env": {
"OTGATE_BACKEND": "<OTGATE_BACKEND>",
"OTGATE_POLICY": "<OTGATE_POLICY>",
"OTGATE_AUDIT": "<OTGATE_AUDIT>",
"OTGATE_SHADOW": "<OTGATE_SHADOW>",
"OTGATE_RATE_HISTORY": "<OTGATE_RATE_HISTORY>",
"OTGATE_OPCUA_ENDPOINT": "<OTGATE_OPCUA_ENDPOINT>"
}
}
}
}
Replace the values in angle brackets with your own. Keys stay on your machine; we never see them.
Tools
This server runs locally, so its tools are listed by your MCP client once it starts.
Environment variables
| Name | Description |
|---|---|
OTGATE_BACKENDOptional | Backend to gate: 'fake' for the bundled in-memory reactor simulator, 'asyncua' for a real OPC UA server. Start with 'fake' — it needs no plant and no extra dependency. |
OTGATE_POLICYOptional | Path to the policy YAML. Any tag not listed in it is denied by default. |
OTGATE_AUDITOptional | Path to the append-only JSONL audit log. Every call, allowed or not, produces exactly one line. |
OTGATE_SHADOWOptional | Set to 1 to run in shadow mode: allowed writes are recorded as 'WOULD execute' and never reach the backend. Use this to watch an agent for a while before letting it touch anything. |
OTGATE_RATE_HISTORYOptional | Path to a JSONL file that keeps the rate-of-change time base across restarts. Without it a restart loses the time base, and rate limits fall back to a one-interval allowance. |
OTGATE_OPCUA_ENDPOINTOptional | OPC UA endpoint, e.g. opc.tcp://localhost:4840. Required when OTGATE_BACKEND=asyncua. |
Details
| Package | [email protected] (PYPI, stdio) |
| First published | 7 Nov 2026 |
| Last updated | 7 Nov 2026 |
| Registry name | io.github.alikup-ai/otgate-opcua |
More ai and media servers See all
Listing data from the official MCP registry. Status and tools from NestDaddy's daily check. Browse all MCP servers.
