
「AIのプロンプトからPLCのデバイスメモリを読み出してみたい?」そんな単純な思いつきと、「生成AIに関するセキュリティについて考察したい」という自身のスキルアップのために、PLCと通信するMCPサーバを作成してみました。
第2回でバイブコーディングしたMCPサーバは、PLCのワードデバイスとビットデバイスの読み書きしかできませんでした(4つのツールのみ)。今回(第3回)は、接続先PLC(IPアドレス)の変更と、PLCをメンテナンス(CPUを停止)するツールをバイブコーディングで追加してみます。
PLC:Programmable Logic Controller(工場の機械設備などを自動で動かすための制御コントローラ)
MCP:Model Context Protocol(AIと外部のデータソースやツールを安全かつ統一的に接続するための標準規格)
TCPコネクションを再確立するAPIとツールを追加
第2回で作成したMCPサーバ(plc-controller)は、「mcp.json」に設定したIPアドレス(192.168.200.2)のPLCに対して、起動時にTCPコネクションを確立しています。これを、IPアドレスとポート番号を指定して、コネクションを再確立できるようにプログラムをバイブコーディングで改修します。

それでは、Cursorプロンプトから『IPアドレスとポート番号を指定して、TCPコネクションを再接続できるようAPIを追加して。』と指示します。

そうすると、追加するAPIとツールなど改修内容の説明が出力され、プログラムの自動コーディングが終わりました。

追加したAPIとツールの「reconnect」をコードレビューで確認します。ブルーの四角線で囲った部分が該当箇所です。


MCPサーバへ追加した新しいツールを使うために、「plc-controller」を再起動します。そうすると、「reconnect」のツールが表示されました。

OTセキュリティ対策のご相談はこちら
PLCのCPUを停止するAPIとツールを追加
続いて、ちょっと危険そうなツールを追加してみます。PLCとの通信プロトコルであるSLMP(Seamless Message Protocol)には、PLCをメンテナンスするための通信仕様も備わっています。その一例として、PLCのCPUをストップできるように改修してみましょう。
Cursorプロンプトから『PLCのCPUをストップできるようAPIを追加して。』と指示します。

追加するツールなど改修内容の説明が出力され、プログラムの自動コーディングが終わりました。

追加したツールの「stop_cpu」のコードを確認すると、「安全上の重要警告」のコメント(ブルーの四角線で囲った部分が該当箇所)が入っています。こうしたコメントの内容は、AIエージェントがプロンプトから指示を受けた際に用いられるはずです(ガードレールや意図しない誤操作の防止)。

MCPサーバの「plc-controller」を再起動し、「stop_cpu」のツールが表示されることを確認します。

次回(第4回)の話は
次回は、今回新規にバイブコーディングで追加したツールを含め、実際にAIエージェントのプロンプトからPLCに対して指示を出し、正しく動作することをテストします。また、こうしたMCPサーバに関するセキュリティリスクもあわせて考察します。
よくある質問(FAQ)
Cursorのプロンプト機能を用いたバイブコーディングによって実装されています。人が自然言語で「IPアドレスとポート番号を指定して再接続できるようAPIを追加して」「PLCのCPUをストップできるようAPIを追加して」と指示し、AIが自動でコード生成や説明を行っています。
コードレビューの画面で確認できるように、「安全上の重要警告」のコメントがプログラム内に組み込まれています。このような警告コメントは、AIエージェントがプロンプトから指示を受け取って動作する際の安全性(ガードレールや意図しない誤操作の防止)に寄与します。
Seamless Message Protocolの略で、主に三菱電機のPLCなどで使用される通信プロトコルです。Ethernetのネットワーク経由で、PLCのデバイスメモリの読み書きだけでなく、今回追加したようなメンテナンス機能(CPUの停止・起動など)の制御もサポートしています。






