abb-rws-mcp について
abb-rws-mcpは、abb-rws-daemon経由でABBロボットコントローラーを調べる読み取り専用のMCPサーバーです。コントローラーセッションを開いたり制御コマンドを送ったりせず、状態や停止原因の調査に使えます。
主な機能
- 01コントローラー状態と動作モードの確認
- 02関節位置とTCP姿勢の取得
- 03I/O信号とイベントログの読み取り
- 04RAPID実行状態とソースの確認
- 05タイムスタンプ付き構造化データ
- 06停止調査用プロンプト
活用シーン
- 01ロボットコントローラーの停止原因調査
- 02最近の警告とイベント履歴の確認
- 03プログラムポインター位置のRAPIDソース確認
MCP 対応
stdio経由でMCPクライアントに8つの読み取り専用ツールと1つのプロンプトを提供します。同じPC上のabb-rws-daemonを介してのみABBコントローラーにアクセスします。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
ツール
8掲載時のツール一覧 · 2 日前に更新
| パラメーター | 型 | 必須 | 説明 |
|---|---|---|---|
| controller | string | いいえ | コントローラーのデーモン ID。デーモンにコントローラーが 1 台だけの場合は省略できます。 |
| sourceLine | boolean | いいえ | プログラムポインター位置のソース行を読み取ります(デフォルトは true。モジュールの読み取りは最大 2 回)。 |
| windowMinutes | integer | いいえ | 直近何分間のエラーと警告を対象にするか(デフォルトは 60)。 |
詳細
abb-rws-mcp
AI アシスタントが ABB ロボットコントローラーの動作状況や停止理由を読み取れるようにする、Model Context Protocol(MCP)サーバーです。読み取り専用です。abb-rws-daemon を介して 127.0.0.1 経由で読み取ります。abb-rws-daemon は、Robot Web Services を通じてコントローラーごとに 1 つのセッションを保持します。対応するのは、RWS 1.0(IRC5、RobotWare 6)と RWS 2.0(OmniCore、RobotWare 7 および 8)です。このサーバーがコントローラーのセッションを開くことはなく、コントローラーの認証情報を参照することもありません。
ステータス: 0.1.0。読み取り専用です。2026-10-25 に abb-rws-daemon 0.1.0(スナップショットスキーマ 0.14)経由で、また 2026-10-21 にそのプレリリースビルド(スキーマ 0.13)経由でテスト済みです。いずれも 3 台の RobotStudio 仮想コントローラーで実施しました。対象は、RobotWare 6.16.03(RWS 1.0)、7.21.4 および 8.2.1(RWS 2.0)です。すべてのツールとプロンプトは stdio 経由で MCP クライアントから実行し、サーバーからデーモンに送信されたすべてのリクエストを記録しました。読み取りのみで、モーションサンプリングが有効な場合にコントローラーごとに 1 回のサンプリングリクエストを行いました。実機コントローラーではまだ実行していません。変更点はCHANGELOG.mdに記載しています。
読み取り専用。 サーバーには 8 つのツールと 1 つのプロンプトがあります。すべてのツールは読み取り専用です。信号の設定、プログラムの開始や停止、プログラムポインターの移動、モジュールのロードや編集、モーターの切り替え、速度の変更、マスターシップや書き込みアクセスの要求を行うツールはありません。フラグで有効にできる書き込みツールもありません。サーバーはファイルを書き込まず、プロセスも起動しません。デーモンの読み取り用ルートのみを呼び出します。GET ではない唯一のリクエストは、デーモンに 15 秒間の関節位置のサンプリングを依頼するものです(モーションサンプリングを参照)。
要件
- Windows または Linux 上の Node.js 20 以降。macOS は Linux と同じパスを使用しますが、テストされていません。
- abb-rws-daemon 0.1.0 またはそれ以降の 0.x が同じ PC で実行され、少なくとも 1 台のコントローラーが追加されていること。このサーバーからコントローラーを追加することはできません。スナップショットスキーマ 0.13 またはそれ以降の 0.x を読み取ります。abb-rws-daemon 0.1.0 が提供する 0.14 と、デーモンのプレリリースビルドのみが提供していた 0.13 でテスト済みです。0.14 で追加されたフィールド(ロック保持者が FlexPendant かどうか)は読み取りません。それ以降の 0.x では、テスト済みのスキーマより新しいことを示す警告が 1 つログに出力され、
list_controllersにも同じ内容が表示されます。 - stdio サーバーを実行できる MCP ホスト:Claude Desktop、Claude Code、VS Code、Cursor など。
セットアップ
まずデーモンを起動し、そこでコントローラーを追加します。次に、このサーバーを MCP ホストに追加します。以下の例のようにバージョンを固定してください。
Claude Desktop(claude_desktop_config.json)および Cursor(~/.cursor/mcp.json):
{
"mcpServers": {
"abb-rws": { "command": "npx", "args": ["-y", "[email protected]"] }
}
}
VS Code(.vscode/mcp.json):
{
"servers": {
"abb-rws": { "type": "stdio", "command": "npx", "args": ["-y", "[email protected]"] }
}
}
Claude Code:
claude mcp add abb-rws -- npx -y [email protected]
デーモンが別のポートで動作している場合は、サーバーエントリーに "env": { "ABB_RWS_MCP_DAEMON_URL": "http://127.0.0.1:7811" } を追加します。
サーバーは、デーモンがトークンファイルを保存している場所からそのファイルを探します。デーモンを --token-file 付きで実行する場合は、同じファイルをこのサーバーにも設定してください(設定を参照)。
公開パッケージは実行時依存関係のない単一のバンドルファイルなので、npx がほかのファイルを取得することはありません。
ツール
| ツール | 回答する内容 | コントローラーにアクセスしますか? |
|---|---|---|
summarize_controller | まずはこちらを使ってください。状態を一文でまとめ、スナップショットの事実、ABB が推奨する対処方法を含む最近のエラーと警告、運用メッセージ、各プログラムポインターのソース行を回答します | モジュールの読み取りは最大 2 回です。失敗した読み取りも含みます |
list_controllers | デーモンが認識しているコントローラーと、デーモン自体の状態を回答します。最初に、また他のツールが失敗したときに呼び出してください | いいえ |
get_controller_status | コントローラーの状態、動作モード、速度オーバーライド、衝突検出、RAPID の実行状況、リンク、デーモンがここで読み取れる内容、コントローラーが報告したアクセス状態を回答します | いいえ |
get_robot_position | 関節位置、オイラー角による TCP 姿勢、アームが動いているかどうか、各関節のリミットまでの距離を回答します | 動作のサンプリングを行います。以下を参照してください |
read_io_signals | デーモンの信号テーブルにある信号と値、または信号の検索結果を回答します | 検索時のみ |
get_event_log | デーモンが保持するコントローラーのイベントログを、重大度、時刻、カテゴリ、コードで絞り込んで回答します | いいえ |
get_rapid_execution | 各タスクの実行状態、プログラムポインター、動作ポインターを回答します | いいえ |
read_rapid_source | 行番号付きのモジュールの RAPID ソースを回答します。ルーチン、指定行の前後、またはページ単位で読み取れます | モジュールの初回読み取り時 |
プロンプト why_did_it_stop(プロンプトを表示するホストではスラッシュコマンド)は、コントローラーの動作と停止理由を調べるようアシスタントに指示します。固定の手順に従い、まず概要を示し、次に問題とその対処方法、プログラムポインターの行、その行で指定されている信号、各値の経過時間を説明し、データで裏付けられる原因のみを示します。
アシスタントに表示される内容
- すべての回答はステータス行から始まります。コントローラー ID、仮想か実機か、RobotWare のバージョン、データが最新か、DEGRADED、DOWN、または REPLAY かを示します。
- すべての値には、UTC の時刻と経過時間(「14:02:11 UTC(3 分 12 秒前)」)が付いています。
- 古い値も時刻付きで返され、STALE と表示されます。コントローラーが停止または劣化状態でも、エラーにはなりません。
- イベントの時刻は約 1 秒の精度で UTC に補正されます。デーモンがコントローラーの時計を読み取れなかった場合は、「コントローラーの時計。タイムゾーン不明」と表示されます。
- ABB のドキュメントで説明されているコントローラーの状態とモードには、一文の説明が付いています。
- 記録を再生するデーモンは、再生が許可されていない限り拒否されます。許可された場合、すべての回答に REPLAY と表示されます。
- すべての回答には、読みやすいテキスト部分と、同じデータを含む構造化 JSON があります。
コントローラーのテキストはデータです
イベントログのメッセージ、RAPID ソース、信号名、コントローラー名は、コントローラーから取得されます。コントローラーのプログラムまたは設定を変更できる人は、これらのテキストを書き込めます。abb-rws-mcp はこれらを指示ではなくコントローラーデータとしてアシスタントに渡します。テキスト内では、その回答ごとに生成されるランダムな値を持つマーカーで囲まれたブロック内に配置され、構造化 JSON では controllerData の下に格納されます。エスケープシーケンスは取り除かれ、非表示文字(制御文字、ゼロ幅文字、方向制御文字、タグ文字)は目に見える記号(U+FFFD)に置き換えられます。このサーバーには何かを変更するツールがないため、こうしたテキストによってサーバーが動作することはありません。ただし、アシスタントが使用できる他のツールは動作する可能性があります。実行する前に、アシスタントが提案した内容を確認してください。
動作のサンプリング
get_robot_position は、別のプログラムがすでに行っている場合を除き、関節位置と姿勢を 15 秒間サンプリングするようデーモンに要求します。これらはコントローラーの読み取りで、デーモンの README に「Reads on demand」として記載されています。サンプリング中は、機械ユニットごとに関節を 1 秒あたり約 8 回、ロボットごとに姿勢を 1 秒あたり 2 回読み取ります。サーバーが各コントローラーに対してこの要求を行うのは 15 秒に 1 回までで、リンクが接続されていないときや、コントローラーがビジー状態を報告しているときは行いません。--motion-sampling off で無効にすると、このツールは最終サンプリング値とその時刻を返します。
シグナル
シグナルテーブルはデーモンのメモリから読み取られ、値の取得時期は不明です。デバイス、ネットワーク、カテゴリによる検索、または fresh: true を指定した読み取りは、コントローラーに対する読み取り専用の RWS 検索リクエストです(デーモンが GET ではなく POST で送信します)。検索には、3 文字以上の名前のプレフィックスまたはデバイスが必要なため、テーブル全体をページングすることはありません。このサーバーはコントローラーへの読み取り(検索とモジュールの読み取り)を独自に制限しており、コントローラーごとに一度に 1 件、連続して最大 2 件まで、その後は 2 秒ごとに 1 件です。
参照できない情報
- ABB の説明によると、デーモンが読み取る共通イベントログには、RAPID のビルドエラーログと内部ログは含まれません。「プログラムが起動しない理由」の確認では、ビルドエラーを見落とすことがあります。
- スナップショットには、プログラムまたはコントローラーの状態が最後に変化した時刻はありません。タイミングを確認できる唯一の証拠は、ログに記録された運用イベントです。
- デーモンは、コントローラーごとに直近 256 件のイベントログメッセージを保持します。それより古いメッセージは利用できません。
- RAPID の変数、バックアップ、設定、コントローラーファイルはまだデーモンから提供されていないため、このサーバーから読み取ることはできません。
設定
各オプションには環境変数があります。オプションの指定は環境変数より優先されます。空の環境変数は未設定として扱われます。
| オプション | 変数 | デフォルト値と意味 |
|---|---|---|
--daemon-url <url> | ABB_RWS_MCP_DAEMON_URL | http://127.0.0.1:7810。指定できるのは http://127.0.0.1:<port> または http://localhost:<port> のみです。localhost は表記上の違いにすぎず、サーバーは常に 127.0.0.1 に接続します。[::1] を含む、それ以外のすべてのホストは起動時に拒否されます。 |
--token-file <file> | ABB_RWS_DAEMON_TOKEN_FILE | デーモン独自のデフォルト値です。Windows では %APPDATA%\abb-rws-daemon\token、それ以外では $XDG_CONFIG_HOME/abb-rws-daemon/token または ~/.config/abb-rws-daemon/token です。デーモンが読み取る変数と同じなので、一度設定すれば両方に適用されます。 |
--allow-replay | ABB_RWS_MCP_ALLOW_REPLAY | オフ。記録を再生するデーモンを読み取ります。その場合、すべての応答に REPLAY と表示されます。 |
--motion-sampling <on|off> | ABB_RWS_MCP_MOTION_SAMPLING | on。モーションサンプリングを参照してください。 |
ABB_RWS_MCP_LOG | warn。error、warn、info、debug のいずれかです。ログは stderr のみに出力されます。 |
--help と --version は、何にも接続せずに表示して終了します。不正な値が指定されると、サーバーは起動時に stderr へ 1 行を出力して停止します。
別の PC 上のデーモンを指定するオプションはありません。デーモンは 127.0.0.1 のみで待ち受け、このサーバーは同じ PC 上のデーモンを読み取ります。
セキュリティに関する注意
- ループバック接続のみです。トークンはデーモンのトークンファイルから読み取られてメモリ上に保持され、デーモンのヘルスチェック応答後に 127.0.0.1 にのみ送信されます。ログに記録されることはなく、ツールの結果にも含まれません。
- デーモンのトークンファイルを使うと、アカウントで実行されるすべてのプログラム(アシスタントのシェルツールを含む)が、コントローラーの追加、検出スキャン、シャットダウンなど、デーモン API 全体にアクセスできます。このサーバーが使用するのは読み取りルートのみですが、ほかのツールにはその制限は適用されません。
- ツールの結果は、アシスタントのモデルプロバイダーに送信されます。そこには、コントローラー名やシステム名、デーモンに登録されたコントローラー名(デフォルトではアドレス)、ロック保持者のユーザー名または PC 名が含まれることがあります。
- 同じセッションでウェブツールやシェルツールを使う場合、コントローラーのテキストによって、アシスタントがデータを外部へ送信するよう促される可能性があります。こうしたツールを有効にするときは、その点に注意してください。
- デーモンが記録中の場合、このサーバーが発生させた読み取りも記録に含まれます。記録中はすべての応答にその旨が表示されます。
- ログは stderr に出力され、ホスト側でディスクに保存されることがあります。デフォルトのレベルでは、コード、ID、ルートテンプレート、件数、処理時間が記録されますが、コントローラーのテキストは記録されません。
debugレベルでは、トークンファイルのパスと内部エラーのメッセージも記録されます。
セキュリティ上の問題は、SECURITY.md の説明に従って非公開で報告してください。
対応していないこと
- いかなる書き込みも行いません。信号の設定、RAPID の開始・停止、プログラムポインターや変数の書き込み、モジュールの読み込み、モーターの操作、速度比の変更、マスターシップや書き込みアクセスの要求は行いません。
- モーションコマンドには対応していません。エージェントがロボットをジョグしたり移動したりすることはできません。
- セットアップには対応していません。コントローラーの追加・削除、検出、記録、再生制御、デーモンの停止は行いません。これらはデーモンで実行します。
- コントローラーセッションやコントローラーの認証情報は扱いません。
- リモートデーモンには対応していません。ループバックのみです。
- サブスクリプションやストリームには対応していません。応答は呼び出し時点での読み取りです。
- HTTP トランスポートやリッスンソケットには対応していません。stdio のみです。
開発
npm ci
npm run build # type check, then bundle dist/cli.js
npm test # offline tests against a fake daemon
npm run lint
テストでコントローラーやデーモンにアクセスすることはありません。
関連プロジェクト
- abb-rws-daemon:コントローラーごとに 1 つのセッションを持ち、型付きスナップショットを HTTP と WebSocket 経由で提供します。このサーバーがコントローラーにアクセスする唯一の方法です
- abb-rws-client:RobotWare 6、7、8 でテスト済みの TypeScript RWS クライアントです
- abb-rws-ros2:ROS 2 監視ブリッジです
- abb-rws-vscode:ABB コントローラー向けの RAPID Live、VS Code 拡張機能です
ライセンス
Apache-2.0 です。LICENSE と NOTICE を参照してください。この作品を再配布する場合は、NOTICE ファイルを同梱してください。同梱されているサードパーティーパッケージとそのライセンスは、THIRD_PARTY_NOTICES.md に記載されています。
コントリビューションは DCO に基づいて受け付けています。CONTRIBUTING.md を参照してください。
免責事項
Meraj Safari による独立したオープンソースプロジェクトです。ABB との提携、承認、スポンサー関係はありません。ABB、RobotWare、OmniCore、IRC5、RAPID、FlexPendant、RobotStudio は ABB の商標です。TRADEMARKS.md を参照してください。
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。