Nordic Thingy:52 MCP Server
Provides tools to control and monitor Nordic Thingy:52 IoT devices, including environmental sensors (temperature, humidity, pressure, air quality, light), motion tracking (accelerometer, gyroscope, magnetometer, orientation, step counting), device control (RGB LED, speaker, battery), and connection management with auto-reconnect.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@Nordic Thingy:52 MCP ServerWhat's the current temperature and humidity?"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
Nordic Thingy:52 MCP Server
Transform your Nordic Thingy:52 into an AI-controlled IoT powerhouse
A production-ready Model Context Protocol (MCP) server that bridges physical sensor data with AI reasoning. Control and monitor your Nordic Thingy:52 IoT device through natural language conversations with Claude.
Why This MCP Server?
25 Comprehensive Tools: Full sensor suite, device control, and automation
3 MCP Resources: Real-time connection status, sensor guides, and automation examples
2 Smart Prompts: Quick access to sensor readings and device control
Auto-Reconnect: Robust connection management with automatic recovery
Zero Config: Works out of the box with Claude Desktop
Production Ready: Battle-tested with comprehensive error handling
Related MCP server: mcp2mqtt
Quick Start
Installation
Clone the repository
git clone https://github.com/hemantkamalakar/nordic-thingy52-mcp.git cd nordic-thingy52-mcpInstall dependencies
uv pip install -r requirements.txtOr using pip:
pip install -r requirements.txtConfigure Claude Desktop
Add to your Claude Desktop config file:
MacOS:
~/Library/Application Support/Claude/claude_desktop_config.jsonWindows:
%APPDATA%\Claude\claude_desktop_config.json{ "mcpServers": { "thingy52": { "command": "uv", "args": [ "--directory", "/Users/hemantkamalakar/Hemant/Research/Thingy52MCPServer", "run", "python", "run_server.py" ] } } }Note: Replace the directory path with your actual installation path. Use absolute paths, not relative paths.
Restart Claude Desktop
Start exploring!
"Find my Thingy device and show me all available sensors"
Device Capabilities
Environmental Sensors
Temperature: -40°C to 85°C precision monitoring
Humidity: 0-100% RH for comfort tracking
Pressure: 260-1260 hPa barometric readings
Air Quality: CO2 (400-8192 ppm) and TVOC (0-1187 ppb)
Light & Color: RGB + Clear channel ambient sensing
Advanced Motion Tracking
9-Axis Fusion: Accelerometer + Gyroscope + Magnetometer
Quaternion: Rotation representation for 3D orientation
Euler Angles: Roll, pitch, yaw calculations
Heading: Magnetic compass direction (0-360°)
Step Counter: Activity and movement detection
Tap Events: Physical interaction detection
Device Control
RGB LED: 16.7M colors with 3 modes (constant, breathe, one-shot)
Speaker: 8 preset sound samples
Battery Monitor: Real-time power level tracking
Auto-Reconnect: Seamless connection recovery
The 25 MCP Tools
Device Management (4 tools)
scan_devices()- Discover nearby Thingy:52 devicesconnect_device(address)- Connect to a specific devicedisconnect_device()- Gracefully disconnectget_device_status()- Connection and battery statusconfigure_auto_reconnect(enabled, max_attempts)- Configure reconnection
Environmental Sensors (8 tools)
read_temperature()- Current temperature in °Cread_humidity()- Relative humidity percentageread_pressure()- Barometric pressure in hParead_air_quality()- CO2 and TVOC levelsread_color_sensor()- RGBC color valuesread_light_intensity()- Ambient light in luxread_all_sensors()- Complete environmental snapshotconfigure_sensor_intervals()- Adjust sampling rates
Motion & Orientation (6 tools)
read_quaternion()- 3D orientation quaternionread_euler_angles()- Roll, pitch, yaw anglesread_heading()- Compass direction (0-360°)read_orientation()- Human-readable orientationread_raw_motion()- Raw accelerometer/gyro/magnetometerread_step_count()- Activity tracking
Device Control (4 tools)
set_led_color(color, intensity)- Solid color LEDset_led_breathe(color, intensity, delay)- Breathing effectturn_off_led()- Disable LEDplay_sound(sound_id)- Play preset sounds (1-8)beep()- Quick notification sound
Battery (1 tool)
read_battery()- Battery level percentage
MCP Resources
1. Connection Status (thingy://status)
Real-time connection information including device address, battery level, auto-reconnect status, and connection state.
2. Sensor Guide (thingy://sensors/guide)
Comprehensive reference for all available sensors with capabilities, ranges, and use cases.
3. Automation Examples (thingy://automation/examples)
Pre-built automation scenarios and workflow templates.
MCP Prompts
1. Quick Sensor Check
One-click access to read all environmental sensors with formatted output.
2. Device Control Panel
Interactive control interface for LED and sound with visual feedback.
Advanced Usage Examples
Smart Home Environment Monitoring
Scenario: Monitor room comfort and automatically alert when conditions are poor
"Monitor the temperature and humidity every 30 seconds. If temperature exceeds 26°C
or humidity goes above 65%, set the LED to orange and notify me. If CO2 exceeds
1000 ppm, make it red and play sound 3."Meeting Room Occupancy Detection
Scenario: Detect when a meeting room is occupied and track air quality
"Read the step counter and motion data. If motion is detected and CO2 is rising,
the room is likely occupied. Track CO2 levels and alert me if it exceeds 1200 ppm
(indicating poor ventilation). Flash the LED yellow as a warning."3D Orientation Tracking
Scenario: Use the device as a motion controller or tilt sensor
"Read the quaternion and euler angles. Tell me the current 3D orientation.
If the device is tilted more than 45 degrees from level, change LED to red.
If it's level, make it green."Plant Health Monitor
Scenario: Track environmental conditions for optimal plant growth
"Create a plant health monitoring system:
1. Read temperature (ideal: 18-24°C)
2. Read humidity (ideal: 40-60%)
3. Read light intensity (needs >500 lux)
4. If all conditions are good: green LED
5. If any condition is poor: yellow LED + beep
6. If multiple conditions are bad: red LED + sound 5"Air Quality Alert System
Scenario: Real-time air quality monitoring with multi-level alerts
"Monitor air quality continuously:
- CO2 < 800 ppm: Green LED (excellent)
- CO2 800-1000 ppm: Blue LED (good)
- CO2 1000-1500 ppm: Yellow LED + sound 1 (moderate)
- CO2 > 1500 ppm: Red LED breathe + sound 3 (poor - ventilate!)
Also track TVOC and alert if it exceeds 500 ppb"Motion-Activated Night Light
Scenario: Detect movement and provide temporary lighting
"Use tap detection and motion sensors. When a tap is detected:
1. Read the light intensity
2. If it's dark (< 10 lux), turn on LED to warm white at 50% brightness
3. After 30 seconds of no motion, turn off the LED
4. Play a gentle sound (sound 2) when activated"Weather Station with Trends
Scenario: Track barometric pressure for weather prediction
"Read the barometric pressure every 5 minutes for the next hour.
Track the trend:
- Rapidly falling pressure (>3 hPa drop): Red LED - storm approaching
- Slowly falling: Yellow LED - weather may worsen
- Rising pressure: Green LED - improving weather
- Stable: Blue LED - weather steady
Also display current temperature and humidity"Desk Posture Reminder
Scenario: Use orientation to detect slouching or poor posture
"Mount the Thingy on my monitor. Read the euler angles every minute:
- If pitch angle changes by more than 15° from the baseline, I might be slouching
- Flash yellow LED and play sound 1 as a gentle reminder
- After 2 hours, play sound 4 as a break reminder regardless of posture
Track total sitting time using the step counter"Smart Lab Incubator Monitor
Scenario: Precision environmental control for scientific applications
"Monitor incubator conditions:
1. Read temperature (target: 37°C ± 0.5°C)
2. Read humidity (target: 80-90%)
3. Read CO2 (5% CO2 environment = ~50000 ppm)
4. If any parameter is out of range:
- Red LED breathe
- Play sound 8 (urgent alert)
- Report exact values and deviation
5. If all parameters stable: slow green breathe
Log readings every 2 minutes"Package Delivery Detection
Scenario: Detect when a package is placed near the door
"Use as a package detector:
1. Monitor light sensor (package blocks light)
2. Detect tap/impact when package is set down
3. Check orientation change if package knocks device
4. When delivery detected:
- Play sound 6 (delivery notification)
- Flash green LED 3 times
- Report: 'Package delivered at [time]'
5. Send me the light level change and tap strength"Natural Language Command Examples
Device Discovery & Connection
"Scan for Thingy devices nearby"
"Connect to the Thingy with the strongest signal"
"What's the battery level of my Thingy?"
"Enable auto-reconnect with 5 retry attempts"Environmental Monitoring
"What's the current temperature and humidity?"
"Read all environmental sensors and format as a table"
"Is the air quality good in this room?"
"How bright is it right now? Give me the light intensity"
"What color is the ambient light? Read the RGB sensor"Motion & Orientation
"What direction is the device pointing? Give me the compass heading"
"Tell me the 3D orientation as euler angles"
"Is the device moving? Check the accelerometer"
"How many steps have been counted today?"
"Read the quaternion for 3D orientation tracking"LED Control
"Set the LED to warm white at 70% brightness"
"Make the LED breathe slowly in blue"
"Create a gentle red pulse effect with 2 second interval"
"Turn off the LED"
"Flash purple 5 times to signal completion"Sound Effects
"Play sound pattern 3"
"Make a beep to confirm the action"
"Play all 8 sounds in sequence so I can hear them"Complex Workflows
"Create a focus mode: Set LED to cool white at 40%, then monitor CO2.
If it exceeds 1000 ppm, remind me to open a window with sound 2"
"Build a temperature alarm: If temp goes above 28°C, flash red LED
and play sound 8. If it drops below 18°C, flash blue and play sound 4"
"Make a presence detector: Use motion, step counter, and CO2 to determine
if someone is in the room. Adjust LED color based on occupancy status"Project Structure
nordic-thingy52-mcp/
├── README.md # This file
├── PROMPT_GUIDE.md # Advanced automation examples
├── requirements.txt # Python dependencies
├── pyproject.toml # Project configuration
├── run_server.py # MCP server entry point
├── test_mcp_tools.py # Comprehensive test suite
└── src/
├── __init__.py
├── bluetooth_client.py # BLE communication layer
├── server.py # MCP server (25 tools, 3 resources, 2 prompts)
├── models.py # Data models for sensor readings
└── constants.py # BLE UUIDs and device constantsTesting
Run the comprehensive test suite to verify all 25 tools:
python test_mcp_tools.pyThis will test:
Device discovery and connection
All environmental sensors
Motion and orientation sensors
LED control (constant, breathe, off)
Sound playback
Auto-reconnect functionality
Battery monitoring
Troubleshooting
Device Not Found
Ensure Thingy:52 is powered on (press button, LED should flash)
Check Bluetooth is enabled on your computer
Move device closer (BLE range ~10 meters)
Try
scan_devices()with longer timeout
Connection Failed
Only one connection at a time (close Nordic Thingy app if running)
Reset device: hold button for 10 seconds until LED turns off
Check battery level (charge if below 20%)
Restart Bluetooth on your computer
Sensors Return None
Wait 2-3 seconds after connection for sensors to initialize
Some sensors need configuration first (use
configure_sensor_intervals())Check device is not in sleep mode (tap or press button)
LED Not Changing
Breathe mode may take time to start effect
Try turning LED off first, then setting new mode
Check if another application is controlling the LED
MCP Server Not Appearing in Claude
Verify config file path is absolute, not relative
Check JSON syntax (common error: missing commas)
Restart Claude Desktop completely
View Claude logs for MCP server errors
Technical Details
BLE Implementation
Library: Bleak (cross-platform BLE support)
Protocol: Bluetooth Low Energy 5.0
Services: 5 GATT services (environment, motion, UI, sound, battery)
Characteristics: 25+ BLE characteristics
Connection: Async/await pattern for performance
Sensor Specifications
Temperature: BME280 sensor, ±0.5°C accuracy
Humidity: BME280 sensor, ±3% RH accuracy
Pressure: BME280 sensor, ±1 hPa accuracy
Air Quality: CCS811 sensor (eCO2 and TVOC)
Motion: MPU-9250 9-axis IMU
Color: BH1745 RGB sensor
Light: BH1745 ambient light sensor
Performance
Scan Time: 5-10 seconds for device discovery
Connection: 2-3 seconds typical
Sensor Read: 50-200ms per reading
Reconnect: Automatic with exponential backoff
Battery Life: 3-7 days typical (varies with usage)
Contributing
Contributions are welcome! Areas for enhancement:
Firmware Updates: OTA firmware update support
Data Logging: Historical sensor data storage
Alerting: Email/SMS notifications for conditions
Multi-Device: Support for multiple Thingy devices
Custom Sounds: Upload custom audio samples
Calibration: Sensor calibration routines
License
MIT License - see LICENSE for details.
Resources
Acknowledgments
Built with:
FastMCP - Fast MCP server framework
Bleak - Cross-platform BLE library
Nordic Semiconductor for the amazing Thingy:52 hardware
Author
Hemant Kamalakar
Email: hemant.kamalakar@gmail.com
GitHub: @hemantkamalakar
Made for the IoT and AI community
Turn your legacy IoT devices into AI-powered automation nodes!
Available Tools
25 toolsbeepA
Play a quick beep sound.
Uses preset sound sample 1 for the beep.
Returns: Status message
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full burden. It discloses that it plays a quick beep, uses a preset sample, and returns a status message. This is transparent about the immediate behavior. However, it does not disclose whether the sound is played on the device, whether it is asynchronous, or why a 'beep' tool exists alongside 'play_sound'. For a simple tool, this level is adequate.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely concise: three short statements ('Play a quick beep sound', 'Uses preset sound sample 1 for the beep', 'Returns: Status message'). Every sentence adds information. It is front-loaded with the main action and has no filler or repetition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter, simple sound-playing tool, the description covers the essential information: what it does, what sample it uses, and what it returns. The output schema exists but the description simplifies it to 'Status message'. Gaps include whether it plays on the local machine or remote device, and how it differs from play_sound. Given the low complexity, a 3 is fair.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters, so the schema provides no parameter semantics to worry about. The description correctly indicates the tool takes no arguments. With no parameters, a baseline of 4 is appropriate because the description cannot meaningfully add parameter detail beyond confirming that no input is required.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's function: 'Play a quick beep sound.' It identifies a specific action (play) and resource (a beep sound). While there is a sibling tool 'play_sound' that is likely more general, 'beep' itself is distinct enough with its name and concise description. It could be improved by explicitly distinguishing it from play_sound, but it is not a tautology and conveys the core purpose.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage: when a quick beep sound is needed, this tool plays one. It notes it uses 'preset sound sample 1,' which helps set expectations. However, it does not explicitly state when to use this over the sibling 'play_sound' tool, nor does it mention any prerequisites or context in which this should not be used. The guidance is implied by the name and description, but could be more explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cancel_reconnect_attemptsB
Cancel any ongoing reconnection attempts.
Returns: Status message
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations exist, so the description carries the full burden of behavioral disclosure. It states that ongoing reconnection attempts are canceled and that a status message is returned, but it does not disclose side effects, whether future auto-reconnect settings are affected, or what happens if no reconnection attempts are in progress. This is sparse for a tool with no annotation safety net.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely concise, front-loads the core action, and contains no filler. The 'Returns: Status message' line is short and adds useful output information without bloating the definition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter utility with an output schema present, the description is mostly complete: it names the action, the target, and the return type. It could be more complete by clarifying the relationship to configure_auto_reconnect, but the word 'ongoing' reasonably implies it only affects current attempts.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters, so the baseline is 4. There is no parameter information needed, and the description does not need to compensate for any schema gaps.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states a specific action ('Cancel') and a resource ('any ongoing reconnection attempts'), so an agent can tell what the tool does. It does not explicitly differentiate it from sibling tools like configure_auto_reconnect or disconnect_device, but the resource phrasing makes the primary purpose unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance about when to use this tool versus alternatives such as configure_auto_reconnect or disconnect_device. The wording implies use when reconnection attempts are ongoing, but it does not state when not to use it or what related sibling tools are better suited for other goals.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
configure_auto_reconnectB
Configure auto-reconnect settings.
Args: enabled: Enable or disable auto-reconnect max_attempts: Maximum reconnection attempts (0 = infinite) initial_delay: Initial delay between retries in seconds max_delay: Maximum delay between retries in seconds
Returns: Status message
| Name | Required | Description | Default |
|---|---|---|---|
| enabled | Yes | ||
| max_delay | No | ||
| max_attempts | No | ||
| initial_delay | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It states that settings are configured and a status message is returned, but it does not disclose whether changes apply immediately, persist across sessions, require an active connection, or affect in-progress reconnect attempts.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and well-structured: a one-line summary, an Args list covering each parameter, and a Returns line. Every line is informative and there is no filler or unnecessary repetition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple settings tool, the parameter coverage and return mention are adequate, and the output schema presumably covers the return shape. However, the description lacks behavioral and usage context: no side effects, no relation to cancel_reconnect_attempts, and no prerequisites. It is a minimum-viable description rather than a fully contextual one.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description is the only source of parameter meaning. It fully compensates by explaining all four parameters: enabled toggles the feature, max_attempts clarifies that 0 means infinite, and the delay parameters specify units and intended role. This goes well beyond the schema's type and default information.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool configures auto-reconnect settings and enumerates the related parameters, so the agent knows what the tool does. It does not explicitly differentiate itself from the related sibling cancel_reconnect_attempts, but the focus on settings rather than attempts makes the purpose reasonably distinct.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives no guidance about when to use this tool versus alternatives or prerequisites. It does not mention cancel_reconnect_attempts or any condition that would make this tool inappropriate, leaving usage to be inferred from the tool name alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
connect_deviceA
Connect to a Nordic Thingy:52 device.
Args: address: Bluetooth MAC address of the device (e.g., "AA:BB:CC:DD:EE:FF") timeout: Connection timeout in seconds (default: 30.0)
Returns: Connection status message
| Name | Required | Description | Default |
|---|---|---|---|
| address | Yes | ||
| timeout | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
There are no annotations, so the description carries full responsibility for behavioral disclosure. It mentions a timeout but does not describe side effects, whether a persistent connection is established, what happens if already connected, or how failures are reported.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise and well-structured with an opening purpose sentence followed by Args and Returns sections. Every line is informative and there is no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers the essential invocation details: target device, parameters, and return message. However, it lacks crucial context about connection prerequisites, how it relates to sibling tools, and expected behavior on failure or timeout.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, yet the description fully compensates by explaining the address format with an example and giving both unit and default for timeout. This adds meaning well beyond the bare schema properties.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb 'Connect' with a clear resource, 'Nordic Thingy:52 device,' and identifies the unique operation among siblings like scan_devices and disconnect_device. It leaves no ambiguity about what the tool does.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives. It does not mention that scanning should be done first to obtain an address, nor that a connection is a prerequisite for other device operations.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
disconnect_deviceA
Disconnect from the currently connected Thingy device.
Returns: Disconnection status message
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Without annotations, the description must carry the behavioral burden. It discloses the core state change (disconnecting) and the return value (status message), but leaves unspecified what happens if no device is connected or whether auto-reconnect settings could interfere.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences lead with the action and then state the return value. Every word earns its place with no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the zero-parameter input and simple action, the description is largely complete and even supplies the return type. It would be more complete with a note about disconnected-state behavior, but that is a minor gap for a tool of this complexity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters and 100% schema coverage of an empty schema, so no parameter semantics are required. The baseline of 4 applies because there is nothing for the description to add.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Disconnect') and identifies the exact resource ('the currently connected Thingy device'). This clearly differentiates it from sibling tools like connect_device and configure_auto_reconnect.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase 'currently connected' states a clear precondition, implying the tool should be used when a connection exists. It does not explicitly discuss exclusions or alternatives, but the action is simple and the sibling connect_device naturally establishes the counterpart.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_device_statusA
Get the current device connection status and battery level.
Returns: Connection status including battery level, reconnection state, and retry count
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the burden of disclosing behavior. It does disclose the return contents (battery level, reconnection state, retry count), and 'Get' implies a read-only operation. However, it does not explicitly state that it has no side effects or explain possible failure modes.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is short and front-loaded with the primary purpose. The 'Returns' line adds useful output details without excessive verbosity, though 'connection status' is mentioned twice.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a parameterless status getter with no output schema, the description sufficiently covers purpose and return fields. A minor gap is that units for battery level are not specified, but overall the description is adequate for correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters, so baseline 4 applies. There is nothing for the description to add beyond what the empty schema already communicates.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('Get') and resource ('device connection status') and adds battery level. It clearly distinguishes itself from sibling tools like connect_device, scan_devices, and read_* sensor tools, which have different purposes.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives no guidance on when to use this tool versus alternatives such as connect_device, disconnect_device, or scan_devices. There is no mention of prerequisites, exclusions, or recommended context for calling it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
play_soundA
Play a preset sound sample from the Thingy speaker.
The Thingy:52 has 8 preset sound samples stored in the device firmware. Each sound ID plays a different preset sound effect or tone.
NOTE: Volume control is not available for preset sounds. They play at a fixed volume. Only frequency mode supports volume control.
Args: sound_id: Sound sample selector (1-8) 1-8: Different preset sound samples
Returns: Status message
| Name | Required | Description | Default |
|---|---|---|---|
| sound_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description takes on full disclosure responsibility. It usefully reveals that preset sounds play at a fixed volume and that volume control is impossible in this mode. It also mentions the return type as a status message, though it does not detail error behavior or prerequisites like device connection.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is reasonably short and front-loaded, but it repeats the 'preset sound sample' concept multiple times. The args section also restates information already covered in the prose, making it slightly less tight than it could be.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a one-parameter tool, the description covers the core behavior, the valid range, and a key limitation. However, it leaves out whether a connected device is required, what happens with an invalid sound_id, and what the status message contains. Since no annotations or detailed output schema are present, some operational ambiguity remains.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema only defines sound_id as an integer, with zero description coverage. The description compensates by explaining that sound_id is a 1-8 selector and that each ID maps to a different preset sample. It does not enumerate what each preset sounds like, but it provides enough meaning for correct invocation.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action and resource: play a preset sound sample from the Thingy speaker. It adds that there are 8 preset sounds, so the tool's function is understandable. However, it does not explicitly distinguish itself from the sibling tool 'beep', which likely also produces sound.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives some practical context by noting that preset sounds have no volume control and that only frequency mode supports volume. This implies when not to use this tool, but it does not name an alternative tool or explicitly state when to choose play_sound over beep.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
read_air_qualityA
Read air quality sensors (CO2 and TVOC) from the Thingy device.
IMPORTANT: The CCS811 gas sensor requires warm-up time:
First use: 20 min to 48 hours
After power cycle: 30+ minutes
For best accuracy: >100 hours continuous operation
If you see 0 values, the sensor is still warming up. This is normal. Leave the device powered on for 30-60 minutes before expecting readings.
Returns: CO2 in ppm, TVOC in ppb, and air quality status
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It openly explains the CCS811 warm-up requirement, that 0 values are normal during warm-up, and the expected return values. It does not cover failure modes or the need for a prior connection, so it is not a 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured: a clear opening sentence, a highlighted important caveat with bullet-style timing details, a brief note about interpreting 0 values, and a concise return summary. Every section earns its place and no content is wasted.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple 0-parameter tool without an output schema, the description adequately covers what is returned and the main behavioral caveat. It could be more complete by mentioning that the device must be connected first and by defining the air quality status values, but these are relatively minor gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters and the schema coverage is 100%, so there are no parameter semantics to explain. The description appropriately focuses on outputs (CO2, TVOC, status) instead, which is the baseline expectation for a no-argument tool.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('Read'), resource ('air quality sensors'), and target metrics (CO2 and TVOC), making the tool's function unambiguous. Among many read_* siblings, this clearly identifies the tool as the air-quality-specific one without needing to read the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives strong operational guidance about warm-up time and how to interpret 0 values, which helps the agent know when readings are valid. However, it does not explicitly mention when to prefer read_air_quality over read_all_sensors or other alternatives, so tool-selection guidance is only implied.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
read_all_sensorsA
Read all environmental sensors at once.
Returns: Complete environmental data including temperature, humidity, pressure, CO2, and TVOC
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| co2 | No | CO2 in ppm |
| tvoc | No | TVOC in ppb |
| humidity | No | Humidity in % |
| pressure | No | Pressure in hPa |
| timestamp | No | |
| temperature | No | Temperature in Celsius |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It explicitly states the return behavior and the included readings, and the verb 'Read' implies a non-mutating operation. It does not mention connection prerequisites or failure behavior, but for a zero-argument read tool this is adequate.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is very concise, front-loads the action, and uses a short return list to add value without filler. Every sentence contributes useful information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
This is a simple, no-argument read operation with an output schema present. The description sufficiently explains the purpose and expected returned data, so an agent can select and invoke it correctly without additional context.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
There are zero parameters, so schema coverage is complete and no parameter documentation is needed. The description adds no parameter meaning, but none is required.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb and resource: 'Read all environmental sensors at once.' It clearly lists the measurement types and differentiates itself from the sibling single-sensor read tools such as read_temperature and read_humidity.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
'At once' clearly implies this is the right tool when the agent needs a complete environmental snapshot rather than individual readings. It does not explicitly name alternatives or exclusion conditions, but the context makes the intended use clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
read_color_sensorA
Read the color sensor (RGB + Clear channel).
Returns: RGBC values from the color sensor
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description must carry the full behavioral burden. It clearly indicates a read-only operation and states that RGBC values are returned. However, it does not disclose potential failure modes, whether a device connection is required, or any other runtime behavior beyond the basic return.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is very short and front-loaded with the core action. It loses one point because 'RGB + Clear channel' and 'RGBC values' are slightly redundant, though this is minor given the overall brevity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description is minimally complete for a zero-parameter read: it states what is read and that RGBC values are returned. However, there is no output schema, so the return format (ordering, ranges, units, types) is left vague, and no context is given about connection requirements or how this relates to sibling tools like read_all_sensors.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters, so the baseline is 4. The description does not need to elaborate on parameters, and no parameter documentation is missing. It correctly stays silent on parameters.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description identifies a specific verb ('Read'), a clear resource ('the color sensor'), and the exact data involved ('RGB + Clear channel'). This distinguishes it clearly from sibling sensor-reading tools like read_temperature or read_humidity, even without naming them.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied: use this tool when you need color sensor values. However, there is no explicit guidance on when not to use it, no mention of prerequisites like a connected device, and no differentiation from the sibling read_all_sensors which likely also returns color data.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
read_euler_anglesB
Read Euler angles (roll, pitch, yaw) in degrees.
Returns: Roll, pitch, and yaw angles in degrees
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden of behavioral disclosure. The verb 'Read' clearly implies a non-mutating operation and the return values are specified, but there is no mention of prerequisites like device connectivity, error behavior, or whether the reported values are live or cached.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The first sentence is concise and informative, but the 'Returns' line largely repeats the same information already provided in the first sentence. The description is short, yet the redundancy means the second sentence does not fully earn its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a no-argument read operation, the description gives the essential return information and units. However, it omits any usage context, such as whether a connected device is required, and it does not describe possible error conditions, leaving some uncertainty for an agent selecting or invoking the tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters, so there is no parameter semantics for the description to add. The baseline of 4 applies because no parameters exist and no parameter documentation is needed.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Read'), the resource ('Euler angles'), and the specific components ('roll, pitch, yaw') with units. It is specific enough to be distinguished from most siblings like read_temperature or read_quaternion, though it does not explicitly differentiate itself from read_orientation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is given about when to use this tool versus alternatives such as read_orientation or read_quaternion, and no conditions or exclusions are mentioned. The description only states what the tool does, leaving usage decisions entirely to the agent.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
read_headingA
Read compass heading in degrees (0-360).
Returns: Compass heading in degrees
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the burden of behavioral disclosure. It does state that the tool returns a compass heading in degrees, providing basic expected-output context, but it does not mention potential error conditions, blocking behavior, or sensor availability.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is very short and front-loaded with the core action and result. The Returns line is slightly redundant with the first sentence, but the overall structure is efficient and easy to parse.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter read operation, the description provides the essential information: what is read, the unit, and the return value. It does not cover failure behavior or alternative sensor selection, but the tool's simplicity keeps this from being a major gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters, so the empty schema is already fully self-explanatory. The baseline for zero-parameter tools is 4, and the description does not need to add parameter details.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific action ('Read') on a specific resource ('compass heading') with units and range (degrees 0-360). This clearly differentiates it from sibling sensor-read tools like read_temperature or read_humidity.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance about when to use this tool versus alternatives such as read_orientation, read_all_sensors, or other sensor reads. No exclusions or conditions are given, so the agent must infer usage from the name alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
read_humidityA
Read the current humidity from the Thingy device.
Returns: Relative humidity in percentage
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It communicates that the operation is a read (implying no side effects) and specifies the return unit (percentage). Minor gaps remain, such as not mentioning whether a connection is required, but for a simple read operation this is adequate.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two short sentences with no filler. The core action is front-loaded, and the return value is stated clearly. Every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter, no-output-schema tool, the description is complete: it names the source device, the operation, and the return format. An agent has enough information to invoke this tool correctly without additional context.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters, so the input schema is empty and there are no parameter semantics to explain. The description adds useful context by clarifying the return value's unit, which is more than required for a parameterless tool. Baseline 4 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Read') and resource ('humidity from the Thingy device'), clearly distinguishing it from sibling sensor tools like read_temperature and read_pressure. It also specifies the return format ('Relative humidity in percentage'), making the tool's purpose unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description clearly implies usage when humidity is needed, but it does not explicitly state when to prefer this tool over alternatives or mention any exclusions/preconditions. Sibling tools like read_all_sensors could also provide humidity, so some guidance on when to use this specific tool would improve the score.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
read_light_intensityA
Read light intensity (lux) from the ambient light sensor.
Returns: Light intensity in lux
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden. It makes the non-mutating read behavior clear and reports the return quantity and unit. It does not mention error handling or sensor unavailability, but these are minor gaps for a zero-parameter read.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is brief and front-loaded, with a single purpose statement and a clear return-value line. Every sentence contributes essential information, and there is no wasted wording.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description fully identifies what is read, the sensor source, and the return value with units. It is essentially complete for a trivial zero-parameter read, though a note about failure behavior could make it marginally more robust.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
There are no parameters, so the schema provides full coverage by definition. The description adds no parameter semantics, but none are needed. The baseline of 4 for zero-parameter tools is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the specific verb 'Read', the resource being read ('light intensity from the ambient light sensor'), and the unit ('lux'). This distinguishes it from sibling sensor-reading tools like read_temperature or read_humidity.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The usage context is implied: use this tool when ambient light intensity in lux is needed. However, it does not explicitly mention when not to use it or suggest alternatives such as read_all_sensors for a broader sensor read.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
read_orientationB
Read device orientation (portrait, landscape, etc.).
Returns: Current device orientation
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full behavioral burden. It indicates a read operation and notes that it returns the current device orientation, but it does not disclose potential sensor dependencies, error behavior, or whether this is safe/non-mutating beyond the word 'Read'.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is short and front-loaded, immediately stating the tool's purpose. The 'Returns' line is slightly redundant with the first sentence but adds clarity about the output, and there is no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple no-parameter tool, the description is mostly sufficient, but the presence of closely related siblings such as read_quaternion and read_euler_angles creates ambiguity. The description does not clarify whether 'orientation' means high-level screen/device orientation or more detailed sensor orientation data.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters and the schema description coverage is 100%, so there are no parameter semantics for the description to clarify. The baseline for zero-parameter tools is 4, and the description correctly adds no irrelevant parameter guidance.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states the tool's function with a specific verb and resource: 'Read device orientation (portrait, landscape, etc.)'. However, it does not differentiate this from sibling tools like read_quaternion, read_euler_angles, or read_heading, which also relate to orientation data.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to use this tool instead of alternatives. The sibling list includes read_all_sensors, read_quaternion, and read_euler_angles, but the description does not state which tool is appropriate for a given use case, leaving the agent to infer.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
read_pressureA
Read the current atmospheric pressure from the Thingy device.
Returns: Pressure in hectopascals (hPa)
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It does disclose that the operation is read-only and that the return value is pressure in hPa, which is useful. It does not mention connection requirements, failure behavior, or the exact return shape.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely concise, front-loads the action, and adds a clear 'Returns' line for the unit. Every sentence earns its place with no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter read tool, the description gives the key information: what is read and the unit of the result. It is nearly complete, though it omits whether a prior connection is required and what happens if the device is unavailable.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters, so there is no parameter documentation burden. The description correctly avoids inventing pseudo-parameters and the schema coverage is trivially complete.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Read') and resource ('atmospheric pressure from the Thingy device'), clearly identifying what the tool does and distinguishing it from sibling sensor-read tools like read_temperature or read_humidity.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied: call this tool when the current atmospheric pressure is needed. However, there is no explicit guidance about when to prefer read_all_sensors instead, nor any stated prerequisite such as having a connected device.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
read_quaternionA
Read quaternion orientation data (w, x, y, z).
Quaternions provide rotation information without gimbal lock issues.
Returns: Quaternion components (w, x, y, z)
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the burden of explaining behavior. It does disclose that the tool reads data and returns quaternion components (w, x, y, z), which is useful. However, it does not mention error behavior, coordinate frame, normalization, or any side-effect assumptions beyond the 'read' verb.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise and front-loaded with the essential action and result. The opening sentence conveys the core information; the follow-up about gimbal lock adds useful context. The trailing 'Returns' block is slightly redundant with the parenthetical in the first sentence, so it is not maximally concise.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter tool with no output schema, the description adequately states the return format. However, it does not clarify how this tool relates to read_orientation or read_euler_angles, and it lacks details such as whether the quaternion is normalized or the coordinate conventions used. This leaves some ambiguity for an agent deciding among orientation-related siblings.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters, so parameter semantics are minimally relevant. The schema already covers this completely, and the description properly focuses on the return value instead of nonexistent inputs.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states a specific action ('Read quaternion orientation data') and the exact resource/components returned (w, x, y, z). It distinguishes itself from siblings by specifying 'quaternion' rather than Euler angles, heading, or orientation in general, and adds clarifying context about gimbal lock.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no explicit guidance about when to use this tool versus alternatives such as read_euler_angles, read_orientation, or read_heading. The gimbal-lock statement implies a benefit of quaternions but does not tell the agent when to choose this tool over sibling tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
read_raw_motionA
Read raw accelerometer, gyroscope, and magnetometer data.
Provides low-level motion sensor data for custom processing.
Returns: Raw 3-axis data for accelerometer, gyroscope, and magnetometer
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral disclosure burden. It does disclose the expected return content (raw 3-axis data for three sensors) and characterizes the data as low-level. However, it omits potential behavioral details such as requiring an active device connection, units, sampling behavior, or error conditions, so it is only moderately transparent.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and front-loaded: it states the core action first, then the purpose, then the return content. No sentence is wasted, and the Returns section is clearly structured.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple zero-parameter read tool with no output schema, the description adequately explains what the tool returns and why an agent would use it. It falls slightly short of a 5 because it omits specifics like units, exact data shape, or whether the reading is a one-shot sample, but it remains sufficient for correct selection and invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters and 100% schema coverage, so the baseline is 4. The description adds no parameter-specific information, but none is needed since there are no parameters to document.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states a specific action and resource: reading raw accelerometer, gyroscope, and magnetometer data. It also distinguishes itself from processed-orientation siblings by emphasizing 'raw' and 'low-level,' so an agent can separate it from read_quaternion, read_euler_angles, and read_orientation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase 'for custom processing' gives clear context for when to use this tool versus higher-level sensor interpretation tools. It does not explicitly name alternatives or state when not to use it, but the contrast with processed orientation tools is implied strongly enough.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
read_step_countA
Read the step counter from the motion sensor.
Returns: Number of steps counted
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the burden of behavioral disclosure. 'Read' makes the non-destructive nature clear, and 'Number of steps counted' states the return. It does not elaborate on whether this reads a live sensor value, cached data, or what happens if the sensor is unavailable, but for a simple read tool this is minimally adequate.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely concise and front-loaded. It states the action and the return value in two short clauses with no filler or repetition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 0-parameter, no-output-schema tool, the description is mostly complete: it identifies the source (motion sensor) and the return value (number of steps). It could add minor context such as units or whether the value is cumulative, but these are not essential for invoking the tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters, so the baseline is 4 per the rubric. The description correctly omits parameter details because there are none to explain.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states a specific verb and resource: 'Read the step counter from the motion sensor.' This distinguishes it from the sibling sensor tools (e.g., read_temperature, read_humidity) because it uniquely targets step count, and the return value is specified.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage: call this tool when the step count is needed from the motion sensor. However, it does not explicitly state when to prefer this tool over alternatives like read_all_sensors, nor does it mention any exclusions or prerequisites.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
read_tap_eventA
Wait for and detect tap events on the device.
This is an event-based sensor - it will wait up to timeout seconds for a tap.
Args: timeout: Maximum seconds to wait for a tap event (default: 10)
Returns: Tap event details including type (single/double) and direction
| Name | Required | Description | Default |
|---|---|---|---|
| timeout | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full behavioral disclosure burden. It does disclose the blocking wait behavior, the timeout, and the return details (type and direction). The main gap is that it does not state what happens when no tap occurs within the timeout (null, error, empty result), which is a key behavioral trait for an event-waiting tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise and well-structured, with a front-loaded purpose statement followed by a short explanatory note and clear Args/Returns sections. Every sentence earns its place, and there is no redundant filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-parameter tool with no output schema, the description covers purpose, behavior, parameter semantics, and return values. However, it is incomplete regarding the timeout outcome, which is essential information for an agent deciding whether to handle a failure or retry. This gap makes the definition not fully complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema has no description for the timeout parameter (0% coverage), so the description fully compensates by explaining timeout as 'Maximum seconds to wait for a tap event' and confirming the default. This adds clear operational meaning beyond the bare integer type in the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states what the tool does with a specific verb ('Wait for and detect') and resource ('tap events on the device'). The 'event-based sensor' characterization distinguishes it from the sibling read_* tools, which return current sensor values rather than waiting for events.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear context by explicitly noting this is an event-based sensor that waits up to timeout seconds, implying it should be used when a blocking wait for a tap is desired. However, it does not explicitly name alternatives or state when not to use it, so there is no exclusion guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
read_temperatureA
Read the current temperature from the Thingy device.
Returns: Temperature in Celsius
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden of behavioral disclosure. It does state the action and return unit (Celsius), but it does not mention whether the device must already be connected, how errors are reported, or whether this is a safe read-only operation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is exceptionally concise: one clear sentence stating the action and a one-line return format. There is no filler, and the key information is front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter, read-only sensor tool with no output schema, the description adequately explains what is returned. It is slightly incomplete because it does not mention connection status requirements, but the simplicity of the tool keeps this gap minor.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters, so the input schema is empty and the baseline is 4. The description adds relevant context by specifying the output is in Celsius, which is useful even though no parameter semantics are needed.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'read' and the specific resource 'current temperature from the Thingy device.' This unambiguously distinguishes it from sibling sensor tools like read_humidity or read_pressure, so an agent can identify its purpose immediately.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives such as read_all_sensors, nor does it mention prerequisites like having a connected device. Usage context is only implied by the tool name and description.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
scan_devicesA
Scan for nearby Nordic Thingy:52 devices.
Args: timeout: Scan duration in seconds (default: 10.0, accepts both int and float)
Returns: List of discovered Thingy devices with their addresses, names, and signal strength
| Name | Required | Description | Default |
|---|---|---|---|
| timeout | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden of behavioral disclosure. It does convey that a scan lasts for a configurable timeout and returns discovered addresses, names, and signal strength, which is useful. However, it does not explicitly say that the scan is read-only, does not connect to devices, or what happens when no devices are found. For a benign scan tool this is adequate but not fully transparent.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is short, front-loaded with the main purpose, and uses a clear Args/Returns structure. Every sentence adds useful information and there is no fluff or repetition beyond the acceptable restatement of parameter type compatibility.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple single-parameter tool with an output schema, the description covers the essential aspects: what it scans, how long it scans, and what it returns. It could also mention empty-result behavior or that it is a one-shot discovery scan, but given the low complexity and presence of an output schema, the description is nearly complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema has 0% description coverage, but the description fully compensates for the single parameter: timeout is explained as scan duration in seconds, with a default of 10.0 and support for both int and float. This adds real meaning beyond the bare schema property title, type, and default.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: 'Scan for nearby Nordic Thingy:52 devices.' It clearly distinguishes itself from the sibling read/connect/control tools, and the returns line further specifies what the tool produces. This is unambiguous and searchable.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description makes the core use case clear: discover nearby Thingy:52 devices. Since there is no alternative scanning tool among the siblings, the context is sufficient. However, it does not explicitly state when NOT to use it, mention prerequisites like available Bluetooth, or describe the workflow of scanning before connecting. This is clear context but lacks explicit exclusion guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set_led_breatheA
Create a breathing effect with the LED.
Args: color: Color name (default: "blue") intensity: Maximum brightness 0-100 (default: 100) delay: Breathing cycle duration in milliseconds (default: 1000)
Returns: Status message
| Name | Required | Description | Default |
|---|---|---|---|
| color | No | blue | |
| delay | No | ||
| intensity | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does disclose the effect, parameter semantics, defaults, and a status return. However, it does not state whether the effect persists and must be stopped by turn_off_led, whether a connection is required, or how it interacts with an existing LED state.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a compact one-sentence summary followed by a clearly labeled Args/Returns structure. There is no filler, and the most important information is front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple three-parameter hardware effect command, the description covers the action, all parameters, defaults, and return shape. Minor gaps remain—such as allowed color names and the effect's persistence/termination behavior—but these do not prevent a competent agent from invoking it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, and the description fully compensates by explaining each parameter with units or ranges: color name, maximum brightness 0-100, and cycle duration in milliseconds, including defaults. This adds meaning well beyond the raw schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: 'Create a breathing effect with the LED.' It is immediately distinguishable from siblings such as set_led_color and turn_off_led because the effect is explicitly named as 'breathing.'
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The intended use case—initiating a breathing LED animation—is implied by the effect name and description, but no explicit guidance is given about when to prefer this over set_led_color or when not to use it. There are no exclusions or alternative references.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set_led_colorA
Set the LED to a specific color.
You can either specify a color name (e.g., "red", "blue", "green", "purple") or provide RGB values directly.
Args: color: Named color (e.g., "red", "blue", "green", "purple", "warm_white") red: Red value 0-255 (used if color not specified) green: Green value 0-255 (used if color not specified) blue: Blue value 0-255 (used if color not specified) intensity: Brightness percentage 0-100 (default: 100)
Returns: Status message
| Name | Required | Description | Default |
|---|---|---|---|
| red | No | ||
| blue | No | ||
| color | No | ||
| green | No | ||
| intensity | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full behavioral burden. It does disclose the core mutation, supported color modes, intensity range/default, and that a status message is returned. However, it does not mention prerequisites like a connected device, error behavior for invalid colors, or what happens if the tool is called with no arguments or conflicting color/RGB values.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well structured: purpose is stated first, then the two input modes, then a compact Args list, and finally a return note. Every line adds useful information without filler or unnecessary repetition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers all parameters and notes the return value, which is adequate for a simple setter. However, it leaves important edge cases unresolved: all five parameters are optional in the schema, and the description does not clarify what happens with no arguments, invalid colors, or unconnected devices. These gaps matter for a hardware LED tool, even with an output schema present.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description is the only source of parameter meaning. It fully compensates by explaining allowed ranges for RGB (0-255), brightness percentage (0-100), the intensity default, and the conditional rule that RGB values are used when a color name is not specified. This gives the agent genuine operational semantics beyond the bare schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states a specific action and resource: 'Set the LED to a specific color.' It also explains the two input modes (named color or RGB). It is distinct from obvious siblings like turn_off_led, but it does not explicitly contrast itself with set_led_breathe, so sibling differentiation is incomplete.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives such as set_led_breathe or turn_off_led. It explains how to specify color values, but does not state conditions, prerequisites, or exclusions that would help an agent select between sibling tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
turn_off_ledA
Turn off the LED.
Returns: Status message
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description clearly indicates the behavioral effect (LED turned off) and notes the return value is a status message. With no annotations, this is a transparent description for a simple hardware command, though it does not elaborate on whether it stops active effects like breathing.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely concise: a short imperative sentence followed by a return value note. Every part is useful and directly relevant, with no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a no-argument command, the description is nearly complete: it states the action and return type. Some minor context is missing, such as whether this cancels active LED effects from sibling tools, but the output schema likely covers the return details.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters, which earns the baseline score of 4. The description has no parameter information to add because there are no parameters to document.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Turn off the LED') with a specific verb and resource. It is immediately distinguishable from siblings like set_led_color and set_led_breathe, which are about setting modes rather than turning off.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied by the action: use this when the LED should be off. However, there is no explicit guidance about when to prefer this over sibling tools or any mention of conditions, so the guidance is minimal but not misleading.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
25 tool updates
v1.0.0- First observed
beep - First observed
cancel_reconnect_attempts - First observed
configure_auto_reconnect - First observed
connect_device - First observed
disconnect_device - First observed
get_device_status - First observed
play_sound - First observed
read_air_quality - First observed
read_all_sensors - First observed
read_color_sensor - First observed
read_euler_angles - First observed
read_heading - First observed
read_humidity - First observed
read_light_intensity - First observed
read_orientation - First observed
read_pressure - First observed
read_quaternion - First observed
read_raw_motion - First observed
read_step_count - First observed
read_tap_event - First observed
read_temperature - First observed
scan_devices - First observed
set_led_breathe - First observed
set_led_color - First observed
turn_off_led
TDQS
Scored across 25 tools
Each sensor read maps to a distinct physical output, and connection, LED, and sound tools are clearly separated. Minor overlap exists where read_all_sensors duplicates individual sensor reads and beep is effectively play_sound with a fixed preset, but the descriptions disambiguate these cases adequately.
The naming is mostly consistent: read_* for sensor data, set_* for LED actions, and connect/disconnect/scan for device lifecycle. Minor deviations such as get_device_status using get instead of read, turn_off_led instead of set_led_off, and the bare beep prevent a perfect score.
At 25 tools, the server sits at the heavy end and feels somewhat bulky for an MCP surface, though the count is largely justified by the device's many distinct sensors and peripherals. Convenience tools like beep and read_all_sensors add mild redundancy and could be consolidated without losing functionality.
The server covers connection management, environmental and motion sensing, LED control, and preset sound playback well. However, the Nordic Thingy:52's physical button is not exposed, and the description mentions frequency-based sound with volume control but no such tool exists, leaving notable device capabilities unimplemented.
Maintenance
Related MCP Connectors
MCP server for AI dialogue using various LLM models via AceDataCloud
MCP server unifying ERPs, CRMs, APIs and knowledge base for Claude, ChatGPT and Gemini.
Nifty's MCP server — exposes tasks, projects, messages, and files as tools for AI agents.
- UnifAPIOAuthcom.unifapi
Hosted MCP server for live public-data APIs and Skills for AI agents.
Related MCP Servers
- AlicenseNot gradedqualityCmaintenanceConnect your AI workflows to the ThingsBoard IoT Platform through this MCP server. Enables LLMs to query device telemetry, manage IoT entities (devices, assets, customers), and analyze sensor data - all through natural language. Perfect for building AI-powered IoT monitoring, predictive maintenance,98Apache 2.0
- AlicenseBqualityNot gradedmaintenanceAn MCP server that bridges the physical world and AI models by enabling natural language control of IoT hardware via the MQTT protocol. It supports real-time device monitoring, command publishing, and response handling for seamless integration between AI clients and physical devices.3MIT
- AlicenseNot gradedqualityDmaintenanceA powerful MCP server that enables AI assistants to discover, commission, and control Matter-compatible smart home devices through a standardized interface.16 npm8MIT
- AlicenseAqualityDmaintenanceMCP server that gives AI agents direct access to IoT devices via the jettyd platform, enabling control and monitoring of ESP32 devices through natural language.535 npmMIT