Proxus Industrial MCP Server について
Proxus Industrial MCP Server は、Modbus TCP と OPC UA 経由で PLC や産業機器への読み取り専用アクセスを AI アシスタントに提供します。レジスタのデコードや機器マップ、接続診断を備え、機器への書き込みには対応しません。
主な機能
- 01Modbus レジスタとビットの読み取り
- 02OPC UA ノードの参照と読み取り
- 03値の経時監視
- 04機器マップによるレジスタのデコード
- 05接続とセキュリティの診断
- 06機器上でのマップ検証
活用シーン
- 01産業機器の測定値の確認
- 02レジスタや変数の変化の追跡
- 03機器接続のトラブルシューティング
- 04機器レジスタマップの検証
MCP 対応
設定済み機器の検出、読み取り、監視、マップ参照、診断を MCP クライアント向けのツールとして公開します。機器へのアクセスはすべて読み取り専用です。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
docker run -i --rm ghcr.io/proxusiiotplatform/proxus-mcp:0.1.0-beta.7ローカルサーバーにはマシン上の実行環境(Node.js 18 以上など)が必要です。設定ファイルの場所はクライアントごとに異なります。
ghcr.io/proxusiiotplatform/proxus-mcp:0.1.0-beta.7stdioツール
ローカルサーバーのツールはマシン上で起動して初めて取得できます。メンテナーはまだツール一覧を提供していません。
詳細
Proxus Industrial MCP Server
Claude Desktop、Cursor、VS Code などの AI アシスタントに、産業用デバイスへの読み取り専用アクセスを提供します。Modbus TCP および OPC UA(Sign または SignAndEncrypt を使用する Basic256Sha256、Aes128_Sha256_RsaOaep、Aes256_Sha256_RsaPss、またはセキュリティなし、匿名ログインまたはユーザー名によるログイン)に対応しています。
シミュレートされたデバイスを使った実際のセッションを要約したものです(docs/demo.json)。詳細は proxus.io/tools/industrial-mcp-server をご覧ください。
ツール
| ツール | 内容 |
|---|---|
list_devices | 設定済みのデバイス、エンドポイント、ISA-95 パス、接続状態 |
read_address | 生のレジスターまたはビット:hr:0、ir:10、coil:5、di:0、または 40001 |
watch_address | Modbus アドレスを 1~60 秒間ポーリングし、値の変化を要約します。任意のバイト順で uint16、int16、uint32、int32、float32 としてデコードできます |
decode_registers | 最大 16 個のレジスターを、一般的な方法で読み取ります:int16/32、uint、ABCD/CDAB/BADC/DCBA のバイト順による float32、両方のワード順による float64 |
browse | OPC UA ノードの子ノード(デフォルト:Objects フォルダー) |
read_nodes | データ型、品質、ステータスコード、ソースタイムスタンプを含む、最大 50 個の OPC UA 変数 |
watch_nodes | サブスクリプションを通じて、最大 20 個の OPC UA 変数を 1~60 秒間監視します:すべての変化、および最初、最後、最小、最大、平均 |
diagnose_connection | デバイスに接続できない原因を、名前、TCP、プロトコルハンドシェイク、セキュリティと証明書、ログイン、テスト読み取り、識別情報、クロックの順に調べ、次に試すことを提示します |
find_device_map | ベンダー、モデル、または別名でレジスタマップライブラリを検索します。例:PM5560 |
get_device_map | マップのレジスター(キー、アドレス、型、バイト順、単位、スケール)。検索語で絞り込めます |
read_named | デバイスのマップからキーを使ってレジスターを読み取り、単位付きの工学値を返します |
verify_device_map | デバイスのマップを実機と照合し、ハードウェア検証レポートを作成します(読み取り専用) |
デバイスへの書き込みはできません。
レジスタマップ
レジスタマップを使うと、hr:0-1 がワード順を入れ替えた float だと推測する代わりに、アシスタントは voltage_l1_n を読み取れます。
マップには、デバイスモデルのすべてのレジスターについて、アドレス、データ型、バイト順、スケール(固定値、または SunSpec のスケール係数レジスター)、単位、列挙値の意味と、出典となるベンダー文書が記載されています。バイナリーには、オープンな Modbus Register Maps コレクション(電力量計、電力分析計、ドライブ、インバーター)が含まれています。各リリースには register-maps.json.gz としても添付されています。
Modbus デバイスの設定で、ID またはマップの JSON ファイルのパスを指定して、そのマップを設定します。
"meter-1": { "protocol": "modbus-tcp", "host": "192.168.10.40", "map": "schneider-electric/pm5500-pm5600-pm5700" }
maps_dir では、コレクション内の python3 tools/maps.py build が出力する形式の JSON ファイルが格納されたフォルダーからマップを追加できます(同じ ID の組み込みマップは置き換えられます)。存在しないマップが指定された場合は、その理由を示してサーバーの起動を停止します。マップはアシスタントにレジスターの読み取り方法を伝えるものであり、書き込み方法を伝えるものではありません。read_named は読み取りのみを行います。
実機でマップを検証する
ほとんどのマップはベンダー文書から転記されています。アシスタントにデバイスのマップを検証するよう依頼してください。verify_device_map はすべてのレジスターを 1 回ずつ読み取り(読み取り専用)、値が妥当か(浮動小数点数、周波数、電圧、力率、積算電力量、モデル)を確認し、デバイスの表示と 2 つの値を比較するよう促します。結果はレポートと、マップコレクションに事前入力済みのイシューを作成するリンクです。イシューはご自身の GitHub アカウントから送信し、ボットが検証済みリストに追加します。お客様の操作なしに情報が送信されることはなく、レポートに含まれるのは確認結果のみで、アドレス、ホスト名、シリアル番号は含まれません。
OPC UA のセキュリティ
デバイスごとに security_mode(sign_and_encrypt、sign、または none)と security_policy(Basic256Sha256、
Aes128_Sha256_RsaOaep、または Aes256_Sha256_RsaPss)を設定します。証明書は pki_dir(デフォルトは設定ファイルと同じ場所にある pki/)に、ほとんどの OPC UA ツールで使われる次の構成で保存されます。
| フォルダー | 内容 |
|---|---|
own/ | このサーバーのアプリケーション証明書。初回使用時に作成されます(秘密鍵は自分だけが読み取り可能です) |
trusted/ | 承認したサーバー証明書 |
rejected/ | 受信したものの、承認していないサーバー証明書 |
どちらの方向でも、信頼が自動的に設定されることはありません。
- 初回接続時にサーバーの証明書が
rejected/に保存され、ツールは SHA-256 サムプリントを返します。サーバー管理者にサムプリントを確認してから、ファイルをtrusted/に移動します。 - サーバーが
BadCertificateUntrustedまたはBadSecurityChecksFailedを返す場合、サーバーはまだこのクライアントを信頼していません。proxus-mcp certificate --config <file>を実行すると、サーバー側で信頼するための、このサーバーの証明書ファイルとサムプリントが表示されます。
パスワードを設定ファイルに記載することはありません。password_env には、パスワードを格納する環境変数名を指定します。エラーには OPC UA StatusCode 名、仕様書の説明、および推奨される次の手順が含まれます。
インストール
お使いのプラットフォーム用のアーカイブを リリース ページからダウンロードして展開し、MCP クライアントから proxus-mcp バイナリを指定します(下記の Claude Desktop を参照)。各アーカイブの隣には .sha256 ファイルがあります。バイナリにはまだコード署名がありません。macOS では展開後に一度 xattr -d com.apple.quarantine proxus-mcp を実行し、Windows では初回起動時に「詳細情報」を選択して「実行」を選びます。
proxus-mcp --version を実行すると、バージョンが表示されます。
Docker
docker run -i --rm -v "$PWD:/config" ghcr.io/proxus-io/proxus-mcp:<version>
このイメージは /config/proxus-mcp.json を読み込み、標準入力/標準出力で MCP 通信を行います。そのため、MCP クライアントではコマンドに docker を指定し、引数に run -i --rm -v <folder>:/config ghcr.io/proxus-io/proxus-mcp:<version> を指定して起動します。ホスト上のデバイスには host.docker.internal からアクセスできます。Linux では、プラントネットワークに直接接続するために --network host を追加します。イメージは linux/amd64 と linux/arm64 向けに公開されています。
ビルド
.NET 10 SDK が必要です。プロトコルドライバーは Proxus.Drivers NuGet パッケージ(Apache-2.0)から取得します。
dotnet publish src/Proxus.Mcp.Server -c Release -r osx-arm64 -o artifacts/osx-arm64
生成されるのは、1 つのネイティブファイル artifacts/osx-arm64/proxus-mcp(約 10 MB)です。
Claude Desktop
claude_desktop_config.json に追加します。
{
"mcpServers": {
"proxus": {
"command": "/absolute/path/to/proxus-mcp",
"args": ["--config", "/absolute/path/to/proxus-mcp.json"]
}
}
}
proxus-mcp.example.json をコピーして、設定のひな形として使用します。
テスト
dotnet test tests/Proxus.Mcp.Tests:ユニットテスト。デバイスは不要です。tests/smoke/run_all.sh:公開済みバイナリを Modbus および OPC UA シミュレーターでテストします(tests/smoke/README.mdを参照)。- CI(
.github/workflows/ci.yml)では両方のテストを実行し、linux-x64、linux-arm64、win-x64、osx-arm64 向けの Native AOT バイナリを公開します。
ライセンス
Apache-2.0。LICENSE を参照してください。
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。