ThingsBoard MCP Server 为大语言模型(LLMs)和 AI 代理提供了一个自然语言接口,使其能够与 ThingsBoard IoT 平台进行交互,实现对平台内数据的查询、分析和管理等操作。
ThingsBoard MCP Server 为大语言模型(LLMs)和 AI 代理提供了一个 自然语言接口,用于与 ThingsBoard IoT 平台进行交互。
你可以提出诸如“获取我所有类型为 '空气质量传感器' 的设备”之类的问题,并获得结构化的结果:
你可以请求在 ThingsBoard 中模拟或保存时间序列数据:
或者,你可以要求它分析你的时间序列数据,以查找异常、峰值或数据缺口:
此服务器实现了 模型上下文协议(MCP),该协议使 AI 系统能够通过自然语言命令访问和操作 ThingsBoard 中的数据。通过这种集成,你可以:
该服务器可以与 MCP 客户端(如 Claude Desktop、Cursor 以及其他支持 MCP 协议的 AI 应用程序)无缝集成。
在开始之前,请确保你具备以下条件:
通过基于方向的查询发现和导航实体之间的关系。
获取特定实体的告警、告警类型和严重性信息。
此 MCP 服务器可与 ThingsBoard IoT 平台或 ThingsBoard Edge 配合使用。安装时需要提供你的 ThingsBoard 实例或 Edge 的 URL 以及有效的凭证。
在安装 MCP 服务器之前,请确保你具备以下条件:
最简单的开始方式是使用 Docker Hub 上预构建的 Docker 镜像。
ThingsBoard MCP 服务器可以在两种不同的模式下运行:
对于 STDIO 模式,必须包含 -i 标志以保持标准输入打开:
docker pull thingsboard/mcp
docker run --rm -i -e THINGSBOARD_URL= -e THINGSBOARD_USERNAME= -e THINGSBOARD_PASSWORD= thingsboard/mcp
在 SSE 模式下,必须使用 -p 标志暴露端口 8000,并显式覆盖默认设置:
docker pull thingsboard/mcp
docker run --rm -p 8000:8000 -e THINGSBOARD_URL= -e THINGSBOARD_USERNAME= -e THINGSBOARD_PASSWORD= -e SPRING_AI_MCP_SERVER_STDIO=false -e SPRING_WEB_APPLICATION_TYPE=servlet thingsboard/mcp
你也可以从源码构建 JAR 文件,并直接运行 ThingsBoard MCP 服务器。
mvn clean install -DskipTests
./target/thingsboard-mcp-server-1.0.0.jar
# 对于 STDIO 模式
java -jar ./target/thingsboard-mcp-server-1.0.0.jar
# 对于 SSE 模式
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 镜像,请在 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_USERNAME": "" ,
"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_USERNAME": "" ,
"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 |
这些变量可以通过以下方式设置:
-e 标志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 |
检索当前租户的使用统计信息 |