PCM MCP
{
"answer": "The PCM MCP server provides 24 tools for working with ABB/Hitachi Energy PCM600 IEC 61850 protection and control IED configurations โ both offline (from exported files) and live (via the PCM600 CLI).\n\n**๐ Offline SCL File Analysis** (no PCM600 required):\n- scl_summary โ High-level overview of SCL files (.scd/.icd/.cid/.ssd): header, substation topology, IED counts\n- scl_list_ieds โ List all IEDs with manufacturer, type, config version, and IP addressing\n- scl_get_ied โ Deep-dive into one IED: logical devices, logical nodes, datasets, control blocks\n- scl_list_datasets โ List datasets and their FCDA members (optionally filtered to one IED)\n- scl_list_goose โ List GOOSE publishers with network addressing, flagging those missing GSE addresses\n- scl_list_reports โ List report control blocks with buffering, trigger options, and timing\n- scl_list_addresses โ List IP addressing per access point, grouped by subnetwork; flags duplicate IPs, APPIDs, and MACs\n- scl_check_goose_bindings โ Trace GOOSE publishers โ subscribers, catching unsubscribed publishers, unknown IEDs/control blocks, and subscriptions to signals not in the dataset\n- scl_validate โ Referential integrity checks (dangling dataset refs, missing LNs, Communication/IED mismatches, duplicates); optional XSD schema validation\n- scl_diff โ Model-level structural diff of two SCL files across 11 categories (IEDs, datasets, GOOSE, reports, addressing, substation bays) โ immune to PCM600 text reordering\n\n**๐ฆ PCM600 Project Archive Analysis** (.apcmp):\n- apcmp_summary โ Inspect archives without import: project name, IED inventory, connectivity package status (import pre-flight to prevent silent IED loss)\n- apcmp_logic โ Recover ACT application logic: worksheets, signals, function blocks, with asymmetry checks for device-group inconsistencies, missing source pairs, transfer-direction gaps, and letter-transposition typos\n\n**โ๏ธ PCM600 CLI โ Read-Only Exports** (requires PCM600 installed):\n- pcm_cli_info โ Report PCM600 installation, SQL version, prove CLI reachability, list installed connectivity packages\n- pcm_export_scd โ Export a project's SCD file\n- pcm_export_parameters โ Export one IED's parameters to .csv or .xrio\n- pcm_export_bulk_parameters โ Export .xrio parameter files for all IEDs in a project\n- pcm_export_ied โ Export a single IED as .apcmi\n- pcm_export_project โ Export entire project as .apcmp archive (useful as pre-change snapshot)\n- pcm_validate_parameters โ Validate a parameter file against an IED and list deviations without applying changes\n\n**โ๏ธ PCM600 CLI โ Mutating Operations** (double-gated: requires PCM_MCP_ALLOW_WRITES=1 env var and confirm=true):\n- pcm_import_scd โ Import SCD with IED-loss verification; snapshots project first\n- pcm_import_parameters โ Import protection settings for one IED with pre-flight validation; snapshots first\n- pcm_import_bulk_parameters โ Bulk-import .xrio files for many IEDs at once; snapshots first\n- pcm_import_ied โ Import IED files (.apcmi/.apcmt) into a bay, voltage level, or substation; snapshots first\n\n**๐ก๏ธ Safety Features**: Path confinement via PCM_MCP_WORKSPACE; hard denylist on live-relay commands and --allow-unsigned-file; never silently overwrites (requires overwrite=true); success determined by log parsing + artifact verification (not just exit code); all operations logged to JSONL audit log."
}
Provides tools for interacting with ABB / Hitachi Energy PCM600, the Protection and Control IED Manager. Includes offline analysis of IEC 61850 SCL files and .apcmp project archives (SCD summaries, IED listing, GOOSE/report control block inspection, validation, diffing, and ACT logic recovery), plus read-only CLI-driven tools for exporting SCDs, parameters, IEDs, and projects when PCM600 is installed.
Click on "Install 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., "@PCM MCPInspect my .apcmp archive and check the IED inventory before import"
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.
PCM MCP
An MCP server for ABB / Hitachi Energy PCM600 (Protection and Control IED Manager).
No such server exists publicly โ this is a from-scratch build. Status: Phases 1-4 complete, 24 tools working end-to-end over stdio against PCM600 2.14.
Tier 0 โ offline analysis (no PCM600 install needed)
Reads and reasons about IEC 61850 SCL files (.scd, .icd, .iid, .cid, .ssd) already
exported from PCM600, and .apcmp project archives.
Tool | Purpose |
| Header, substation/voltage-level/bay tree, inventory counts |
| Every IED with manufacturer, type, config version, IP addressing |
| One IED in detail: logical devices, logical nodes, datasets, control blocks |
| Datasets and their FCDA members |
| GOOSE publishers + addressing; flags publishers with no GSE address |
| Report control blocks: buffering, trigger options, timing |
| IP addressing per access point; flags duplicate IPs / APPIDs / MACs |
| Traces publishers โ subscribers; catches unsubscribed publishers, unknown IEDs/control blocks, and subscriptions to signals the dataset doesn't carry |
| Referential integrity โ dangling dataset refs, FCDAs pointing at missing logical nodes, Communication/IED mismatches, duplicates. Optional |
| Structural, model-level diff of two SCL files across 11 categories |
| Inspect a |
| Recover ACT application logic from a |
| Characterise any PCM600 archive without assuming its layout โ for file kinds not yet verified against a real sample ( |
scl_diff compares the parsed model, not the text. PCM600 reorders elements and rewrites
attributes on every export, so a text diff of two SCDs is unusable โ a one-setting change can look
like a thousand-line rewrite.
scl_validate's XSD support is opt-in: the IEC 61850-6 schema is a licensed IEC deliverable and
isn't bundled here (nor shipped with PCM600), so pass your own copy via xsd_path if you want it.
The rule-based checks are the primary value โ XSD only catches syntax.
apcmp_logic reads the ACT logic sheets, which PCM600 stores as XML inside the project database
and which survive as recoverable text. That means application logic can be reviewed even when the
connectivity package needed for an import is missing.
Its asymmetry checks are the useful part, because they find the defects that are invisible when reading sheet by sheet โ each sheet looks self-consistent:
Device groups โ a concept present for some members and not others (on a real 3-breaker scheme: B3 lacked the fail-to-open/close and breaker-failure supervision B1 and B2 both had).
Source pairs โ an
A-side signal with noB-side counterpart, and vice versa. In a two-source transfer scheme this is where inconsistent failure handling hides.Transfer direction โ concepts tagged for one direction only. Where one direction carries an explicit
_BA/_ABsuffix and the other reuses untagged names, the second direction was typically added as a parallel copy rather than the original logic being generalised.Letter-transposition typos โ
SRCA_AVAILvsSCRB_AVAIL, whereSRCsilently becameSCR. Deliberately narrow: it will not flagFTC/FTO(different concepts) orBA1/BA4(legitimate numbering), because a noisy detector is worse than none in a safety review. Limits are reported in every result โ block-to-block wiring and setting values are not recoverable, so absence in the output is not proof of absence in the project.
apcmp_summary is the import pre-flight. PCM600's import silently ignores IEDs whose object type
it does not recognise, so importing a project whose connectivity package is missing can discard
IEDs with no error. Run it first. Note the archive's project name (what -p takes) is not
the database name โ the tool reports both.
Resource pcm600://config reports resolved config and which tiers are available.
Tier 1 โ drives the PCM600 CLI (needs PCM600 installed)
All read-only with respect to the PCM600 project database.
Tool | Purpose |
| Detected install, SQL version, connectivity packages, and a live reachability check |
| Export a project's SCD |
| One IED's parameters to |
| Every IED's |
| One IED as |
| Whole project as |
| List deviations a parameter import would make. Validates only |
Tier 1 degrades cleanly: if PCM600 isn't detected, these report why and the offline tools keep working.
It will never talk to a physical relay. PCM600Cmd does expose eight commands that open a
connection to a live IED โ write-ied, read-ied, and their -under-bay /
-under-voltage-level / -under-substation variants. All eight are on a hard denylist in
cli.py: the wrapper refuses to build the argv, and no setting enables them. --allow-unsigned-file
is refused too. See DESIGN.md ยง6.
Success is never inferred from the exit code. PCM600Cmd returns 0 even on failure. Outcome
comes from parsing its log output and verifying the output artifact exists and is non-empty.
Existing export files are never silently overwritten โ pass overwrite=true deliberately.
Tier 1 โ mutating (off by default)
Tool | Purpose |
| Import an SCD. Counts IEDs before, re-exports after, and reports any that vanished |
| Import one IED's settings. Runs |
| Bulk |
| Import an |
All four require PCM_MCP_ALLOW_WRITES=1 and confirm=true โ two independent gates โ and
snapshot the project before touching it.
The snapshot is not rollback. PCM600 has no CLI command to restore a project; an
.apcmpcan only be re-imported by hand in the GUI. Every mutating tool says so in its own output.
The IED-loss verification on pcm_import_scd exists because PCM600's import silently ignores
IEDs whose object type it does not recognise. A missing connectivity package makes IEDs disappear
with no error, so the tool round-trips the SCD back out and compares rather than trusting silence.
Related MCP server: Semantic Model MCP Server
Setup
Requires Python โฅ3.12 (built and tested on 3.14).
cd C:\theWork\pcm-mcp
python -m venv .venv
.\.venv\Scripts\python.exe -m pip install -e ".[dev]"PCM_MCP_WORKSPACE is required โ it is the allowlist root for every path argument, so there
is no safe default and the server refuses to start without it.
Var | Meaning | Default |
| Allowlisted root for all file access | required |
| PCM600 | auto-detected |
|
|
|
| Seconds per |
|
| JSONL audit path |
|
Register with Claude Code
{
"mcpServers": {
"pcm600": {
"command": "C:\\theWork\\pcm-mcp\\.venv\\Scripts\\python.exe",
"args": ["-m", "pcm600_mcp.server"],
"env": { "PCM_MCP_WORKSPACE": "C:\\theWork\\pcm-mcp" }
}
}
}Tests
.\.venv\Scripts\python.exe -m pytest -q # 203 passed, 13 skipped
.\.venv\Scripts\python.exe scripts\smoke_stdio.py # live stdio handshakeMost skips are the integration suite (below) plus the symlink-escape test, which needs Windows
Developer Mode. The smoke script drives the real transport: initialize โ tools/list โ
tools/call โ path-confinement refusal.
Integration tests against a real PCM600
tests/test_integration_cli.py drives the installed PCM600Cmd.exe for real. It skips cleanly
when prerequisites are absent, so it is safe to run anywhere.
Three tests need only PCM600 installed and run automatically โ CLI reachability, the IED-communication denylist against the real binary, and the regression guard for exit-code-0-on-failure. The rest need a project:
$env:PCM_MCP_TEST_PROJECT = "SCRATCH_MCP_TEST" # a SCRATCH project, never production
$env:PCM_MCP_TEST_TECHNICAL_KEY = "AA1J1Q01A1" # optional; unlocks per-IED tests
.\.venv\Scripts\python.exe -m pytest tests/test_integration_cli.py -v -rsMutating tests additionally require PCM_MCP_ALLOW_WRITES=1. Point these at a scratch project
only โ a bad import can only be undone by a manual GUI import of the snapshot.
test_export_ied_then_probe_the_format is the one to run first once a project exists: it produces
a real .apcmi and prints its structure, which settles whether the .apcmp readers can be reused
for IED exports and templates.
Layout
src/pcm600_mcp/
server.py MCP wiring, the twenty-four tools
cli.py PCM600Cmd wrapper: denylist, log parsing, artifact verification
config.py env resolution, PCM600 + connectivity-pack detection, tier availability
safety.py path confinement, write gating, audit log
apcmp.py .apcmp project-archive reader (ZIP + metadata sidecars)
act.py ACT logic recovery from the project database inside a .apcmp
scl/model.py dataclass model of an SCL document
scl/parse.py namespace-agnostic lxml reader
scl/checks.py binding tracing + referential-integrity rules
scl/diff.py structural diff
tests/
fixtures/synthetic.scd clean-ish 2-IED substation
fixtures/synthetic_modified.scd one change per diff category
fixtures/problems.scd duplicate IPs/APPIDs/MACs, orphan address
fixtures/bindings.scd all four GOOSE binding failure modes
fixtures/invalid.scd eleven referential-integrity failures
test_integration_cli.py live PCM600 round-trips; skips without a project
scripts/smoke_stdio.py end-to-end transport check
docs/ DESIGN.md, PLAN.md, DISCOVERY.md, cli-help.txtDocuments
File | What |
Design, tool surface, safety model, ~30 cited references | |
Phased plan and status | |
Phase 0 results: real CLI contract, | |
Verbatim |
Current state
Phase 0 Discovery ............ MOSTLY DONE - CLI captured; scratch project needs GUI
Phase 1 Scaffold + SCL core .. DONE
Phase 2 Analysis / diff ...... SCL half DONE; parameter CSV/XRIO readers deferred (no sample)
Phase 3 CLI wrapper .......... DONE - cli_info verified live; 6 tools await a project to test
Phase 4 Mutating tools ....... DONE - 4 import tools, two gates, snapshot + verify
Phase 5 Packaging ............ partial (pyproject + .mcp.json snippet done)
Phase 6 Test & harden ........ partial (203 tests + stdio smoke + live integration suite)Next action
Two things are blocked on data, not code:
A project in the local PCM600 database. Six of the seven Tier 1 tools need one to be tested end-to-end (
pcm_cli_infois already verified live, sinceexport-system-infoneeds no project). There is nocreate-projectCLI command, so this needs the GUI.A parameter
.csv/.xriosample to build the deferredparams_*tools against. One read-only command supplies it and needs no technical key:export-bulk-parameters -p "<project>" -d "<dir>".
Also still untested: whether PCM600Cmd works with the PCM600 GUI open (DISCOVERY.md ยง0.7).
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Servers
- Alicense-qualityCmaintenanceSafety-conscious MCP server for read-only access to Emerson DeltaV Edge systems, enabling engineering investigation workflows and offline artifact generation.Last updated2GPL 3.0
- Alicense-qualityDmaintenanceMCP server for connecting to Microsoft Fabric and Power BI semantic models, enabling workspace browsing, dataset management, TMSL retrieval, DAX queries, model creation/editing, and includes a Best Practice Analyzer with 71 rules.Last updated2MIT
- AlicenseBqualityBmaintenanceMCP server for ABB RobotStudio and robot controllers, exposing 55 tools via SDK and RWS transports for simulation, programming, and monitoring.Last updated531MIT
- Alicense-qualityCmaintenanceA read-only MCP server for exploring on-premises, multi-instance Microsoft SQL Server estates from AI clients, with read-only enforcement and Windows authentication support.Last updatedApache 2.0
Related MCP Connectors
MCP server for Appcircle mobile CI/CD platform.
Autopilot MCP server for GEO analyses, reports, content, audits, memories and agents.
MCP server for Klever blockchain smart contract development.
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/controlLogix/PCM600-MCP'
If you have feedback or need assistance with the MCP directory API, please join our Discord server