Modbus MCP サーバー
Modbus データを標準化およびコンテキスト化し、AI エージェントと産業用 IoT システムのシームレスな統合を可能にする MCP サーバー。
特徴
- Modbus ツール:
- 読み取り/書き込み保持レジスタ (
read_register
、 write_register
)。 - 読み取り/書き込みコイル (
read_coils
、 write_coil
)。 - 入力レジスタを読み取ります (
read_input_registers
)。 - 複数の保持レジスタを読み取ります (
read_multiple_holding_registers
)。
- プロンプト: カスタマイズ可能なプロンプト (
analyze_register
) を使用して Modbus レジスタ値を分析します。 - 柔軟な接続: 環境変数を介して構成された TCP、UDP、またはシリアル経由の Modbus をサポートします。
要件
- Python : 3.10
- 依存関係と仮想環境の管理のためのuv 。
インストール
uv
をインストールします:curl -LsSf https://astral.sh/uv/install.sh | sh
- リポジトリのクローンを作成します:
git clone https://github.com/kukapay/modbus-mcp.git
cd modbus-mcp
- 依存関係をインストール:
構成
サーバーは、環境変数で指定されたパラメータを使用してModbusデバイスに接続します。これらの変数は、 .env
ファイルまたはシェル環境で設定してください。
環境変数
変数 | 説明 | デフォルト | 必須 |
---|
MODBUS_TYPE | 接続タイプ: tcp 、 udp 、またはserial | tcp | はい |
MODBUS_HOST | TCP/UDPのホストアドレス | 127.0.0.1 | TCP/UDPの場合 |
MODBUS_PORT | TCP/UDPのポート | 502 | TCP/UDPの場合 |
MODBUS_SERIAL_PORT | シリアルポート(例: /dev/ttyUSB0 、 COM1 ) | /dev/ttyUSB0 | シリアル用 |
MODBUS_BAUDRATE | シリアルボーレート | 9600 | シリアル用 |
MODBUS_PARITY | シリアルパリティ: N (なし)、 E (偶数)、 O (奇数) | N | シリアル用 |
MODBUS_STOPBITS | シリアルストップビット | 1 | シリアル用 |
MODBUS_BYTESIZE | シリアルバイトサイズ | 8 | シリアル用 |
MODBUS_TIMEOUT | シリアルタイムアウト(秒) | 1 | シリアル用 |
.env
ファイルの例
TCPの場合:
MODBUS_TYPE=tcp
MODBUS_HOST=192.168.1.100
MODBUS_PORT=502
シリアルの場合:
MODBUS_TYPE=serial
MODBUS_SERIAL_PORT=/dev/ttyUSB0
MODBUS_BAUDRATE=9600
MODBUS_PARITY=N
MODBUS_STOPBITS=1
MODBUS_BYTESIZE=8
MODBUS_TIMEOUT=1
使用法
Claude Desktop へのインストール
設定ファイル:
{
"mcpServers": {
"Modbus MCP Server": {
"command": "uv",
"args": [ "--directory", "/path/to/modbus-mcp", "run", "modbus-mcp" ],
"env": { "MODBUS_TYPE": "tcp", "MODBUS_HOST": "127.0.0.1", "MODBUS_PORT": 502 },
}
}
}
ツールの使用
注:自然言語サポートは、クライアントがプロンプトを解析し、ツールにマッピングする能力に依存します。MCPインスペクターでは構造化されたJSONが必要ですが、以下の例は会話型入力がどのように翻訳されるかを示しています。
- 保有台帳の読み取り:
- プロンプト:
Please read the value of Modbus holding register 0.
- MCP インスペクター JSON :
{
"tool": "read_register",
"parameters": {"address": 0}
}
- 予想される出力:
Value: <register_value>
- 保留レジスタへの書き込み:
- プロンプト:
Set Modbus holding register 10 to the value 100.
- MCP インスペクター JSON :
{
"tool": "write_register",
"parameters": {"address": 10, "value": 100}
}
- 期待される出力:
Successfully wrote 100 to register 10
- 読み取りコイル:
- プロンプト:
Check the status of the first 5 Modbus coils starting at address 0.
- MCP インスペクター JSON :
{
"tool": "read_coils",
"parameters": {"address": 0, "count": 5}
}
- 予想される出力:
Coils 0 to 4: [False, False, False, False, False]
- コイルに書き込む:
- プロンプト:
- MCP インスペクター JSON :
{
"tool": "write_coil",
"parameters": {"address": 5, "value": true}
}
- 期待される出力:
Successfully wrote True to coil 5
- 入力レジスタの読み取り:
- プロンプト:
Read the values of 3 Modbus input registers starting from address 2.
- MCP インスペクター JSON :
{
"tool": "read_input_registers",
"parameters": {"address": 2, "count": 3}
}
- 予想される出力:
Input Registers 2 to 4: [<value1>, <value2>, <value3>]
- 複数の保持レジスタの読み取り:
- プロンプト:
Get the values of Modbus holding registers 0 through 2.
- MCP インスペクター JSON :
{
"tool": "read_multiple_holding_registers",
"parameters": {"address": 0, "count": 3}
}
- 予想される出力:
Holding Registers 0 to 2: [<value1>, <value2>, <value3>]
ライセンス
このプロジェクトはMITライセンスの下でライセンスされています。詳細はライセンスをご覧ください。