🚀 ThingsBoard MCP Server
ThingsBoard MCP Serverは、LLMやAIエージェントがThingsBoard IoTプラットフォームと対話するための自然言語インターフェースを提供します。自然言語でデバイスやテレメトリデータの操作、分析を行うことができます。

🚀 クイックスタート
- MCPクライアントを設定する:MCPクライアントの設定にThingsBoard MCPサーバーを追加します(クライアント設定を参照)
- 自然言語で操作を開始する:MCPクライアントを通じて、ThingsBoardインスタンスとの対話を開始します
✨ 主な機能
エンティティ操作
- デバイス:デバイスの詳細、認証情報、プロファイルを表示し、デバイスの関係を管理します
- アセット:アセット、アセットプロファイル、アセットの関係を表示し、管理します
- 顧客:顧客情報、タイトルを取得し、顧客の関係を管理します
- ユーザー:ユーザー、トークン、アクティベーションリンク、ユーザーの割り当てを管理します
テレメトリ管理
- 属性アクセス:任意のエンティティの属性キーと値をスコープごとに取得します
- 時系列アクセス:様々な集計オプションで時系列データを取得します
- テレメトリの挿入/更新:属性または時系列データをオプションのTTL設定で保存します
関係
方向ベースのクエリでエンティティ間の関係を探索し、ナビゲートします。
アラーム
特定のエンティティのアラーム、アラームタイプ、重大度情報を取得します。
管理
- システム設定:管理設定にアクセスし、管理します
- セキュリティ設定:セキュリティポリシーとJWT設定を表示します
- バージョン管理:リポジトリと自動コミット設定を管理します
- システム情報:更新を確認し、使用統計を取得します
📦 インストール
このMCPサーバーは、ThingsBoard IoT PlatformまたはThingsBoard Edgeと連携します。インストールには、ThingsBoardインスタンスまたはEdgeのURLと有効な認証情報が必要です。
ThingsBoardアカウント
MCPサーバーをインストールする前に、以下のものが必要です:
- ThingsBoardまたはEdgeインスタンスへのアクセス
- 十分な権限を持つユーザーアカウント
- このアカウントのユーザー名とパスワード
Dockerイメージ
最も簡単な開始方法は、Docker Hubから事前構築されたDockerイメージを使用することです。
サーバーモード
ThingsBoard MCPサーバーは、2つの異なるモードで実行できます:
- STDIOモード(標準入出力):サーバーは標準入出力ストリームを介して直接通信します
- SSEモード(サーバー送信イベント):サーバーはクライアントが接続するHTTPサーバーとして実行されます
STDIOモードでの実行(デフォルト)
STDIOモードでは、stdinを開いたままにするために-iフラグを含める必要があります:
docker pull thingsboard/mcp
docker run --rm -i -e THINGSBOARD_URL=<your_thingsboard_url> -e THINGSBOARD_USERNAME=<your_username> -e THINGSBOARD_PASSWORD=<your_password> thingsboard/mcp
SSEモードでの実行
SSEモードでは、-pフラグを使用してポート8000を公開し、デフォルト設定を明示的にオーバーライドする必要があります:
docker pull thingsboard/mcp
docker run --rm -p 8000:8000 -e THINGSBOARD_URL=<your_thingsboard_url> -e THINGSBOARD_USERNAME=<your_username> -e THINGSBOARD_PASSWORD=<your_password> -e SPRING_AI_MCP_SERVER_STDIO=false -e SPRING_WEB_APPLICATION_TYPE=servlet thingsboard/mcp
ソースからのビルド
ソースからJARファイルをビルドし、ThingsBoard MCPサーバーを直接実行することもできます。
前提条件
ビルド手順
- このリポジトリをクローンします
- プロジェクトをビルドします:
mvn clean install -DskipTests
- JARファイルは
targetフォルダに生成されます:
./target/thingsboard-mcp-server-1.0.0.jar
- JARファイルを使用してサーバーを実行します:
java -jar ./target/thingsboard-mcp-server-1.0.0.jar
java -Dspring.ai.mcp.server.stdio=false Dspring.main.web-application-type=servlet -jar ./target/thingsboard-mcp-server-1.0.0.jar
💻 使用例
基本的な使用法
MCPクライアントを設定し、自然言語でThingsBoardインスタンスと対話することができます。例えば、以下のような質問をすることができます:
Get my devices of type 'Air Quality Sensor'
これにより、構造化された結果が返されます。
高度な使用法
時系列データの解析や保存などの高度な操作も可能です。例えば、以下のような操作を行うことができます:
- 時系列データのシミュレーションや保存を要求する
- 時系列データを分析して異常、急増、またはデータギャップを見つける
📚 ドキュメント
クライアント設定
MCPクライアントが起動するときにサーバーをコンテナとして起動するには、クライアントの設定に適切な構成を追加する必要があります。
Docker設定
Dockerイメージを使用する場合は、claude_desktop_config.jsonに以下の構成を使用します:
{
"mcpServers": {
"thingsboard": {
"command": "docker",
"args": [
"run",
"-i",
"--rm",
"-e",
"THINGSBOARD_URL",
"-e",
"THINGSBOARD_USERNAME",
"-e",
"THINGSBOARD_PASSWORD",
"-e",
"LOGGING_PATTERN_CONSOLE",
"thingsboard/mcp"
],
"env": {
"THINGSBOARD_URL": "<thingsboard_url>",
"THINGSBOARD_USERNAME": "<thingsboard_username>",
"THINGSBOARD_PASSWORD": "<thingsboard_password>",
"LOGGING_PATTERN_CONSOLE": ""
}
}
}
}
バイナリ設定
ソースからJARファイルをビルドした場合は、claude_desktop_config.jsonに以下の構成を使用します:
{
"mcpServers": {
"thingsboard": {
"command": "java",
"args": [
"-jar",
"/absolute/path/to/thingsboard-mcp-server-1.0.0.jar"
],
"env": {
"THINGSBOARD_URL": "<thingsboard_url>",
"THINGSBOARD_USERNAME": "<thingsboard_username>",
"THINGSBOARD_PASSWORD": "<thingsboard_password>",
"LOGGING_PATTERN_CONSOLE": ""
}
}
}
}
環境変数
MCPサーバーがThingsBoardインスタンスに接続するためには、以下の環境変数が必要です:
| 変数 |
説明 |
デフォルト |
THINGSBOARD_URL |
ThingsBoardインスタンスのベースURL |
|
THINGSBOARD_USERNAME |
ThingsBoardでの認証に使用するユーザー名 |
|
THINGSBOARD_PASSWORD |
ThingsBoardでの認証に使用するパスワード |
|
THINGSBOARD_LOGIN_INTERVAL_SECONDS |
ログインセッションの更新間隔(秒) |
1800 |
SPRING_WEB_APPLICATION_TYPE |
Springアプリケーションのタイプ(noneまたはservlet) |
none |
SPRING_AI_MCP_SERVER_STDIO |
標準入出力通信の有効/無効 |
true |
SPRING_AI_MCP_SERVER_SSE_ENDPOINT |
サーバー送信イベント(SSE)のエンドポイントURL |
/sse |
SPRING_AI_MCP_SERVER_SSE_MESSAGE_ENDPOINT |
サーバー送信イベントのメッセージエンドポイントURL |
/mcp/message |
SERVER_PORT |
HTTPサーバーのポート番号 |
8080 |
これらの変数は、以下のいずれかの方法で設定できます:
- Dockerコマンドラインを使用して
-eフラグで直接設定する
- MCPクライアントの設定の
env構成ブロックを通じて設定する
利用可能なツール
ThingsBoard MCPサーバーは、自然言語コマンドで使用できる幅広いツールを提供します。これらのツールはカテゴリ別に整理されています。
デバイスツール
| ツール |
説明 |
getDeviceById |
提供されたデバイスIDに基づいてデバイスオブジェクトを取得します。 |
getDeviceCredentialsByDeviceId |
デバイスIDでデバイスの認証情報を取得します。デバイス作成時に認証情報が指定されていない場合、プラットフォームはランダムな'ACCESS_TOKEN'認証情報を生成します。 |
getTenantDevices |
テナントが所有するデバイスのページを返します。 |
getTenantDevice |
名前でテナントのデバイスを取得します。デバイス名はデバイスの一意のプロパティです。 |
getCustomerDevices |
顧客に割り当てられたデバイスオブジェクトのページを返します。 |
getUserDevices |
現在のユーザーが使用可能なデバイスオブジェクトのページを返します。 |
getDevicesByIds |
IDでデバイスを取得します。要求されたデバイスは、テナントが所有するか、顧客に割り当てられている必要があります。 |
getDevicesByEntityGroupId |
指定されたエンティティグループIDに属するデバイスオブジェクトのページを返します。 |
アセットツール
| ツール |
説明 |
getAssetById |
提供されたアセットIDに基づいてアセットオブジェクトを取得します。 |
getTenantAssets |
テナントが所有するアセットのページを返します。 |
getTenantAsset |
名前でテナントのアセットを取得します。アセット名はアセットの一意のプロパティです。 |
getCustomerAssets |
顧客に割り当てられたアセットオブジェクトのページを返します。 |
getUserAssets |
現在のユーザーが使用可能なアセットオブジェクトのページを返します。 |
getAssetsByIds |
IDでアセットを取得します。要求されたアセットは、テナントが所有するか、顧客に割り当てられている必要があります。 |
getAssetsByEntityGroupId |
指定されたエンティティグループIDに属するアセットオブジェクトのページを返します。 |
顧客ツール
| ツール |
説明 |
getCustomerById |
提供された顧客IDに基づいて顧客オブジェクトを取得します。 |
getCustomers |
テナントが所有する顧客のページを返します。 |
getTenantCustomer |
顧客タイトルを使用して顧客を取得します。 |
getUserCustomers |
ユーザーが使用可能な顧客のページを返します。 |
getCustomersByEntityGroupId |
指定されたエンティティグループIDに属する顧客オブジェクトのページを返します。 |
ユーザーツール
| ツール |
説明 |
getUserById |
提供されたユーザーIDに基づいてユーザーオブジェクトを取得します。 |
getUsers |
テナントまたは顧客が所有するユーザーのページを返します。 |
getTenantAdmins |
指定されたテナントに割り当てられたテナント管理者ユーザーのページを返します。 |
getCustomerUsers |
指定された顧客に割り当てられたユーザーのページを返します。 |
getAllCustomerUsers |
現在のテナントの権限が'CUSTOMER_USER'のユーザーのページを返します。 |
getUsersForAssign |
提供されたアラームIDに割り当てることができるユーザーデータオブジェクトのページを返します。 |
getUsersByEntityGroupId |
指定されたエンティティグループIDに属するユーザーオブジェクトのページを返します。 |
アラームツール
| ツール |
説明 |
getAlarmById |
提供されたアラームIDに基づいてアラームオブジェクトを取得します。 |
getAlarmInfoById |
提供されたアラームIDに基づいてアラーム情報オブジェクトを取得します。 |
getAlarms |
選択されたエンティティのアラームのページを取得します。 |
getAllAlarms |
現在のユーザーが所有するアラームのページを取得します。 |
getHighestAlarmSeverity |
発生元とオプションのステータスフィルターによって最高のアラーム重大度を取得します。 |
getAlarmTypes |
テナントが所有するか、顧客に割り当てられたアラームに基づいて一意のアラームタイプのセットを取得します。 |
エンティティグループツール
| ツール |
説明 |
getEntityGroupById |
提供されたエンティティグループIDに基づいてエンティティグループオブジェクトを取得します。 |
getEntityGroupsByType |
提供されたエンティティタイプに基づいてエンティティグループ情報オブジェクトのリストを取得します。 |
getEntityGroupByOwnerAndNameAndType |
提供された所有者、タイプ、および名前に基づいてエンティティグループオブジェクトを取得します。 |
getEntityGroupsByOwnerAndType |
提供された所有者IDとエンティティタイプに基づいてエンティティグループ情報オブジェクトのリストを取得します。 |
getEntityGroupsForEntity |
指定されたエンティティIDを含むグループのリストを返します。 |
getEntityGroupsByIds |
提供されたエンティティグループIDのリストに基づいてエンティティグループ情報オブジェクトのリストを取得します。 |
関係ツール
| ツール |
説明 |
getRelation |
指定された2つのエンティティ間の関係オブジェクトが存在する場合は返します。 |
findByFrom |
指定されたエンティティの'from'方向の関係オブジェクトのリストを返します。 |
findInfoByFrom |
指定されたエンティティの'from'方向の関係情報オブジェクトのリストを返します。 |
findByTo |
指定されたエンティティの'to'方向の関係オブジェクトのリストを返します。 |
findInfoByTo |
指定されたエンティティの'to'方向の関係情報オブジェクトのリストを返します。 |
テレメトリツール
| ツール |
説明 |
getAttributeKeys |
指定されたエンティティのすべての属性キーを取得します。 |
getAttributeKeysByScope |
指定されたエンティティとスコープのすべての属性キーを取得します。 |
getAttributes |
指定されたエンティティの属性を取得します。 |
getAttributesByScope |
指定されたエンティティとスコープの属性を取得します。 |
getTimeseriesKeys |
指定されたエンティティのすべての時系列キーを取得します。 |
getLatestTimeseries |
指定されたエンティティとキーの最新の時系列値を取得します。 |
getTimeseries |
指定されたエンティティ、キー、および時間範囲の時系列データを取得します。 |
saveDeviceAttributes |
デバイス属性を保存します。 |
saveEntityAttributesV1 |
エンティティ属性を保存します(バージョン1)。 |
saveEntityAttributesV2 |
エンティティ属性を保存します(バージョン2)。 |
saveEntityTelemetry |
エンティティのテレメトリデータを保存します。 |
saveEntityTelemetryWithTTL |
エンティティのテレメトリデータを有効期限(TTL)付きで保存します。 |
管理ツール
| ツール |
説明 |
getAdminSettings |
指定された文字列キーを使用して管理設定オブジェクトを取得します。 |
getSecuritySettings |
パスワードポリシー、ロックアウト制限などを含むセキュリティ設定オブジェクトを取得します。 |
getSystemInfo |
システムに関する主要な情報を取得します。 |
getUsageInfo |
現在のテナントの使用統計を取得します。 |
📄 ライセンス
このプロジェクトは、Apache 2.0ライセンスの下でライセンスされています。詳細については、ライセンスファイルを参照してください。