Thingsboard Mcp Server について
ThingsBoard MCP Serverは、AIエージェントをThingsBoard IoTインスタンスに接続し、デバイス、エンティティ、テレメトリー、アラームを操作します。幅広いツールを備え、ツール群とSTDIOまたはSSEのトランスポートを設定できます。
主な機能
- 01デバイス・アセット・顧客・ユーザー管理
- 02テレメトリーと時系列データの操作
- 03アラームとエンティティ関係の管理
- 04OTAパッケージの処理
- 05ツール群とトランスポートの設定
活用シーン
- 01IoT環境のデバイスやテレメトリーを検索
- 02アラームとエンティティ関係を管理
- 03デバイスにファームウェアパッケージを割り当て
MCP 対応
MCPサーバーはThingsBoard操作用の120以上のツールをクライアントに公開します。ローカル起動クライアント向けのSTDIOと、HTTP接続向けのSSEに対応しています。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
docker run -i --rm -e THINGSBOARD_URL -e THINGSBOARD_USERNAME -e THINGSBOARD_PASSWORD -e LOGGING_PATTERN_CONSOLE thingsboard/mcpTHINGSBOARD_URLTHINGSBOARD_USERNAMETHINGSBOARD_PASSWORDシークレットLOGGING_PATTERN_CONSOLEローカルサーバーにはマシン上の実行環境(Node.js 18 以上など)が必要です。設定ファイルの場所はクライアントごとに異なります。
ツール
ローカルサーバーのツールはマシン上で起動して初めて取得できます。メンテナーはまだツール一覧を提供していません。
詳細
ThingsBoard MCP サーバー
Model Context Protocol (MCP) を介して、AI エージェントをあなたの ThingsBoard IoT プラットフォームに接続します。デバイスの照会、エンティティの管理、テレメトリの分析、運用の自動化を、すべて自然言語で行えます。
Claude Desktop、Cursor、VS Code Copilot、Claude Code、および MCP 互換のあらゆるクライアントで動作します。
クイックスタート
ThingsBoard インスタンス(Cloud、EU Cloud、セルフホスト可能な CE/PE、または Edge)と、API キー(ThingsBoard 4.3 以降)またはユーザー名/パスワードが必要です。
Claude Desktop
claude_desktop_config.json に追加します:
{
"mcpServers": {
"thingsboard": {
"command": "docker",
"args": ["run", "-i", "--rm", "-e", "THINGSBOARD_URL", "-e", "THINGSBOARD_API_KEY", "thingsboard/mcp"],
"env": {
"THINGSBOARD_URL": "https://thingsboard.cloud",
"THINGSBOARD_API_KEY": "YOUR_API_KEY"
}
}
}
}
Cursor
~/.cursor/mcp.json(グローバル)または .cursor/mcp.json(プロジェクト)に追加します:
{
"mcpServers": {
"thingsboard": {
"command": "docker",
"args": ["run", "-i", "--rm", "-e", "THINGSBOARD_URL", "-e", "THINGSBOARD_API_KEY", "thingsboard/mcp"],
"env": {
"THINGSBOARD_URL": "https://thingsboard.cloud",
"THINGSBOARD_API_KEY": "YOUR_API_KEY"
}
}
}
}
VS Code Copilot
VS Code の settings.json または .vscode/mcp.json に追加します:
{
"mcp": {
"servers": {
"thingsboard": {
"command": "docker",
"args": ["run", "-i", "--rm", "-e", "THINGSBOARD_URL", "-e", "THINGSBOARD_API_KEY", "thingsboard/mcp"],
"env": {
"THINGSBOARD_URL": "https://thingsboard.cloud",
"THINGSBOARD_API_KEY": "YOUR_API_KEY"
}
}
}
}
}
Claude Code
claude mcp add thingsboard \
-e THINGSBOARD_URL=https://thingsboard.cloud \
-e THINGSBOARD_API_KEY=YOUR_API_KEY \
-- docker run -i --rm -e THINGSBOARD_URL -e THINGSBOARD_API_KEY thingsboard/mcp
SSE モード(HTTP ベースの任意の MCP クライアント)
サーバーを起動します:
docker run --rm -p 8000:8000 \
-e THINGSBOARD_URL=https://thingsboard.cloud \
-e THINGSBOARD_API_KEY=YOUR_API_KEY \
-e SPRING_AI_MCP_SERVER_STDIO=false \
-e SPRING_WEB_APPLICATION_TYPE=servlet \
thingsboard/mcp
次に、MCP クライアントを http://localhost:8000/sse に設定します。
レガシー認証: お使いの ThingsBoard のバージョンが 4.3 より古い場合は、
THINGSBOARD_API_KEYの代わりにTHINGSBOARD_USERNAMEとTHINGSBOARD_PASSWORDを使用してください。
できること
自然言語で質問すると、ThingsBoard インスタンスから構造化された結果が得られます:
| デバイスとエンティティの照会 | 時系列データの分析 |
![]() | ![]() |
| テレメトリの生成と保存 | 異常分析の取得 |
![]() | ![]() |
10 個のツールグループにわたる 120 以上のツール:
- デバイス — 作成、更新、削除、一覧表示、名前/タイプ/グループによる検索
- アセット — CRUD、テナント/顧客による一覧表示、検索
- 顧客 — CRUD、一覧表示、タイトルによる検索
- ユーザー — CRUD、一覧表示、管理者/顧客ユーザーの管理
- アラーム — 作成、確認、クリア、削除、重大度による照会
- テレメトリ — 属性と時系列の読み書き、集計、TTL
- リレーション — エンティティのリレーションシップの作成、削除、ナビゲート
- OTA パッケージ — ファームウェア/ソフトウェアのアップロード、ダウンロード、デバイスへの割り当て
- エンティティグループ(PE) — グループの管理、エンティティの割り当て/削除
- エンティティデータクエリ — 属性/テレメトリフィルターを使用した、すべてのエンティティタイプにわたる複雑なフィルター付きクエリ
インストール
Docker(推奨)
docker pull thingsboard/mcp
Docker イメージは 2 つのトランスポートモードをサポートしています:
- STDIO(デフォルト) — サーバーをサブプロセスとして起動するクライアント(Claude Desktop、Cursor など)向け
- SSE — HTTP 経由で接続するクライアント向け
使用例についてはクイックスタートを参照してください。
バイナリのダウンロード
wget https://github.com/thingsboard/mcp-server/releases/download/v2.1.0/thingsboard-mcp-server-2.1.0.jar
次のように実行します:
# STDIO mode
java -jar thingsboard-mcp-server-2.1.0.jar
# SSE mode
java -Dspring.ai.mcp.server.stdio=false -Dspring.main.web-application-type=servlet -jar thingsboard-mcp-server-2.1.0.jar
バイナリ使用時のクライアント設定
Docker の代わりに JAR ファイルを使用する場合は、claude_desktop_config.json で次を使用します:
{
"mcpServers": {
"thingsboard": {
"command": "java",
"args": ["-jar", "/absolute/path/to/thingsboard-mcp-server-2.1.0.jar"],
"env": {
"THINGSBOARD_URL": "https://thingsboard.cloud",
"THINGSBOARD_API_KEY": "YOUR_API_KEY"
}
}
}
}
ソースからのビルド
Java 17 以降と Maven 3.6 以降が必要です。
git clone https://github.com/thingsboard/mcp-server.git
cd mcp-server
mvn clean install -DskipTests
java -jar target/thingsboard-mcp-server-2.1.0.jar
設定
環境変数
| 変数 | 説明 | デフォルト |
|---|---|---|
THINGSBOARD_URL | ThingsBoard インスタンスのベース URL | 必須 |
THINGSBOARD_API_KEY | 認証用の API キー (4.3 以降で推奨) | |
THINGSBOARD_USERNAME | 認証用のユーザー名 (レガシー) | |
THINGSBOARD_PASSWORD | 認証用のパスワード (レガシー) | |
THINGSBOARD_LOGIN_INTERVAL_SECONDS | セッションの更新間隔 | 1800 |
HTTP_BIND_ADDRESS | HTTP バインドアドレス (SSE モード) | 127.0.0.1 |
HTTP_BIND_PORT | HTTP ポート (SSE モード) | 8000 |
SPRING_AI_MCP_SERVER_STDIO | STDIO トランスポートを有効化 | true |
SPRING_WEB_APPLICATION_TYPE | STDIO の場合は none、SSE の場合は servlet | none |
SPRING_AI_MCP_SERVER_SSE_ENDPOINT | SSE エンドポイントのパス | /sse |
SPRING_AI_MCP_SERVER_SSE_MESSAGE_ENDPOINT | SSE メッセージエンドポイントのパス | /mcp/message |
詳細設定: 接続とログ
| 変数 | 説明 | デフォルト |
|---|---|---|
THINGSBOARD_CONNECTION_MAX_RETRIES | 接続の最大再試行回数 | 3 |
THINGSBOARD_CONNECTION_RETRY_DELAY_SECONDS | 再試行間の遅延 | 5 |
THINGSBOARD_CONNECTION_CONNECT_TIMEOUT_SECONDS | HTTP 接続タイムアウト | 10 |
THINGSBOARD_CONNECTION_READ_TIMEOUT_SECONDS | HTTP 読み取りタイムアウト | 60 |
LOG_LEVEL_APP | アプリケーションのログレベル | info |
LOG_LEVEL_TOOLS | ツール実行のログレベル | info |
LOG_LEVEL_TOOL_RESPONSE | ツール応答のログレベル | info |
LOGGING_PATTERN_CONSOLE | Logback コンソールパターン | %d{yyyy-MM-dd HH:mm:ss} | %-5level | %logger{1} | %msg%n |
LOGGING_CONSOLE_TARGET | ログ出力先 | System.err |
ツールグループ
このサーバーは 120 以上のツールを公開しており、一部のクライアントではコンテキストの上限を超える可能性があります。不要なグループは無効化してください:
| 変数 | グループ | ツール | デフォルト |
|---|---|---|---|
THINGSBOARD_TOOLS_EDQ | エンティティデータクエリ + ガイド | 40 | true |
THINGSBOARD_TOOLS_TELEMETRY | テレメトリと属性 | 11 | true |
THINGSBOARD_TOOLS_DEVICE | デバイス | 11 | true |
THINGSBOARD_TOOLS_ASSET | アセット | 8 | true |
THINGSBOARD_TOOLS_ALARM | アラーム | 9 | true |
THINGSBOARD_TOOLS_OTA | OTA パッケージ | 11 | true |
THINGSBOARD_TOOLS_RELATION | リレーション | 8 | true |
THINGSBOARD_TOOLS_CUSTOMER | 顧客 | 7 | true |
THINGSBOARD_TOOLS_USER | ユーザー | 9 | true |
THINGSBOARD_TOOLS_GROUP | エンティティグループ (PE のみ) | 10 | true |
例 — コンテキストが限られたクライアント向けに約 50 個のツールまで削減:
{
"env": {
"THINGSBOARD_TOOLS_EDQ": "false",
"THINGSBOARD_TOOLS_OTA": "false",
"THINGSBOARD_TOOLS_GROUP": "false",
"THINGSBOARD_TOOLS_USER": "false"
}
}
利用可能なツール
デバイスツール (11)
| ツール | 説明 |
|---|---|
createOrUpsertDevice | 名前でデバイスを作成または更新します。ほとんどのデバイス関連タスクにおける主要なツールです。 |
saveDevice | 生の JSON からデバイスオブジェクトを作成または更新します。上級者向けツールです。 |
deleteDevice | ID でデバイスを削除します。 |
getDeviceById | 指定されたデバイス ID に基づいて Device オブジェクトを取得します。 |
getDeviceCredentialsByDeviceId | デバイス ID でデバイスの認証情報を取得します。 |
getTenantDevices | テナントが所有するデバイスのページを返します。 |
getTenantDevice | 名前でテナントデバイスを取得します。 |
getCustomerDevices | 顧客に割り当てられたデバイスのページを返します。 |
getUserDevices (PE) | 現在のユーザーが利用可能なデバイスのページを返します。 |
getDevicesByIds | ID でデバイスを取得します。 |
getDevicesByEntityGroupId (PE) | 指定されたエンティティグループ内のデバイスのページを返します。 |
アセットツール (8)
| ツール | 説明 | |------|-------------| | `saveAsset` | アセットオブジェクトを作成または更新します。 | | `deleteAsset` | ID でアセットを削除します。 | | `getAssetById` | ID で Asset オブジェクトを取得します。 | | `getTenantAssets` | テナントが所有するアセットのページを返します。 | | `getTenantAsset` | 名前でテナントアセットを取得します。 | | `getCustomerAssets` | 顧客に割り当てられたアセットのページを返します。 | | `getUserAssets` **(PE)** | 現在のユーザーが利用可能なアセットのページを返します。 | | `getAssetsByEntityGroupId` **(PE)** | 指定されたエンティティグループ内のアセットのページを返します。 |顧客ツール (7)
| ツール | 説明 |
|---|---|
saveCustomer | 顧客オブジェクトを作成または更新します。 |
deleteCustomer | ID で顧客を削除します。 |
getCustomerById | ID で Customer オブジェクトを取得します。 |
getCustomers | テナントが所有する顧客のページを返します。 |
getTenantCustomer | タイトルで顧客を取得します。 |
getUserCustomers (PE) | ユーザーが利用可能な顧客のページを返します。 |
getCustomersByEntityGroupId (PE) | 指定されたエンティティグループ内の顧客のページを返します。 |
ユーザーツール (9)
| ツール | 説明 |
|---|---|
saveUser | ユーザーオブジェクトを作成または更新します。 |
deleteUser | ID でユーザーを削除します。 |
getUserById | ID で User オブジェクトを取得します。 |
getUsers | テナントまたは顧客が所有するユーザーのページを返します。 |
getTenantAdmins | テナント管理者ユーザーのページを返します。 |
getCustomerUsers | 顧客に割り当てられたユーザーのページを返します。 |
getAllCustomerUsers (PE) | 現在のテナントのすべての顧客ユーザーのページを返します。 |
getUsersForAssign | アラームに割り当て可能なユーザーを返します。 |
getUsersByEntityGroupId (PE) | 指定されたエンティティグループ内のユーザーのページを返します。 |
アラームツール (9)
| ツール | 説明 |
|---|---|
saveAlarm | アラームオブジェクトを作成または更新します。 |
deleteAlarm | ID でアラームを削除します。 |
ackAlarm | アラームを確認応答します。 |
clearAlarm | アラームをクリアします。 |
getAlarmInfoById | ID でアラーム情報を取得します (発生元の名前を含む)。 |
getAlarms | 選択したエンティティのアラームのページを取得します。 |
getAllAlarms | 現在のユーザー所有者のアラームのページを取得します。 |
getHighestAlarmSeverity | 発生元ごとの最高アラーム重大度を取得します。 |
getAlarmTypes | 一意のアラームタイプを取得します。 |
OTA ツール (11)
| ツール | 説明 |
|---|---|
saveOtaPackageInfo | OTA パッケージ情報を作成または更新します。 |
saveOtaPackageData | ファイルパスから OTA パッケージのバイナリをアップロードします。 |
downloadOtaPackage | OTA パッケージのバイナリをローカルファイルパスにダウンロードします。 |
getOtaPackageInfoById | ID で OTA パッケージ情報を取得します。 |
getOtaPackageById | ID で OTA パッケージを取得します。 |
getOtaPackages | OTA パッケージを取得します (ページ単位)。 |
getOtaPackagesByDeviceProfile | デバイスプロファイルとタイプで OTA パッケージを取得します。 |
assignOtaPackageToDevice | デバイスに OTA パッケージを割り当てるか、クリアします。 |
assignOtaPackageToDeviceProfile | デバイスプロファイルに OTA パッケージを割り当てるか、クリアします。 |
countByDeviceProfileAndEmptyOtaPackage | OTA パッケージが割り当てられていないデバイスをカウントします。 |
deleteOtaPackage | ID で OTA パッケージを削除します。 |
リレーションツール (8)
| ツール | 説明 | |------|-------------| | `saveRelation` | リレーションを作成または更新します。 | | `deleteRelation` | 2 つのエンティティ間のリレーションを削除します。 | | `deleteRelations` | エンティティのすべてのリレーションを削除します。 | | `getRelation` | 2 つのエンティティ間のリレーションを取得します。 | | `findInfoByFrom` | エンティティからのリレーションを検索します(エンティティ名を含みます)。 | | `findByFromWithRelationType` | エンティティからのリレーションをタイプで絞り込んで検索します。 | | `findInfoByTo` | エンティティへのリレーションを検索します(エンティティ名を含みます)。 | | `findByToWithRelationType` | エンティティへのリレーションをタイプで絞り込んで検索します。 |テレメトリーツール(11)
| ツール | 説明 |
|---|---|
getAttributeKeys | エンティティのすべての属性キーを取得します。 |
getAttributeKeysByScope | スコープごとに属性キーを取得します。 |
getAttributes | エンティティの属性を取得します。 |
getAttributesByScope | スコープごとに属性を取得します。 |
getTimeseriesKeys | エンティティのすべての時系列キーを取得します。 |
getLatestTimeseries | 最新の時系列値を取得します。 |
getTimeseries | 指定した期間の時系列データを取得します。 |
saveDeviceAttributes | デバイス属性を保存します。 |
saveEntityAttributesV2 | エンティティ属性を保存します。 |
saveEntityTelemetry | エンティティのテレメトリーデータを保存します。 |
saveEntityTelemetryWithTTL | TTL 付きでエンティティのテレメトリーを保存します。 |
エンティティグループツール — PE のみ(10)
| ツール | 説明 |
|---|---|
saveEntityGroup | エンティティグループを作成または更新します。 |
deleteEntityGroup | ID でエンティティグループを削除します。 |
getEntityGroupById | ID でエンティティグループを取得します。 |
getEntityGroupsByType | エンティティタイプごとにエンティティグループを取得します。 |
getEntityGroupByOwnerAndNameAndType | オーナー、タイプ、名前でエンティティグループを取得します。 |
getEntityGroupsByOwnerAndType | オーナーとタイプでエンティティグループを取得します。 |
getEntityGroupsForEntity | 指定したエンティティを含むグループを取得します。 |
getEntityGroupsByIds | ID でエンティティグループを取得します。 |
addEntitiesToEntityGroup | グループにエンティティを追加します。 |
removeEntitiesFromEntityGroup | グループからエンティティを削除します。 |
エンティティデータクエリツール(19)
すべてのエンティティタイプにまたがる複雑な絞り込みクエリです。エンティティのフィールド、属性、最新のテレメトリーをキーフィルター付きでサポートします。
| ツール | 説明 |
|---|---|
findEntityDataBySingleEntityFilter | ID で 1 つのエンティティのデータを検索します。 |
findEntityDataByEntityGroupFilter (PE) | エンティティグループでデータを検索します。 |
findEntityDataByEntityListFilter | エンティティ ID のリストでデータを検索します。 |
findEntityDataByEntityNameFilter | 名前のプレフィックスでデータを検索します。 |
findEntityDataByEntityTypeFilter | エンティティタイプでデータを検索します。 |
findEntityDataByEntityGroupListFilter (PE) | 複数のグループのデータを検索します。 |
findEntityDataByEntityGroupNameFilter (PE) | 名前のプレフィックスでグループのデータを検索します。 |
findEntityDataByEntitiesGroupNameFilter (PE) | 指定した名前のグループ内のエンティティのデータを検索します。 |
findEntityDataByStateEntityOwnerFilter | エンティティオーナーのデータを検索します。 |
findEntityDataByAssetTypeFilter | タイプでアセットを検索します。 |
findEntityDataByDeviceTypeFilter | タイプでデバイスを検索します。 |
findEntityDataByEdgeTypeFilter | タイプでエッジを検索します。 |
findEntityDataByEntityViewTypeFilter | タイプでエンティティビューを検索します。 |
findEntityDataByRelationsQueryFilter | 関連するエンティティを検索します。 |
findEntityDataByAssetSearchQueryFilter | 関連するアセットを検索します。 |
findEntityDataByDeviceSearchQueryFilter | 関連するデバイスを検索します。 |
findEntityDataByEntityViewSearchQueryFilter | 関連するエンティティビューを検索します。 |
findEntityDataByApiUsageStateFilter | API 使用状況データを検索します。 |
findEntityDataByEdgeQueryFilter | 関連するエッジを検索します。 |
エンティティ数クエリツール(18)
フィルターに一致するエンティティをカウントします。フィルターの種類はエンティティデータクエリと同じです。
| ツール | 説明 |
|---|---|
countBySingleEntityFilter | 単一のエンティティ ID でカウントします。 |
countByEntityGroupFilter (PE) | エンティティグループでカウントします。 |
countByEntityListFilter | エンティティ ID リストでカウントします。 |
countByEntityNameFilter | 名前のプレフィックスでカウントします。 |
countByEntityTypeFilter | エンティティタイプでカウントします。 |
countByEntityGroupListFilter (PE) | 複数のグループでカウントします。 |
countByEntityGroupNameFilter (PE) | グループ名のプレフィックスでカウントします。 |
countByEntitiesGroupNameFilter (PE) | 名前付きグループ内のエンティティをカウントします。 |
countByAssetTypeFilter | アセットをタイプ別にカウントします。 |
countByDeviceTypeFilter | デバイスをタイプ別にカウントします。 |
countByEdgeTypeFilter | エッジをタイプ別にカウントします。 |
countByEntityViewTypeFilter | エンティティビューをタイプ別にカウントします。 |
countByApiUsageStateFilter | API 使用状況の行をカウントします。 |
countByRelationsQueryFilter | 関連するエンティティをカウントします。 |
countByAssetSearchQueryFilter | 関連するアセットをカウントします。 |
countByDeviceSearchQueryFilter | 関連するデバイスをカウントします。 |
countByEntityViewSearchQueryFilter | 関連するエンティティビューをカウントします。 |
countByEdgeQueryFilter | 関連するエッジをカウントします。 |
ガイドツール (3)
LLM が正しいクエリを構築するのを支援するドキュメントツールです。
| ツール | 説明 |
|---|---|
getEdqGuide | Entity Data Query を作成するためのドキュメントを取得します。 |
getEdqCountGuide | Entity Count Query を作成するためのドキュメントを取得します。 |
getKeyFiltersGuide | キーフィルターを作成するためのドキュメントを取得します。 |
ライセンス
このプロジェクトは Apache License 2.0 の下でライセンスされています — 詳細は LICENSE ファイルを参照してください。
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。



