Other Tools and Integrations Java ★ 97

thingsboard/thingsboard-mcp

The ThingsBoard MCP Server provides a natural language interface for LLMs and AI agents to interact with your ThingsBoard IoT platform.

Claude Desktop config.json'a ekle

{
  "mcpServers": {
    "thingsboard-thingsboard-mcp": {
      "command": "node",
      "args": [
        "~/.mcp/thingsboard-mcp/index.js"
      ]
    }
  }
}

ThingsBoard MCP Server

License Docker Java

Connect AI agents to your ThingsBoard IoT platform via Model Context Protocol (MCP). Query devices, manage entities, analyze telemetry, and automate operations — all through natural language.

Works with Claude Desktop, Cursor, VS Code Copilot, Claude Code, and any MCP-compatible client.

Quick Start

You need a ThingsBoard instance (Cloud, EU Cloud, self-hosted CE/PE, or Edge) and an API key (ThingsBoard 4.3+) or username/password.

Claude Desktop

Add to your 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

Add to ~/.cursor/mcp.json (global) or .cursor/mcp.json (project):

{
  "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

Add to your VS Code settings.json or .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 Mode (any HTTP-based MCP client)

Start the server:

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

Then point your MCP client to http://localhost:8000/sse.

Legacy auth: If your ThingsBoard version is older than 4.3, use THINGSBOARD_USERNAME and THINGSBOARD_PASSWORD instead of THINGSBOARD_API_KEY.

What You Can Do

Ask questions in natural language and get structured results from your ThingsBoard instance:

Query devices and entitiesAnalyze time-series data
Get My DevicesAnalyze Data
Generate and save telemetryGet anomaly analysis
Generate DataAnalysis Result

120+ tools across 10 tool groups:

  • Devices — create, update, delete, list, search by name/type/group
  • Assets — CRUD, list by tenant/customer, search
  • Customers — CRUD, list, search by title
  • Users — CRUD, list, admin/customer user management
  • Alarms — create, acknowledge, clear, delete, query by severity
  • Telemetry — read/write attributes and time-series, aggregation, TTL
  • Relations — create, delete, navigate entity relationships
  • OTA Packages — upload, download, assign firmware/software to devices
  • Entity Groups (PE) — manage groups, assign/remove entities
  • Entity Data Query — complex filtered queries across all entity types with attribute/telemetry filters

Installation

docker pull thingsboard/mcp

The Docker image supports two transport modes:

  • STDIO (default) — for clients that launch the server as a subprocess (Claude Desktop, Cursor, etc.)
  • SSE — for clients that connect over HTTP

See Quick Start for usage examples.

Download Binary

wget https://github.com/thingsboard/mcp-server/releases/download/v2.1.0/thingsboard-mcp-server-2.1.0.jar

Run with:

# 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
Binary client configuration

If you’re using the JAR file instead of Docker, use this in your 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"
      }
    }
  }
}

Build from Source

Requires Java 17+ and 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

Configuration

Environment Variables

VariableDescriptionDefault
THINGSBOARD_URLBase URL of your ThingsBoard instancerequired
THINGSBOARD_API_KEYAPI key for authentication (recommended for 4.3+)
THINGSBOARD_USERNAMEUsername for authentication (legacy)
THINGSBOARD_PASSWORDPassword for authentication (legacy)
THINGSBOARD_LOGIN_INTERVAL_SECONDSSession refresh interval1800
HTTP_BIND_ADDRESSHTTP bind address (SSE mode)127.0.0.1
HTTP_BIND_PORTHTTP port (SSE mode)8000
SPRING_AI_MCP_SERVER_STDIOEnable STDIO transporttrue
SPRING_WEB_APPLICATION_TYPEnone for STDIO, servlet for SSEnone
SPRING_AI_MCP_SERVER_SSE_ENDPOINTSSE endpoint path/sse
SPRING_AI_MCP_SERVER_SSE_MESSAGE_ENDPOINTSSE message endpoint path/mcp/message
Advanced: connection and logging
VariableDescriptionDefault
THINGSBOARD_CONNECTION_MAX_RETRIESMax connection retry attempts3
THINGSBOARD_CONNECTION_RETRY_DELAY_SECONDSDelay between retries5
THINGSBOARD_CONNECTION_CONNECT_TIMEOUT_SECONDSHTTP connect timeout10
THINGSBOARD_CONNECTION_READ_TIMEOUT_SECONDSHTTP read timeout60
LOG_LEVEL_APPApplication log levelinfo
LOG_LEVEL_TOOLSTool execution log levelinfo
LOG_LEVEL_TOOL_RESPONSETool response log levelinfo
LOGGING_PATTERN_CONSOLELogback console pattern%d{yyyy-MM-dd HH:mm:ss} | %-5level | %logger{1} | %msg%n
LOGGING_CONSOLE_TARGETLog output targetSystem.err

Tool Groups

The server exposes 120+ tools which may exceed context limits for some clients. Disable groups you don’t need:

VariableGroupToolsDefault
THINGSBOARD_TOOLS_EDQEntity Data Query + Guides40true
THINGSBOARD_TOOLS_TELEMETRYTelemetry & Attributes11true
THINGSBOARD_TOOLS_DEVICEDevices11true
THINGSBOARD_TOOLS_ASSETAssets8true
THINGSBOARD_TOOLS_ALARMAlarms9true
THINGSBOARD_TOOLS_OTAOTA Packages11true
THINGSBOARD_TOOLS_RELATIONRelations8true
THINGSBOARD_TOOLS_CUSTOMERCustomers7true
THINGSBOARD_TOOLS_USERUsers9true
THINGSBOARD_TOOLS_GROUPEntity Groups (PE only)10true

Example — reduce to ~50 tools for clients with limited context:

{
  "env": {
    "THINGSBOARD_TOOLS_EDQ": "false",
    "THINGSBOARD_TOOLS_OTA": "false",
    "THINGSBOARD_TOOLS_GROUP": "false",
    "THINGSBOARD_TOOLS_USER": "false"
  }
}

Available Tools

Device Tools (11)
ToolDescription
createOrUpsertDeviceCreate or update a device by name. Primary tool for most device tasks.
saveDeviceCreate or update the device object from raw JSON. Advanced tool.
deleteDeviceDelete the device by id.
getDeviceByIdFetch the Device object based on the provided Device Id.
getDeviceCredentialsByDeviceIdGet device credentials by device id.
getTenantDevicesReturns a page of devices owned by tenant.
getTenantDeviceGet tenant device by name.
getCustomerDevicesReturns a page of devices assigned to customer.
getUserDevices (PE)Returns a page of devices available for the current user.
getDevicesByIdsGet devices by ids.
getDevicesByEntityGroupId (PE)Returns a page of devices in a specified entity group.
Asset Tools (8)
ToolDescription
saveAssetCreate or update the asset object.
deleteAssetDelete the asset by id.
getAssetByIdGet the Asset object by id.
getTenantAssetsReturns a page of assets owned by tenant.
getTenantAssetGet tenant asset by name.
getCustomerAssetsReturns a page of assets assigned to customer.
getUserAssets (PE)Returns a page of assets available for the current user.
getAssetsByEntityGroupId (PE)Returns a page of assets in a specified entity group.
Customer Tools (7)
ToolDescription
saveCustomerCreate or update the customer object.
deleteCustomerDelete the customer by id.
getCustomerByIdGet the Customer object by id.
getCustomersReturns a page of customers owned by tenant.
getTenantCustomerGet customer by title.
getUserCustomers (PE)Returns a page of customers available for the user.
getCustomersByEntityGroupId (PE)Returns a page of customers in a specified entity group.
User Tools (9)
ToolDescription
saveUserCreate or update the user object.
deleteUserDelete the user by id.
getUserByIdFetch the User object by id.
getUsersReturns a page of users owned by tenant or customer.
getTenantAdminsReturns a page of tenant administrator users.
getCustomerUsersReturns a page of users assigned to a customer.
getAllCustomerUsers (PE)Returns a page of all customer users for the current tenant.
getUsersForAssignReturns users that can be assigned to an alarm.
getUsersByEntityGroupId (PE)Returns a page of users in a specified entity group.
Alarm Tools (9)
ToolDescription
saveAlarmCreate or update the alarm object.
deleteAlarmDelete the alarm by id.
ackAlarmAcknowledge the alarm.
clearAlarmClear the alarm.
getAlarmInfoByIdGet alarm info by id (includes originator name).
getAlarmsGet a page of alarms for the selected entity.
getAllAlarmsGet a page of alarms for the current user owner.
getHighestAlarmSeverityGet highest alarm severity by originator.
getAlarmTypesGet unique alarm types.
OTA Tools (11)
ToolDescription
saveOtaPackageInfoCreate or update OTA package info.
saveOtaPackageDataUpload OTA package binary from a file path.
downloadOtaPackageDownload OTA package binary to a local file path.
getOtaPackageInfoByIdGet OTA package info by id.
getOtaPackageByIdGet OTA package by id.
getOtaPackagesGet OTA packages (paged).
getOtaPackagesByDeviceProfileGet OTA packages by device profile and type.
assignOtaPackageToDeviceAssign or clear OTA package for a device.
assignOtaPackageToDeviceProfileAssign or clear OTA package for a device profile.
countByDeviceProfileAndEmptyOtaPackageCount devices without assigned OTA package.
deleteOtaPackageDelete OTA package by id.
Relation Tools (8)
ToolDescription
saveRelationCreate or update a relation.
deleteRelationDelete a relation between two entities.
deleteRelationsDelete all relations for an entity.
getRelationGet a relation between two entities.
findInfoByFromFind relations from an entity (includes entity names).
findByFromWithRelationTypeFind relations from an entity filtered by type.
findInfoByToFind relations to an entity (includes entity names).
findByToWithRelationTypeFind relations to an entity filtered by type.
Telemetry Tools (11)
ToolDescription
getAttributeKeysGet all attribute keys for an entity.
getAttributeKeysByScopeGet attribute keys by scope.
getAttributesGet attributes for an entity.
getAttributesByScopeGet attributes by scope.
getTimeseriesKeysGet all time-series keys for an entity.
getLatestTimeseriesGet latest time-series values.
getTimeseriesGet time-series data for a time range.
saveDeviceAttributesSave device attributes.
saveEntityAttributesV2Save entity attributes.
saveEntityTelemetrySave entity telemetry data.
saveEntityTelemetryWithTTLSave entity telemetry with TTL.
Entity Group Tools — PE only (10)
ToolDescription
saveEntityGroupCreate or update an entity group.
deleteEntityGroupDelete an entity group by id.
getEntityGroupByIdGet entity group by id.
getEntityGroupsByTypeGet entity groups by entity type.
getEntityGroupByOwnerAndNameAndTypeGet entity group by owner, type, and name.
getEntityGroupsByOwnerAndTypeGet entity groups by owner and type.
getEntityGroupsForEntityGet groups containing a specified entity.
getEntityGroupsByIdsGet entity groups by ids.
addEntitiesToEntityGroupAdd entities to a group.
removeEntitiesFromEntityGroupRemove entities from a group.
Entity Data Query Tools (19)

Complex filtered queries across all entity types. Supports entity fields, attributes, and latest telemetry with key filters.

ToolDescription
findEntityDataBySingleEntityFilterFind data for one entity by ID.
findEntityDataByEntityGroupFilter (PE)Find data by entity group.
findEntityDataByEntityListFilterFind data for a list of entity IDs.
findEntityDataByEntityNameFilterFind data by name prefix.
findEntityDataByEntityTypeFilterFind data by entity type.
findEntityDataByEntityGroupListFilter (PE)Find data for multiple groups.
findEntityDataByEntityGroupNameFilter (PE)Find data for groups by name prefix.
findEntityDataByEntitiesGroupNameFilter (PE)Find data for entities in a named group.
findEntityDataByStateEntityOwnerFilterFind data for entity owner.
findEntityDataByAssetTypeFilterFind assets by type.
findEntityDataByDeviceTypeFilterFind devices by type.
findEntityDataByEdgeTypeFilterFind edges by type.
findEntityDataByEntityViewTypeFilterFind entity views by type.
findEntityDataByRelationsQueryFilterFind related entities.
findEntityDataByAssetSearchQueryFilterFind related assets.
findEntityDataByDeviceSearchQueryFilterFind related devices.
findEntityDataByEntityViewSearchQueryFilterFind related entity views.
findEntityDataByApiUsageStateFilterFind API usage data.
findEntityDataByEdgeQueryFilterFind related edges.
Entity Count Query Tools (18)

Count entities matching filters. Same filter types as Entity Data Query.

ToolDescription
countBySingleEntityFilterCount by single entity ID.
countByEntityGroupFilter (PE)Count by entity group.
countByEntityListFilterCount by entity ID list.
countByEntityNameFilterCount by name prefix.
countByEntityTypeFilterCount by entity type.
countByEntityGroupListFilter (PE)Count by multiple groups.
countByEntityGroupNameFilter (PE)Count by group name prefix.
countByEntitiesGroupNameFilter (PE)Count entities in a named group.
countByAssetTypeFilterCount assets by type.
countByDeviceTypeFilterCount devices by type.
countByEdgeTypeFilterCount edges by type.
countByEntityViewTypeFilterCount entity views by type.
countByApiUsageStateFilterCount API usage rows.
countByRelationsQueryFilterCount related entities.
countByAssetSearchQueryFilterCount related assets.
countByDeviceSearchQueryFilterCount related devices.
countByEntityViewSearchQueryFilterCount related entity views.
countByEdgeQueryFilterCount related edges.
Guide Tools (3)

Documentation tools that help LLMs construct correct queries.

ToolDescription
getEdqGuideGet documentation for creating Entity Data Queries.
getEdqCountGuideGet documentation for creating Entity Count Queries.
getKeyFiltersGuideGet documentation for creating key filters.

License

This project is licensed under the Apache License 2.0 — see the LICENSE file for details.

Benzer MCP sunucuları

Daha fazla: Other Tools and Integrations →