🚀 ThingsBoard MCP Server
ThingsBoard MCP Server 為大語言模型(LLMs)和 AI 代理提供了一個自然語言接口,使其能夠與 ThingsBoard IoT 平臺進行交互,實現對平臺內數據的查詢、分析和管理等操作。
🔍 目錄
- 概述
- 要求
- 特性
- 快速開始指南
- 安裝
- 客戶端配置
- 環境變量
- 可用工具
- 設備工具
- 資產工具
- 客戶工具
- 用戶工具
- 告警工具
- 實體組工具
- 關係工具
- 遙測工具
- 管理工具
概述
ThingsBoard MCP Server 為大語言模型(LLMs)和 AI 代理提供了一個 自然語言接口,用於與 ThingsBoard IoT 平臺進行交互。
你可以提出諸如“獲取我所有類型為 '空氣質量傳感器' 的設備”之類的問題,並獲得結構化的結果:
你可以請求在 ThingsBoard 中模擬或保存時間序列數據:
或者,你可以要求它分析你的時間序列數據,以查找異常、峰值或數據缺口:
此服務器實現了 模型上下文協議(MCP),該協議使 AI 系統能夠通過自然語言命令訪問和操作 ThingsBoard 中的數據。通過這種集成,你可以:
- 使用對話式語言查詢實體(設備、資產、客戶等)數據和遙測信息
- 通過 AI 助手管理實體
- 使用 AI 工具分析 IoT 數據並生成報告
- 通過 AI 驅動的工作流自動化 ThingsBoard 操作
該服務器可以與 MCP 客戶端(如 Claude Desktop、Cursor 以及其他支持 MCP 協議的 AI 應用程序)無縫集成。
要求
在開始之前,請確保你具備以下條件:
- ThingsBoard 實例:一個正在運行的 ThingsBoard 實例,MCP 服務器可以連接到該實例。你可以使用以下任何一種選項:
- 認證憑證:在 ThingsBoard 實例上具有適當權限的有效用戶名和密碼
快速開始指南
- 配置 MCP 客戶端:將 ThingsBoard MCP 服務器添加到你的客戶端配置中(請參閱 客戶端配置)
- 開始使用自然語言:通過 MCP 客戶端開始與你的 ThingsBoard 實例進行交互
特性
實體操作
- 設備:查看設備詳細信息、憑證、配置文件,並管理設備關係
- 資產:查看和管理資產、資產配置文件以及資產關係
- 客戶:訪問客戶信息、標題,並管理客戶關係
- 用戶:管理用戶、令牌、激活鏈接以及用戶分配
遙測管理
- 屬性訪問:按範圍檢索任何實體的屬性鍵和值
- 時間序列訪問:獲取具有各種聚合選項的時間序列數據
- 遙測插入/更新:保存屬性或時間序列數據,並可選擇設置 TTL(生存時間)
關係管理
通過基於方向的查詢發現和導航實體之間的關係。
告警管理
獲取特定實體的告警、告警類型和嚴重性信息。
系統管理
- 系統設置:訪問和管理系統管理設置
- 安全設置:查看安全策略和 JWT 配置
- 版本控制:管理存儲庫和自動提交設置
- 系統信息:檢查更新並檢索使用統計信息
安裝
此 MCP 服務器可與 ThingsBoard IoT 平臺或 ThingsBoard Edge 配合使用。安裝時需要提供你的 ThingsBoard 實例或 Edge 的 URL 以及有效的憑證。
ThingsBoard 賬戶
在安裝 MCP 服務器之前,請確保你具備以下條件:
- 可以訪問 ThingsBoard 或 Edge 實例
- 擁有具有足夠權限的用戶賬戶
- 該賬戶的用戶名和密碼
Docker 鏡像安裝
最簡單的開始方式是使用 Docker Hub 上預構建的 Docker 鏡像。
服務器模式
ThingsBoard MCP 服務器可以在兩種不同的模式下運行:
- STDIO 模式(標準輸入/輸出):服務器直接通過標準輸入/輸出流進行通信
- SSE 模式(服務器發送事件):服務器作為 HTTP 服務器運行,客戶端可以連接到該服務器
在 STDIO 模式下運行(默認)
對於 STDIO 模式,必須包含 -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 服務器。
前提條件
- Java 17 或更高版本
- Maven 3.6 或更高版本
構建步驟
- 克隆此存儲庫
- 構建項目:
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 客戶端啟動時將服務器作為容器啟動(例如 Claude Desktop),需要在客戶端設置中添加相應的配置。
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 |
如果存在,則返回兩個指定實體之間的關係對象 |
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 |
檢索當前租戶的使用統計信息 |