Plctap logo

Plctap

Connects MCP clients to PLCs for protocol detection, reads, diagnostics, packet analysis, proxying, and gated writes.

Install Plctap

Pick your client, then add it in one click or paste the config.

STDIOPython
~/Library/Application Support/Claude/claude_desktop_config.json
claude_desktop_config.json
{
  "mcpServers": {
    "plctap": {
      "command": "uvx",
      "args": [
        "plctap"
      ]
    }
  }
}

Settings → Developer → Edit Config, merge this into mcpServers, then fully quit and reopen Claude Desktop.

Automated check passed— started and listed 15 tools correctly (15d ago).

Overview

The plctap MCP server connects AI agents to PLCs using Modbus TCP, Modbus RTU over TCP, FINS, MELSEC, Siemens S7, IEC 60870-5-104, EtherNet/IP, and OPC UA. It runs as a stdio process installed with uvx or pipx, and provides tools for device detection, protocol-specific reads, frame parsing, diagnostics, listeners, and transparent proxies. Write and frame-sending tools are excluded by default and require an explicit environment-variable gate. Reach for it when an agent needs to inspect industrial protocol traffic, read PLC data, or assist with communication troubleshooting.

Use cases

  • Detect an unknown PLC protocol from an IP address
  • Read registers, memory areas, tags, or OPC UA nodes
  • Diagnose PLC communication failures from frames or logs
  • Record bidirectional PLC traffic through a transparent proxy
  • Test client error handling with listener fault injection

Key features

  • Automatic protocol detection with read suggestions
  • Reads across eight industrial protocol endpoints
  • Structured frame, pcap, and diagnostic analysis
  • Transparent proxy and simulated listener modes
  • Gated PLC writes with JSONL audit logging

Tools15

What Plctap lets your agent do. Expand a tool for its parameters.

Verified live~2.2k tokens of context

Security & health

What it can reach and how reliably it runs — from our own checks, not the maintainer’s claims.

ActiveLast checked 1d ago

Recent health check succeeded.

5/5 checks healthy over the last 45d

Supply-chain signal

No high-severity advisories surfaced by our automated scan.

Critical 0High 0Medium 0Low 0

Scanned 8d ago via OSV.dev · plctap (PyPI)

Adoption & maintenance

Factual signals from GitHub, npm, and our automated checks — not a rating.

GitHub stars2Stargazers on the source repository.
Last commit1mo agoMost recent push to the default branch.
Availability100%Our rolling endpoint + install checks that succeeded.
Install checkPassedOur sandbox started it and listed its tools.
Tools exposed15Callable tools this server registers over MCP.
Directory activity3 viewsConfig copies, upvotes, and views on AllMCPs.

How Plctap works

What the plctap MCP server does

The plctap MCP server gives MCP clients access to PLC connectivity and diagnostics across eight protocol endpoints: Modbus TCP, Modbus RTU over TCP, Omron FINS, MELSEC, Siemens S7comm, IEC 60870-5-104, EtherNet/IP through CIP, and OPC UA. It can identify a likely protocol from an IP address, test connectivity, read values using protocol-specific addressing, and interpret returned data using supported numeric types and byte orders.

It also supports packet- and traffic-focused troubleshooting. Individual frames can be parsed and checked against protocol rules, exported pcap files can be processed by stream, and diagnostic input can be turned into structured candidate findings. For live investigations, a transparent proxy records traffic between an upper-level system and a PLC, while a listener can act as a simulated server for devices that initiate connections.

How it works

The normal workflow starts with detect_device when the target protocol is unknown. The tool probes standard ports concurrently, uses response fingerprints, and can perform a read in deep mode to produce a suggested plc_read call. probe_device then separates common failure classes such as refusal, timeout, no response after connection, and protocol exception.

plc_read accepts a protocol, target, address, count, and optional protocol settings. Address semantics differ by endpoint: Modbus uses zero-based register addresses, S7 uses byte offsets, FINS and MELSEC use vendor-specific areas, IEC 104 uses IOA values, EtherNet/IP uses tag names, and OPC UA uses NodeIds. If a datatype is omitted, several common interpretations can be returned for comparison.

Setup and configuration

Install the package with uvx plctap or use pipx install plctap. MCP clients can start it as a stdio server. The README provides configurations for Claude Desktop and Codex; a checked-out repository can instead be launched with uv --directory <path> run plctap.

No environment variable is required for read-only operation. PLCTAP_DEFAULT_TIMEOUT_MS controls network timeout behavior, while PLCTAP_POOL_MAX_PER_TARGET and PLCTAP_IDLE_TIMEOUT_SEC tune connection reuse. PLCTAP_AUDIT_LOG selects the JSONL audit-log path. Set PLCTAP_ALLOW_WRITE=true only when write tools should be registered.

Tools and capabilities

  • detect_device and probe_device identify protocols and classify connection failures.
  • plc_read reads from all eight protocol endpoints; plc_browse expands one level of an OPC UA address space.
  • parse_frame, validate_frame, parse_pcap, and diagnose support frame and log analysis.
  • start_listener, stop_listener, and get_listener_frames support recording, normal responses, and configured error injection.
  • start_proxy, stop_proxy, and get_proxy_frames record bidirectional traffic for Modbus, FINS, and MELSEC.
  • With the write gate enabled, plc_write and send_frame provide controlled write or frame-sending operations. Modbus, S7, FINS, MELSEC, and EtherNet/IP have write semantics; IEC 104 and OPC UA are read-only.

Limitations and notes

The plctap MCP server is intended for reachable industrial devices and does not remove the need for correct addresses, ports, units, slots, device areas, tags, or NodeIds. OPC UA supports SecurityPolicy None in the documented diagnostic scenario and does not support frame-level parsing or validation. parse_pcap requires the evaluation dependency extra. Listener and proxy operations change server state, and write or send operations are destructive actions that require explicit enabling.

Every write or send action is recorded frame by frame in a JSONL audit log, including failed attempts. The documented default timeout is 2,000 milliseconds, which may need adjustment for slower gateways or remote links.

Reviews

No reviews yet — be the first to share how it worked for you.

Frequently Asked Questions about Plctap

plctap is an MCP server that connects AI agents to PLCs using Modbus, FINS, MELSEC, Siemens S7, IEC 104, EtherNet/IP, and OPC UA. Its main tools detect and probe devices, read PLC data, parse and validate frames, diagnose logs, capture traffic through listeners or proxies, and optionally perform gated writes.

Install it with `uvx plctap` or `pipx install plctap`. Configure an MCP client to launch the `plctap` command as a stdio server; the README includes examples for Claude Desktop and Codex.

Set `PLCTAP_ALLOW_WRITE=true` before starting the server. Write and frame-sending tools are not registered by default, and every write or send attempt is recorded in the configured JSONL audit log.

Yes, the README identifies Cursor as a supported client. It describes plctap as an MCP server for Cursor and provides the standard stdio launch command through the package installation.

Related MCP servers

Add a badge to your READMEShow it’s listed — live SVG, Markdown or HTML.

AllMCPs Directory Badge

Full Badge Customizer

Showcase your server listing on GitHub or your project documentation. Embed this dynamic SVG badge to highlight official listing status and live engagement.

Badge Style:
Live Dynamic SVG PreviewPlctap AllMCPs Directory Badge
Markdown (GitHub README)
[![AllMCPs](https://allmcps.com/api/badge/plctap?style=directory)](https://allmcps.com/mcp/plctap)
HTML Embed
<a href="https://allmcps.com/mcp/plctap"><img src="https://allmcps.com/api/badge/plctap?style=directory" alt="Plctap on AllMCPs" /></a>