PCM MCP
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| PCM600_BIN | No | PCM600 bin dir containing PCM600Cmd.exe. Auto-detected if not set. | auto-detected |
| PCM_MCP_AUDIT_LOG | No | JSONL audit path. | $WORKSPACE/.pcm-mcp-audit.jsonl |
| PCM_MCP_WORKSPACE | Yes | Allowlisted root for all file access. Required. No safe default; the server refuses to start without it. | |
| PCM_MCP_CLI_TIMEOUT | No | Seconds per PCM600Cmd call. | 600 |
| PCM_MCP_ALLOW_WRITES | No | 1 enables mutating tools (none exist yet — Phase 4). | 0 |
Capabilities
Features and capabilities supported by this server
| Capability | Details |
|---|---|
| tools | {
"listChanged": false
} |
| prompts | {
"listChanged": false
} |
| resources | {
"subscribe": false,
"listChanged": false
} |
| experimental | {} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| scl_summaryA | Summarise an SCL file: header, substation topology, and IED inventory counts. Start here when handed an unfamiliar .scd/.icd/.cid file. |
| scl_list_iedsA | List every IED in an SCL file with manufacturer, type, config version and address. |
| scl_get_iedB | Detail one IED: logical devices, logical nodes, datasets and control blocks. |
| scl_list_datasetsC | List datasets and their FCDA members. Optionally restrict to one IED. |
| scl_list_gooseA | List GOOSE publishers (GSEControl blocks) with their dataset and network addressing. Cross-references the IED section against the Communication section, and flags any publisher that has no GSE address assigned — a common cause of GOOSE that silently never transmits. |
| scl_list_reportsC | List report control blocks with buffering, trigger options and timing. |
| scl_list_addressesB | List IP addressing per IED access point, grouped by subnetwork. Flags duplicate IP addresses and duplicate GOOSE APPID/MAC values, both of which break communication in ways that are painful to diagnose on site. |
| scl_check_goose_bindingsA | Trace GOOSE publishers to subscribers and flag every way the binding can be broken. Reports: publishers nobody subscribes to, publishers with no network address, subscriptions naming an IED or control block that does not exist, and — the subtle one — subscriptions to a signal the publisher's dataset does not actually carry. Needs a file containing all the IEDs involved (an .scd), since bindings are cross-IED. A single-IED .cid cannot show them. |
| scl_validateA | Validate an SCL file's internal consistency, and optionally against an XSD schema. The default check is referential integrity, which is what actually breaks commissioning: control blocks pointing at missing datasets, dataset members pointing at missing logical nodes, Communication entries for IEDs that are not in the file, duplicate IPs / GOOSE APPIDs / MACs, duplicate names, empty datasets, report blocks with no trigger.
|
| scl_diffA | Structurally compare two SCL files — the as-built vs. design review. 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. This reports added / removed / changed per IED, logical device, dataset (including membership), GOOSE publisher, report control block, subscription, IP and GSE addressing, and substation bay. |
| apcmp_summaryA | Inspect a PCM600 Reports the project name to pass to PCM600Cmd Run this BEFORE importing any The engineering data itself (SCL, parameters) lives in SQL Server databases inside the archive and cannot be read without a PCM600 import — this tool reads only the metadata sidecars. |
| apcmp_logicA | Read a project's ACT application logic out of a PCM600 stores the ACT logic sheets as XML inside the project database, and that XML survives as readable text — so the application logic can be reviewed even when the connectivity package needed for an import is missing. Returns worksheet names, ACT signals, function-block instance names, and the IEC 61850 function instances referenced. Also flags naming problems and structural asymmetry: the same negated concept written two
different ways, names containing Limits, which matter: block-to-block wiring and all setting values are not recoverable this way. Absence of something in this output is not proof it is absent from the project. Use it for review, not as a substitute for opening the project. |
| pcm_cli_infoA | Report the detected PCM600 installation and prove the CLI is reachable. Runs |
| pcm_export_scdA | Export a project's SCD file from the PCM600 database. Read-only; no relay contact.
Refuses to overwrite an existing file unless |
| pcm_export_parametersA | Export one IED's parameters to
|
| pcm_export_bulk_parametersA | Export Needs no technical key, which makes it the easiest way to discover what IEDs a project holds and what their keys are. Read-only; no relay contact. |
| pcm_export_iedA | Export a single IED as an |
| pcm_export_projectA | Export a whole project as an Useful as a snapshot before any change — but note PCM600 has no CLI command to restore an
|
| pcm_validate_parametersA | Check a parameter file against an IED in the project and list deviations. Validates only — imports nothing, changes nothing. This is the pre-flight you run before any parameter import, and the deviations it lists are what that import would change. |
| pcm_import_scdA | Import an SCD file into a PCM600 project. MODIFIES THE PROJECT. Requires PCM_MCP_ALLOW_WRITES=1 and confirm=true. Before importing it snapshots the project, and it counts the IEDs in the source SCD; afterwards it re-exports the SCD and counts again, so a silent IED loss is reported rather than passing as success. That verification matters: PCM600's import defaults to ignoring IEDs whose object type it does
not recognise, without reporting an error. If a connectivity package is missing, IEDs
vanish quietly. Run
|
| pcm_import_parametersA | Import a parameter file into one IED of a project. MODIFIES PROTECTION SETTINGS. Requires PCM_MCP_ALLOW_WRITES=1 and confirm=true. Snapshots the project first, and runs
These are protection relay settings. A wrong value can mean failure to trip on a fault or a spurious trip. Read the validation output and agree it with the user before confirming. The signature-bypass option ( |
| pcm_import_bulk_parametersA | Import Requires PCM_MCP_ALLOW_WRITES=1 and confirm=true. Snapshots first. Note this has a wider blast
radius than the single-IED import and there is no per-file pre-flight validation available
for the bulk form — prefer |
| pcm_import_iedA | Import an IED file ( Requires PCM_MCP_ALLOW_WRITES=1 and confirm=true. |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
| review_scd | Guided review of an SCD file: consistency, GOOSE bindings, addressing, naming. |
| commissioning_diff | Compare a design baseline against an as-built export and report what changed. |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
| config_resource | Resolved server configuration and which tool tiers are currently available. |
| cli_help_resource | Verbatim `PCM600Cmd -h` output captured from the installed CLI, for self-orientation. |
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