MCP server for interacting with ThingsBoard IoT platform to manage and retrieve device information
Two tools with minimal definitions. Both lack proper parameter descriptions (only bare strings provided). No output schemas documented. Descriptions are present but generic (10-20 chars). Parameter types are inferred from code, not explicitly declared in schema. No error handling guidance, no pagination support, no field-level documentation. Tool names follow verb_noun pattern but descriptions do not explain WHEN to use each tool or what distinguishes them.
Get device info.
Get device by device ID.
Parameter descriptions are missing or trivial. 'deviceIds' is described as 'A list of devices ids, separated by comma' but lacks format constraints, length limits, or examples of valid input. 'deviceId' has no description at all in the schema.
No output schema documented. Tools return raw API responses (dict[str, Any] | None) with no field documentation. LLMs cannot plan downstream calls or extract required data without knowing response structure.
No error handling or recovery guidance. make_tb_request() returns None on any exception without context. LLM receives no actionable error message, cannot distinguish auth failure from network timeout from invalid device ID.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | F | 41 | 2026-07-28+ | v2 |
Tool descriptions are too generic (10-20 chars). 'Get device by device ID' and 'Get device info' do not explain the difference between the two tools or when to call each. LLM cannot disambiguate.
Credentials (THINGSBOARD_USERNAME, THINGSBOARD_PASSWORD) are stored in environment variables and used to obtain auth tokens. While not exposed as tool parameters, the token is stored in a global variable and reused across requests, creating a session-like state that violates stateless request handling.