メインコンテンツまでスキップ

MCPサーバー(AIアシスタント連携)

エッジボックス自体がMCPサーバーです。 ClaudeのようなAIアシスタントが現場のボックスに直接問い合わせます — OPC接続がいくつあるか、このタグの現在値がいくらか、収集が遅延していないか。

プラットフォームを経由しません。ボックスがプラットフォームと切断されていても、ボックスに到達できれば答えます。

項目値
エンドポイントPOST https://<엣지>/api/v1/mcp
転送Streamable HTTP、ステートレス
サーバー名plantpulse-edge(バージョンはボックスのものをそのまま通知します)
提供ツール6種 — すべて読み取り
認証/api/* と同じAPIキー。 MCP専用の認証はありません

接続方法​

# Claude Code
claude mcp add --transport http plantpulse-edge "https://<엣지>/api/v1/mcp" \
--header "X-API-Key: <edge.rest.api.key>"
// Claude Desktop — .mcp.json
{
"mcpServers": {
"plantpulse-edge": {
"type": "http",
"url": "https://<엣지>/api/v1/mcp",
"headers": { "X-API-Key": "<edge.rest.api.key>" }
}
}
}

X-API-Key の代わりに Authorization: Bearer <key> でも構いません。キーはREST API と同じ値(edge.rest.api.key)です — REST API を参照してください。

🔴 http:// で接続すると 403 になります — キーが正しくても拒否されます

edge.rest.api.https_only のデフォルト値が true のため、外部クライアント(X-API-Key・Bearer)からの呼び出しは必ずHTTPSでなければなりません。平文で来た場合、キーを確認する前に 403 HTTPS_REQUIRED で切断されます。

リバースプロキシ経由なら X-Forwarded-Proto: https も認められます。接続が拒否された場合、まずキーを疑わずにスキームを確認してください — 401ではなく403であればこのケースです。

キーが空の場合、/api/* 全体が500になります

edge.rest.api.auth はデフォルトで true(フェイルクローズ)であり、このとき edge.rest.api.key が空だと、ボックスはすべての /api/* リクエストを 500 MISCONFIGURED でブロックします。 「設定がなければ許可」ではなく「設定がなければブロック」です — 設定ファイルが失われたボックスが無認証で開放されるのを防ぐための意図的な動作です。

ブラウザでコンソールにログイン済みなら、キーなしでも動作します

同一ドメインの /ui/* 画面が呼び出す /api/* は、ログイン済みセッションのため通過します。APIキーは外部呼び出し(RESTクライアント · Node-RED · MCP)を保護するための仕組みです。

ツール6種 — すべて読み取り​

ツール機能必須引数
list_opcsこのボックスに設定されたOPC接続の一覧—
get_opcOPC接続を1つidで照会opcId
list_tags1つのOPC接続のタグ一覧opcId
get_tag_valueタグ1つの現在値 — キャッシュではなくデバイスから新たに読み取りますtagId
get_monitoringこのボックスの収集パイプラインの健全性状態—
get_transfer_statusプラットフォームへのstore-and-forward転送状態—

ツールは新しいコードではありません。 AIチャットが使用するまさにそのサービス(ConnectService · MonitoringQueryService)をそのまま呼び出します — 同じ質問に2つの経路が異なる答えをするのを避けるためです。

🔴 PLCを動かすツールは意図的にありません​

エッジのツールセットには start_opc · stop_opc · write_tag もあります。MCPには公開されていません。

チャット経路ではその3つは人間の承認画面(/ui/ai/approve)を通ります。MCPクライアントはその画面を通りません。そして write_tag はPLCに書き込みます — 物理的なものが動きます。 承認のない経路がそこに触れてはいけません。

将来書き込みツールが本当に必要になったら、承認をMCP内に先に移してから開きます。ツールを先に追加するのは安全装置を回避する最も簡単な道です。製品にはこれを守る回帰テストがあります。

なぜステートレスなのか​

現場のボックスに合った形だからです。セッションを使う転送ではサーバーがセッションごとの状態を保持する必要がありますが、現場の回線は切れたり繋がったりが日常で、そのたびにクライアントを識別して再接続しなければなりません。ボックスが再起動するとすべてのセッションが一斉に消えます。

ステートレスはリクエスト1つ1つを個別に扱います — 再接続するものも失うものもなく、ヒープ2GBのデバイスにセッションテーブルが成長しません。

正常に接続できたか確認する​

tools/list が6種を返すかを確認してください。

ツール一覧が「空」なのにサーバーは正常に見える場合があります

ツールスキャンが何も見つけられなくても、MCPサーバーは正常に起動します — 空の tools/list を通知するだけです。クライアントはそれを「このエッジにはツールがないんだ」と区別できません。 配線が切れていることが製品の事実として読まれてしまいます。

そのためボックスはその状態をログにERRORとして大きく残します。一覧が空の場合、エッジログで MCP tool scan produced NO tools を探してください。

関連項目​

REST API (v1) · プラットフォームMCPサーバー — プラットフォーム側はツール22種で、資産・アラーム・オントロジーまで扱います