Atlas / MCP servers / purinzan / gx3-cli-mcp

gx3-cli-mcpSAFE

mcp/purinzan/gx3-cli-mcp

Trace a GX Works3 ladder without opening GX Works3 — read-only CLI + MCP server so anyone (or an AI agent) can find why a coil never turns on.

Verdict
SAFE
Grade
B
Trust score
85 /100
Exposed tools
—
Transport
stdio
License
NOASSERTION
Stars
7
01

Overview

From the repository's own README, as read at the audited commit. Badges and raw HTML are left out.

日本語 · English · 简体中文 · 한국어

[](https://pypi.org/project/gx3-cli-mcp/) [](https://pypi.org/project/gx3-cli-mcp/) [](https://github.com/purinzan/gx3-cli-mcp/actions/workflows/ci.yml) [](LICENSE.txt) [](https://glama.ai/mcp/servers/purinzan/gx3-cli-mcp)

Work out why a coil never turns on, without opening GX Works3.

Reads a GX Works3 .gx3 project on your own machine and answers questions about it — where a device is written, what has to be true for a coil to turn on, which conditions come from outside the PLC, which branches can never be true. Read-only: it never writes back to the project.

It is a CLI, and the same analysis is a stdio MCP server, so an AI agent can answer from indexed facts instead of guessing at a binary file.

日本語: 三菱電機 MELSEC の .gx3 を GX Works3 を開かずに解析する CLI / MCP サーバーです。「このコイルがなぜ ON にならないか」をラダーから追います。 読み取り専用で、元のプロジェクトは書き換えません。

中文: 不用打开 GX Works3,也能分析三菱电机 MELSEC 的 .gx3 工程, 从梯形图追查「这个线圈为什么不导通」。只读,不改写原工程。 完整中文说明见 README.zh-CN.md。

Install

pip install gx3-cli-mcp

Python 3.10+. Installs two console scripts: gx3-cli and gx3-mcp-server.

Try it in 30 seconds

No project needed — generate one:

gx3-cli synthetic-project demo.gx3 --profile demo-line
gx3-cli guide --root demo.gx3

guide reads the project and tells you which commands are worth running on it, and why. That is the answer to "there are sixty commands, where do I start".

On a project

gx3-cli doctor --root project.gx3        # does it
Read from source at commit 6f638bf765caOBSERVED · 2026-10-11
02

Connect

Built from this server's own package name, version and transport as found in its source — not copied from anyone's documentation, so it cannot drift against a page we do not control.

claude-code (pypi)
claude mcp add gx3-cli-mcp -- None gx3-cli-mcp==0.2.0
03

Trust audit

SAFEgrade B · trust 85/100 Nothing in the source contradicts what it says it does. Grade A is reserved for packages that have also passed the behavioural sandbox.

LayerWhat it checksResult
L0Provenance & inventoryPASS
L1Static analysis of the codeWARN
L2Instruction surface (what it tells the agent)PASS
L3Class-specific surfacePASS
L4Behavioural (sandbox)SKIPPED

What the source does

Filesystem
declared (5 observation(s))
Network
declared (7 observation(s))
Shell
declared (1 observation(s))
Dependencies
pinned
Secrets in source
none-found

Findings (11)

MEDIUMCode injection · code.dynamic_import · CWE-78, CWE-94, CWE-95
gx3cli/gx3_cli.py:187
module = importlib.import_module(f"{PACKAGE}.{module_name}")
LOWInsecure crypto · crypto.weak_hash · CWE-327, CWE-338
gx3cli/gx3_convertdata_probe.py:46
return hashlib.sha1(data).hexdigest()
LOWInsecure crypto · crypto.weak_hash · CWE-327, CWE-338
gx3cli/gx3_dependency_flow.py:442
digest = hashlib.sha1(key.encode("utf-8")).hexdigest()[:12]
LOWInsecure crypto · crypto.weak_hash · CWE-327, CWE-338
gx3cli/gx3_matiec_export.py:127
digest = hashlib.sha1(key.encode("utf-8")).hexdigest()[:10].upper()
LOWObfuscation / stealth · obf.decode_call · CWE-506, CWE-94
gx3cli/gx3_live_read.py:241
frame = bytes.fromhex(str(plan["request_hex"]))
LOWObfuscation / stealth · obf.decode_call · CWE-506, CWE-94
gx3cli/gx3_program_map.py:40
QPG_NAME_MARKER = bytes.fromhex("489a0c79c2511f38275a466efabc2398")
LOWObfuscation / stealth · obf.decode_call · CWE-506, CWE-94
tests/test_gx3_native_csv.py:37
code=bytes.fromhex('0700010000ff07 05a0010105 0700010200ff07 05a0010205 0700010000ff07 05a0010305 0700010200ff07 05a0010405 0701010100ff07 0702010000ff07 05a0111005')
LOWObfuscation / stealth · obf.decode_call · CWE-506, CWE-94
tests/test_gx3_native_csv.py:38
note=bytes.fromhex('07c103024e0007') # N, a separately sized note record
LOWObfuscation / stealth · obf.decode_call · CWE-506, CWE-94
tests/test_gx3_native_csv.py:43
(5,'V1:0:end{type=end:dim=1x1}',1,bytes.fromhex('0702021500ff07'),[2]),
LOWObfuscation / stealth · obf.zero_width · CWE-506, CWE-94
tests/test_gx3_lint.py:1
from __future__ import annotations
LOWInventory / provenance · mcp.no_tools_extracted · CWE-1104
server.json
Why it matters. the tool list is enumerated at runtime by tools/list, not declared in source
Fix. the page says so rather than showing an empty table

Gates applied: no_behavioural_pass.

Audited 2026-10-11 · audit v0.4.1 · source sha 6f638bf765cafull audit observations/trust-audit/mcp-server/purinzan__gx3-cli-mcp.json · Report an issue / request a re-scan
04

Audit history

Every audit this server has had. A grade with a past is a grade somebody is still checking.

DateSourceVerdictGradeScoreChange
2026-10-116f638bf765caSAFEB85first audit
05

Questions

What is the gx3-cli-mcp MCP server?

Trace a GX Works3 ladder without opening GX Works3 — read-only CLI + MCP server so anyone (or an AI agent) can find why a coil never turns on.

Is gx3-cli-mcp safe to connect to an agent?

The audit found nothing in the source that contradicts what it says it does, and graded it B (85/100). Grade A is held back for packages that have also passed a sandboxed behavioural run, which is why a clean server reads B.

What credentials does gx3-cli-mcp need?

No credential environment variables were found in its source, so it appears to need none.

How does gx3-cli-mcp run?

It speaks stdio, so it runs as a local process your client starts. It is published on PyPI as gx3-cli-mcp.

How current is this page?

The grade is for one exact copy of the source (6f638bf765ca), read on 2026-10-11. The repository is watched and re-audited when it changes.

Advertisement