1. Conduid
  2. Commerce
  3. thingsboard/thingsboard-mcp
MCP server · Commerce

thingsboard/thingsboard-mcp

MCP Server for Thingsboard

Unclaimed Apache-2.0 last commit 7 months ago commerce
65Good

Scored 7 days ago · breakdown

About thingsboard/thingsboard-mcp

thingsboard/thingsboard-mcp is an MCP server published by thingsboard in the Commerce category: mCP Server for Thingsboard.

The repository has 98 stars and 28 forks, with the last commit 7 months ago. Six months or more without a commit doesn't mean the server is broken, but check the open issues before depending on it in production.

Install

From source
git clone https://github.com/thingsboard/thingsboard-mcp

This server has no ConduID identity, so agent calls to it are not receipted. Pin the version you install and review the source before granting it credentials.

Tools (9)

createOrUpsertDeviceCreate or update a device by name. Primary tool for most device tasks.

Parameters not published.

deleteDeviceDelete the device by id.

Parameters not published.

getCustomerDevicesReturns a page of devices assigned to customer.

Parameters not published.

getDeviceByIdFetch the Device object based on the provided Device Id.

Parameters not published.

getDeviceCredentialsByDeviceIdGet device credentials by device id.

Parameters not published.

getDevicesByIdsGet devices by ids.

Parameters not published.

getTenantDeviceGet tenant device by name.

Parameters not published.

getTenantDevicesReturns a page of devices owned by tenant.

Parameters not published.

saveDeviceCreate or update the device object from raw JSON. Advanced tool.

Parameters not published.

Ask AI

✦

Ask AI about thingsboard/thingsboard-mcp

Powered by Claude · Grounded in docs

I know everything about thingsboard/thingsboard-mcp. Ask me about installation, configuration, usage, or troubleshooting.

Security checks

Static checks derived from the repository 22 hours ago. Heuristics on the source, not an audit.

  • ✓README presentThe repository ships documentation.
  • ✓License declaredUsable under a stated license.
  • ✓Tests presentA test suite exists in the repository.
  • !Dependencies pinnedNo lockfile. Installs can pull different code over time.
  • ✓No dynamic code executionSource scan found no eval, dynamic Function, or shell execution.
  • !Scoped permissionsDoesn't declare a permission scope. Assume it can do anything its process can.

Releases

v2.1.0ThingsBoard MCP Server 2.1.0 Release · 17 Feb 2026Minor release with the following improvements: New Features API key authentication Tool groups - ability to enable/disable tools by their group to reduce context size for clients with limited capacity (e.g., Claude Desktop, Ollama) OTA…
v2.0.0ThingsBoard MCP Server 2.0.0 Release · 27 Oct 2025Major release with the following improvements: Major improvements Add Entity Data Query tools: useful for advanced analytics to run complex queries over entities, their fields, attributes and telemetry and retrieve their data by…
v1.0.0ThingsBoard MCP Server 1.0.0 Release · 15 Aug 2025This is initial release of ThingsBoard MCP Server with the following features: Query entities (device, asset, customer, etc.) data and telemetry using conversational language Manage entities through AI assistants Analyze IoT data and…

README

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.

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

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

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

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 entities Analyze time-series data
Get My Devices Analyze Data
Generate and save telemetry Get anomaly analysis
Generate Data Analysis 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 (Recommended)

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

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

Variable Description Default
THINGSBOARD_URL Base URL of your ThingsBoard instance required
THINGSBOARD_API_KEY API key for authentication (recommended for 4.3+)
THINGSBOARD_USERNAME Username for authentication (legacy)
THINGSBOARD_PASSWORD Password for authentication (legacy)
THINGSBOARD_LOGIN_INTERVAL_SECONDS Session refresh interval 1800
HTTP_BIND_ADDRESS HTTP bind address (SSE mode) 127.0.0.1
HTTP_BIND_PORT HTTP port (SSE mode) 8000
SPRING_AI_MCP_SERVER_STDIO Enable STDIO transport true
SPRING_WEB_APPLICATION_TYPE none for STDIO, servlet for SSE none
SPRING_AI_MCP_SERVER_SSE_ENDPOINT SSE endpoint path /sse
SPRING_AI_MCP_SERVER_SSE_MESSAGE_ENDPOINT SSE message endpoint path /mcp/message
Variable Description Default
THINGSBOARD_CONNECTION_MAX_RETRIES Max connection retry attempts 3
THINGSBOARD_CONNECTION_RETRY_DELAY_SECONDS Delay between retries 5
THINGSBOARD_CONNECTION_CONNECT_TIMEOUT_SECONDS HTTP connect timeout 10
THINGSBOARD_CONNECTION_READ_TIMEOUT_SECONDS HTTP read timeout 60
LOG_LEVEL_APP Application log level info
LOG_LEVEL_TOOLS Tool execution log level info
LOG_LEVEL_TOOL_RESPONSE Tool response log level info
LOGGING_PATTERN_CONSOLE Logback console pattern %d{yyyy-MM-dd HH:mm:ss} | %-5level | %logger{1} | %msg%n
LOGGING_CONSOLE_TARGET Log output target System.err

Tool Groups

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

Variable Group Tools Default
THINGSBOARD_TOOLS_EDQ Entity Data Query + Guides 40 true
THINGSBOARD_TOOLS_TELEMETRY Telemetry & Attributes 11 true
THINGSBOARD_TOOLS_DEVICE Devices 11 true
THINGSBOARD_TOOLS_ASSET Assets 8 true
THINGSBOARD_TOOLS_ALARM Alarms 9 true
THINGSBOARD_TOOLS_OTA OTA Packages 11 true
THINGSBOARD_TOOLS_RELATION Relations 8 true
THINGSBOARD_TOOLS_CUSTOMER Customers 7 true
THINGSBOARD_TOOLS_USER Users 9 true
THINGSBOARD_TOOLS_GROUP Entity Groups (PE only) 10 true

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

Tool Description
createOrUpsertDevice Create or update a device by name. Primary tool for most device tasks.
saveDevice Create or update the device object from raw JSON. Advanced tool.
deleteDevice Delete the device by id.
getDeviceById Fetch the Device object based on the provided Device Id.
getDeviceCredentialsByDeviceId Get device credentials by device id.
getTenantDevices Returns a page of devices owned by tenant.
getTenantDevice Get tenant device by name.
getCustomerDevices Returns a page of devices assigned to customer.
getUserDevices (PE) Returns a page of devices available for the current user.
getDevicesByIds Get devices by ids.
getDevicesByEntityGroupId (PE) Returns a page of devices in a specified entity group.
Tool Description
saveAsset Create or update the asset object.
deleteAsset Delete the asset by id.
getAssetById Get the Asset object by id.
getTenantAssets Returns a page of assets owned by tenant.
getTenantAsset Get tenant asset by name.
getCustomerAssets Returns 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.
Tool Description
saveCustomer Create or update the customer object.
deleteCustomer Delete the customer by id.
getCustomerById Get the Customer object by id.
getCustomers Returns a page of customers owned by tenant.
getTenantCustomer Get 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.
Tool Description
saveUser Create or update the user object.
deleteUser Delete the user by id.
getUserById Fetch the User object by id.
getUsers Returns a page of users owned by tenant or customer.
getTenantAdmins Returns a page of tenant administrator users.
getCustomerUsers Returns a page of users assigned to a customer.
getAllCustomerUsers (PE) Returns a page of all customer users for the current tenant.
getUsersForAssign Returns users that can be assigned to an alarm.
getUsersByEntityGroupId (PE) Returns a page of users in a specified entity group.
Tool Description
saveAlarm Create or update the alarm object.
deleteAlarm Delete the alarm by id.
ackAlarm Acknowledge the alarm.
clearAlarm Clear the alarm.
getAlarmInfoById Get alarm info by id (includes originator name).
getAlarms Get a page of alarms for the selected entity.
getAllAlarms Get a page of alarms for the current user owner.
getHighestAlarmSeverity Get highest alarm severity by originator.
getAlarmTypes Get unique alarm types.
Tool Description
saveOtaPackageInfo Create or update OTA package info.
saveOtaPackageData Upload OTA package binary from a file path.
downloadOtaPackage Download OTA package binary to a local file path.
getOtaPackageInfoById Get OTA package info by id.
getOtaPackageById Get OTA package by id.
getOtaPackages Get OTA packages (paged).
getOtaPackagesByDeviceProfile Get OTA packages by device profile and type.
assignOtaPackageToDevice Assign or clear OTA package for a device.
assignOtaPackageToDeviceProfile Assign or clear OTA package for a device profile.
countByDeviceProfileAndEmptyOtaPackage Count devices without assigned OTA package.
deleteOtaPackage Delete OTA package by id.
Tool Description
saveRelation Create or update a relation.
deleteRelation Delete a relation between two entities.
deleteRelations Delete all relations for an entity.
getRelation Get a relation between two entities.
findInfoByFrom Find relations from an entity (includes entity names).
findByFromWithRelationType Find relations from an entity filtered by type.
findInfoByTo Find relations to an entity (includes entity names).
findByToWithRelationType Find relations to an entity filtered by type.
Tool Description
getAttributeKeys Get all attribute keys for an entity.
getAttributeKeysByScope Get attribute keys by scope.
getAttributes Get attributes for an entity.
getAttributesByScope Get attributes by scope.
getTimeseriesKeys Get all time-series keys for an entity.
getLatestTimeseries Get latest time-series values.
getTimeseries Get time-series data for a time range.
saveDeviceAttributes Save device attributes.
saveEntityAttributesV2 Save entity attributes.
saveEntityTelemetry Save entity telemetry data.
saveEntityTelemetryWithTTL Save entity telemetry with TTL.
Tool Description
saveEntityGroup Create or update an entity group.
deleteEntityGroup Delete an entity group by id.
getEntityGroupById Get entity group by id.
getEntityGroupsByType Get entity groups by entity type.
getEntityGroupByOwnerAndNameAndType Get entity group by owner, type, and name.
getEntityGroupsByOwnerAndType Get entity groups by owner and type.
getEntityGroupsForEntity Get groups containing a specified entity.
getEntityGroupsByIds Get entity groups by ids.
addEntitiesToEntityGroup Add entities to a group.
removeEntitiesFromEntityGroup Remove entities from a group.

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

Tool Description
findEntityDataBySingleEntityFilter Find data for one entity by ID.
findEntityDataByEntityGroupFilter (PE) Find data by entity group.
findEntityDataByEntityListFilter Find data for a list of entity IDs.
findEntityDataByEntityNameFilter Find data by name prefix.
findEntityDataByEntityTypeFilter Find 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.
findEntityDataByStateEntityOwnerFilter Find data for entity owner.
findEntityDataByAssetTypeFilter Find assets by type.
findEntityDataByDeviceTypeFilter Find devices by type.
findEntityDataByEdgeTypeFilter Find edges by type.
findEntityDataByEntityViewTypeFilter Find entity views by type.
findEntityDataByRelationsQueryFilter Find related entities.
findEntityDataByAssetSearchQueryFilter Find related assets.
findEntityDataByDeviceSearchQueryFilter Find related devices.
findEntityDataByEntityViewSearchQueryFilter Find related entity views.
findEntityDataByApiUsageStateFilter Find API usage data.
findEntityDataByEdgeQueryFilter Find related edges.

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

Tool Description
countBySingleEntityFilter Count by single entity ID.
countByEntityGroupFilter (PE) Count by entity group.
countByEntityListFilter Count by entity ID list.
countByEntityNameFilter Count by name prefix.
countByEntityTypeFilter Count by entity type.
countByEntityGroupListFilter (PE) Count by multiple groups.
countByEntityGroupNameFilter (PE) Count by group name prefix.
countByEntitiesGroupNameFilter (PE) Count entities in a named group.
countByAssetTypeFilter Count assets by type.
countByDeviceTypeFilter Count devices by type.
countByEdgeTypeFilter Count edges by type.
countByEntityViewTypeFilter Count entity views by type.
countByApiUsageStateFilter Count API usage rows.
countByRelationsQueryFilter Count related entities.
countByAssetSearchQueryFilter Count related assets.
countByDeviceSearchQueryFilter Count related devices.
countByEntityViewSearchQueryFilter Count related entity views.
countByEdgeQueryFilter Count related edges.

Documentation tools that help LLMs construct correct queries.

Tool Description
getEdqGuide Get documentation for creating Entity Data Queries.
getEdqCountGuide Get documentation for creating Entity Count Queries.
getKeyFiltersGuide Get documentation for creating key filters.

License

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

README fetched from the repository 22 hours ago. The original is authoritative.

Questions

About thingsboard/thingsboard-mcp

How do I install thingsboard/thingsboard-mcp?

No package has been published for this server, so install it from source: clone the repository and follow its README.

Is thingsboard/thingsboard-mcp safe to use with an AI agent?

Its trust score is 65 out of 100 (good). It passes 4 of the 6 static security checks run so far; the failures are listed above. It has no ConduID identity yet, so agent calls to it are not receipted.

Is thingsboard/thingsboard-mcp still maintained?

The last commit was 7 months ago and 4 open issues. That's long enough that you should check whether the maintainer is responding to issues before depending on it.