Skip to main content
Glama

thermoworks_get_live_readings

Retrieve real-time temperature data from ThermoWorks BBQ probes to monitor your cook. Specify a device or get readings from all connected probes.

Instructions

Get current temperature readings from your ThermoWorks devices.

Requires authentication first via thermoworks_authenticate.

Args:

  • device_serial: Serial number of specific device (optional, defaults to all devices)

  • response_format: 'markdown' or 'json'

Returns: Current probe temperatures, alarm settings, and timestamps.

Examples:

  • "What are my current temperatures?" -> Gets all device readings

  • "Show me the Signals readings" -> Specify device_serial

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
device_serialNoSerial number of specific device to query. If not provided, returns readings from all devices.
response_formatNoOutput formatmarkdown

Implementation Reference

  • Main handler function for thermoworks_get_live_readings tool. Fetches live temperature readings from authenticated ThermoWorks devices, handles specific device or all devices, supports JSON/markdown output, includes alarms and timestamps.
    async (params: GetLiveReadingsInput) => { try { const client = getThermoWorksClient(); if (!client.isAuthenticated()) { return { isError: true, content: [ { type: "text", text: "Not authenticated. Use `thermoworks_authenticate` first.", }, ], }; } let readings; if (params.device_serial) { const reading = await client.getDeviceReadings(params.device_serial); readings = reading ? [reading] : []; } else { readings = await client.getAllReadings(); } if (readings.length === 0) { return { content: [ { type: "text", text: "No readings available. Make sure your devices are powered on and connected.", }, ], }; } if (params.response_format === "json") { return { content: [{ type: "text", text: JSON.stringify(readings, null, 2) }], structuredContent: { readings }, }; } let markdown = `## 🌡️ Live Temperature Readings\n\n`; markdown += `*Updated: ${new Date().toLocaleString()}*\n\n`; for (const reading of readings) { markdown += `### ${reading.name} (${reading.serial})\n\n`; for (const [probeId, probe] of Object.entries(reading.probes)) { const alarmStr = probe.alarm_high || probe.alarm_low ? ` (Alarm: ${probe.alarm_low || "—"}–${probe.alarm_high || "—"}°${reading.unit})` : ""; markdown += `- **${probe.name || `Probe ${probeId}`}:** ${probe.temp}°${reading.unit}${alarmStr}\n`; } markdown += "\n"; } return { content: [{ type: "text", text: markdown }], }; } catch (error) { const message = error instanceof Error ? error.message : "Failed to get readings"; return { isError: true, content: [{ type: "text", text: `Error: ${message}` }], }; } }
  • Zod input schema for the tool, defining device_serial (optional) and response_format parameters.
    export const GetLiveReadingsSchema = z .object({ device_serial: z .string() .optional() .describe("Serial number of specific device to query. If not provided, returns readings from all devices."), response_format: ResponseFormatSchema.describe("Output format"), }) .strict(); export type GetLiveReadingsInput = z.infer<typeof GetLiveReadingsSchema>;
  • src/index.ts:1204-1229 (registration)
    Tool registration in the main MCP server using server.registerTool with title, description, input schema, and annotations.
    server.registerTool( "thermoworks_get_live_readings", { title: "Get Live Temperature Readings", description: `Get current temperature readings from your ThermoWorks devices. Requires authentication first via thermoworks_authenticate. Args: - device_serial: Serial number of specific device (optional, defaults to all devices) - response_format: 'markdown' or 'json' Returns: Current probe temperatures, alarm settings, and timestamps. Examples: - "What are my current temperatures?" -> Gets all device readings - "Show me the Signals readings" -> Specify device_serial`, inputSchema: GetLiveReadingsSchema, annotations: { readOnlyHint: true, destructiveHint: false, idempotentHint: false, // Readings change over time openWorldHint: true, }, },
  • Key helper methods in ThermoWorksClient: getDeviceReadings and getAllReadings, which handle token refresh and fetch data from Firebase Realtime Database.
    async getDeviceReadings(serial: string): Promise<DeviceReading | null> { await this.ensureValidToken(); return getDeviceReadings(this.idToken!, this.userId!, serial, this.useSmokeLegacy); } /** * Get all device readings */ async getAllReadings(): Promise<DeviceReading[]> { await this.ensureValidToken(); return getAllDeviceReadings(this.idToken!, this.userId!, this.useSmokeLegacy); }
  • Singleton factory for ThermoWorksClient used by the handler to get the authenticated client instance.
    export function getThermoWorksClient(useSmokeLegacy = false): ThermoWorksClient { if (!globalClient) { globalClient = new ThermoWorksClient(useSmokeLegacy); } return globalClient; }

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/jweingardt12/bbq-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server