tempstick-mcp
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., "@tempstick-mcpWhat's my walk-in freezer at right now?"
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.
tempstick-mcp
mcp-name: io.github.obseard223/tempstick-mcp
Temp Stick MCP server by OpenPandora — let your AI assistant check your freezer and temperature sensors.
New to this? Follow the plain-words setup guide — five minutes, short steps, no jargon.
tempstick-mcp is a free, open-source Model Context Protocol (MCP) server for Temp Stick WiFi temperature sensors by Ideal Sciences — a freezer monitor and temperature sensor reader for your AI assistant. It was built for restaurant kitchens (nobody wants to discover a warm walk-in at 6 AM), and it works anywhere a Temp Stick watches something that matters: freezers, fridges, server rooms, greenhouses, homes. Connect it to Claude, Cursor, or any MCP client and just ask:
"What's my freezer at right now?" "Has the walk-in been above 40°F today?" "Is any sensor offline or low on battery?"
The server answers with live data from the official Temp Stick API: temperature (Celsius and Fahrenheit), humidity, battery level, offline status, alert definitions, and recent-reading summaries.
Zero dependencies. Pure Python 3 standard library — no
pip installof anything. Clone, add your key, go.Read-only. It cannot change a setting, a threshold, or an alert on your account.
Private by design. Your API key stays on your machine in an environment variable. The server talks only to
tempstickapi.com.
Tools
Tool | What it returns |
| Every sensor your key can see, with its latest temperature, humidity, battery and offline status. |
| The latest reading for one sensor (by |
| One-call check for a sensor: latest reading + recent history summary + alert definitions together. Named for the classic freezer use case; works for any sensor. |
| A summary of a sensor's recent readings: count, min / max / average temperature, first and last reading times. |
| The account's alert definitions and whether they are triggered. |
A command-line twin is included for terminal checks and cron jobs:
tempstick.py list-sensors, latest --sensor <ID>, history --sensor <ID>,
alerts, freezer --sensor <ID>.
Related MCP server: Mender MCP Server
Get your API key
Sign in at mytempstick.com.
Open the Account Page.
Select the Developers tab.
Click Show Key to reveal your API key.
(Per Temp Stick's official developer documentation.)
Install
git clone https://github.com/obseard223/tempstick-mcpClaude Desktop
Add to your claude_desktop_config.json (macOS:
~/Library/Application Support/Claude/claude_desktop_config.json;
Windows: %APPDATA%\Claude\claude_desktop_config.json):
{
"mcpServers": {
"tempstick": {
"command": "python3",
"args": ["/path/to/tempstick-mcp/server.py"],
"env": { "TEMPSTICK_API_KEY": "paste-your-key-here" }
}
}
}Restart Claude Desktop, then ask: "List my Temp Stick sensors."
Claude Code
claude mcp add tempstick \
--env TEMPSTICK_API_KEY=paste-your-key-here \
-- python3 /path/to/tempstick-mcp/server.pyCursor
Add to .cursor/mcp.json in your project (or the global MCP config):
{
"mcpServers": {
"tempstick": {
"command": "python3",
"args": ["/path/to/tempstick-mcp/server.py"],
"env": { "TEMPSTICK_API_KEY": "paste-your-key-here" }
}
}
}On Windows, use python instead of python3 (and a Windows-style path).
Test it offline
No key, no network:
python3 selftest.py # full end-to-end test against a stub API
python3 tempstick.py selftest # parsing/unit checks onlyBoth should end in PASS.
Notes on the API
A few behaviors of the Temp Stick API this server handles for you:
Errors come back as HTTP 200 with a JSON envelope (
type: "error"), so the server checks the envelope and surfaces the real message — e.g.Invalid X-API-KEY.Temperatures arrive in Celsius; every reading is also reported in Fahrenheit.
The API host rejects non-browser user agents, so the server sends a browser user agent.
Status
Community project, built against the official Temp Stick API. It is not
affiliated with or endorsed by Ideal Sciences or Temp Stick. The parsing
and protocol layers are covered by offline fixture tests (see
selftest.py); readings and alerts shapes beyond the documented fields
are parsed defensively.
Built by OpenPandora
Built by OpenPandora — AI tools for independent restaurants. This is the same sensor watch that keeps an eye on our pilot kitchen's walk-in freezer, released free because every operator with a Temp Stick should be able to ask their AI about it.
License
MIT — see LICENSE.
Available Tools
5 toolsget_alertsA
List the alert definitions and state for the account (thresholds, delivery channels, whether triggered).
| 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 of behavioral disclosure. It clarifies the account-level scope and the kind of information returned (thresholds, delivery channels, triggered state), but it does not mention permissions, pagination, rate limits, or other operational behavior. This is adequate for a simple read-only listing but not rich.
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 single, front-loaded sentence with no filler. Every element ('alert definitions', 'state', and the parenthetical examples) contributes useful information without 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 tool with no output schema, the description gives enough detail about what will be returned (thresholds, delivery channels, triggered status) to set expectations. It does not explain return formatting or pagination, but no output schema exists and the listing scope is clear, so it 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 tool has zero parameters, and the schema description coverage is 100%, so there is no parameter semantics burden. The baseline for zero parameters is 4, and nothing in the description creates confusion or contradicts the empty 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 uses a specific verb ('List') and a specific resource ('alert definitions and state for the account'), making it immediately clear what the tool retrieves. It is easily distinguished from siblings like list_sensors, get_sensor, get_freezer_status, and get_readings_history because none of those deal with alerts.
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 is implied by 'List the alert definitions and state for the account', but the description does not explicitly state when to use this tool versus alternatives or when not to use it. For a zero-parameter listing tool the context is fairly obvious, yet no explicit guidance or exclusions are provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_freezer_statusA
One-call status check for a sensor (named for the classic freezer use case): latest reading, recent history summary and the account's alert definitions together, so the assistant can answer 'is it OK?' in a single call.
| Name | Required | Description | Default |
|---|---|---|---|
| sensor_id | Yes | Sensor ID, as returned by list_sensors. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden; it does disclose that this is a composite read that fans out over three data sets in one call, which is genuinely useful. However, it says nothing about permissions, error behavior for an unknown sensor_id, how much history the 'recent history summary' covers, or whether alerts are the account's global definitions versus sensor-scoped.
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?
One sentence, front-loaded with the core action and ending with the payoff ('answer in a single call'). It is dense but slightly comma-heavy; the parenthetical justification for the naming is defensible but is the least essential clause.
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?
With no output schema and no annotations, the description compensates well by naming the three components returned. What is missing is scope detail an agent would want: what 'recent' means, alert scoping, and failure behavior for an invalid sensor_id.
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 coverage is 100% and the single parameter is documented as 'Sensor ID, as returned by list_sensors,' so the schema does the work. The description adds nothing about sensor_id beyond the general framing, so the baseline 3 applies.
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?
States a specific verb ('status check') and resource ('a sensor') and then enumerates exactly what is returned: latest reading, recent history summary, and alert definitions. This makes it distinguishable from the sibling tools (get_sensor, get_readings_history, get_alerts) because it explicitly describes itself as the aggregation of those pieces, and the parenthetical explains the otherwise-puzzling 'freezer' naming.
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 "so the assistant can answer 'is it OK?' in a single call" gives a clear usage context and implicitly routes the agent here instead of chaining get_sensor + get_readings_history + get_alerts. It stops short of explicit when-not conditions (e.g., when you need full history, use get_readings_history).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_readings_historyA
Summarize a sensor's recent readings: count, min, max and average temperature (Fahrenheit), and the first and last reading times.
| Name | Required | Description | Default |
|---|---|---|---|
| sensor_id | Yes | Sensor ID, as returned by list_sensors. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It does disclose the return contents (count, min, max, average in Fahrenheit, first/last times), which is meaningful transparency, but it never defines the 'recent' window, says nothing about read-only safety or permissions, and doesn't clarify whether raw history is retrievable at all.
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?
One sentence, front-loaded with the verb and resource, with the remaining clauses devoted to enumerating return fields that are otherwise undocumented because there is no output schema. Nothing is redundant.
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?
Because there is no output schema, the description correctly spells out return values, and for a one-parameter read tool that covers most needs. The gaps are the undefined 'recent' time window and the lack of any behavioral note (retention, truncation, permissions), which matter for a tool whose name promises history.
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 is a single parameter with 100% schema description coverage; the schema already explains sensor_id and points to list_sensors. The description adds no further meaning about the parameter (e.g., format or error behavior for unknown IDs), so the baseline of 3 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 names a specific action (summarize) applied to a specific resource (a sensor's recent readings) and enumerates the returned fields (count, min/max/avg, first/last times), so an agent knows exactly what it gets. It does not explicitly differentiate itself from siblings like get_sensor or get_freezer_status, and the 'history' in the name sits oddly against a summary-only result, but the core purpose is 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?
Usage is only implied: the summary framing suggests this is for aggregate statistics rather than raw data or current status, which hints at when to prefer it over get_sensor. There is no explicit when/when-not guidance, no named alternative, and 'recent' is never given a time window, so an agent must guess at the boundary conditions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_sensorA
Get the latest reading for one sensor: temperature (Celsius and Fahrenheit), humidity, last check-in, battery level and offline status.
| Name | Required | Description | Default |
|---|---|---|---|
| sensor_id | Yes | Sensor ID, as returned by list_sensors. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden, and it does disclose the return payload (temperature in C and F, humidity, last check-in, battery, offline flag) plus the read-only nature implied by "Get." It says nothing about behavior for unknown sensor IDs, stale data, or unit/format details beyond the field list.
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?
A single sentence that front-loads the verb and resource before the field enumeration. Every clause earns its place 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 one-parameter read tool with a fully documented schema, the description is nearly sufficient, and the field list compensates for the absent output schema. Minor gaps remain around error behavior for invalid IDs and how fresh "latest" data is.
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 coverage is 100% and the sensor_id description already points at list_sensors as the source of valid IDs. The description adds no additional parameter meaning, so the baseline 3 applies.
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 gives a specific verb and resource ("Get the latest reading for one sensor") and enumerates the returned fields, so the agent knows exactly what comes back. It does not explicitly name get_readings_history as the alternative for historical data, so the split with that sibling must be inferred from the word "latest."
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?
"Latest reading" implies a current-state lookup rather than a historical query, which gently signals when to use it over get_readings_history, but the description never states the condition explicitly nor excludes any case. The single-use context is left to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_sensorsA
List the Temp Stick sensors visible to your API key, with each sensor's latest temperature, humidity, battery level and offline status.
| 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, and it does disclose the shape of the data returned (temperature, humidity, battery, offline status) plus the API-key visibility scope. It omits pagination, ordering, and rate-limit behavior, which keeps it short of 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?
A single sentence that front-loads the action and resource, then the return contents. No filler or redundancy.
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?
With no parameters and no output schema, the description is nearly sufficient: it explains what is returned and the visibility scope. Only minor operational details (ordering, pagination) are absent, which is a small gap for a simple zero-arg list 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 takes zero parameters and has an empty object schema, so there is nothing to disambiguate. Baseline 4 applies.
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?
States a specific verb and resource ('List the Temp Stick sensors') and scopes it to what the API key can see. It also names the returned fields, which makes it distinguishable from get_sensor, though it doesn't explicitly contrast with that sibling.
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?
Use is implied by 'list the sensors visible to your API key', which suggests a discovery/overview role. There is no explicit statement of when to prefer get_sensor or get_freezer_status over this tool, so an agent must infer the routing.
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.
5 tool updates
v0.1.1- First observed
get_alerts - First observed
get_freezer_status - First observed
get_readings_history - First observed
get_sensor - First observed
list_sensors
TDQS
Scored across 5 tools
Core tools (list_sensors, get_sensor, get_readings_history, get_alerts) target distinct resources, but get_freezer_status overlaps with three of them by bundling latest reading, history summary, and alerts. Its composite 'is it OK?' purpose is clearly described, so an agent can usually distinguish when to use it.
All tool names use a consistent snake_case verb_noun pattern: list_sensors, get_sensor, get_readings_history, get_alerts, and get_freezer_status. The singular/plural distinction in list_sensors and get_sensor is predictable and readable.
Five tools is well-scoped for a sensor monitoring integration. Each tool has a plausible role, and the set avoids both thinness and bloat.
The surface covers the main read-only workflows: listing sensors, fetching latest readings, summarizing history, checking alerts, and a one-call status helper. Minor gaps exist around alert state changes or sensor configuration, but these may be outside the API's intended scope.
Maintenance
Related MCP Connectors
Read-only banking and personal finance for AI agents: accounts, transactions, spending, budgets.
Ask your AI about your Airbnb and VRBO listings, bookings, guest messages and reviews. Read-only.
Home energy for AI assistants: live Power flow, Energy history, solar forecast, and device control.
Read-only access to your VortexIQ store data: audits, KPIs, alerts, Brand DNA, reports, Ask VIQ.
Related MCP Servers
- AlicenseCqualityFmaintenanceEnables AI assistants to control SwitchBot devices, providing functionalities like device management, scene execution, and sensor information monitoring through the SwitchBot API.37ISC
- AlicenseNot gradedqualityFmaintenanceEnables AI assistants to interact with Mender IoT platform for device management, deployment monitoring, and fleet analysis through natural language commands. Provides read-only access to device status, deployment logs, releases, and system monitoring capabilities.2MIT
- FlicenseNot gradedqualityFmaintenanceEnables AI assistants to read sensor data from IoT devices and dispatch data collection tasks through a unified interface supporting multiple protocols.17-
- AlicenseAqualityBmaintenanceEnables read-only access to AlertOps incident alerting and on-call data, including alerts, users, groups, integrations, and schedules, for AI assistants.11Apache 2.0