Skip to main content
Glama

thermoworks_authenticate

Authenticate with ThermoWorks Cloud to access live temperature data from connected devices like Signals, Smoke, and BlueDOT for real-time BBQ monitoring.

Instructions

Connect to ThermoWorks Cloud using your ThermoWorks account credentials.

This allows the BBQ MCP Server to access live temperature data from your connected ThermoWorks devices (Signals, Smoke, BlueDOT, etc.).

IMPORTANT: Your credentials are only used to authenticate with ThermoWorks' servers and are not stored. The authentication token expires after 1 hour.

Args:

  • email: Your ThermoWorks account email (same as the ThermoWorks app)

  • password: Your ThermoWorks account password

  • use_legacy_smoke: Set to true for older Smoke Gateway devices (pre-2022)

Returns: Authentication status and list of connected devices.

Security Notes:

  • Credentials are sent directly to ThermoWorks/Firebase servers over HTTPS

  • No credentials are stored by the MCP server

  • For production use, set credentials via environment variables: THERMOWORKS_EMAIL and THERMOWORKS_PASSWORD

Examples:

  • "Connect to my ThermoWorks account" -> Provide email and password

  • "I have an older Smoke Gateway" -> Set use_legacy_smoke=true

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
emailYesEmail address used for your ThermoWorks account (same as in the ThermoWorks app)
passwordYesPassword for your ThermoWorks account
use_legacy_smokeNoSet to true if using older Smoke Gateway devices (pre-2022). Default false for newer ThermoWorks Cloud devices.

Implementation Reference

  • Inline handler function for thermoworks_authenticate tool. Resets client, authenticates with provided credentials using ThermoWorks client, fetches devices, and returns formatted success/error response.
    server.tool( "thermoworks_authenticate", "Connect to ThermoWorks Cloud", { email: z.string().email(), password: z.string(), use_legacy_smoke: z.boolean().default(false), }, async ({ email, password, use_legacy_smoke }) => { try { resetThermoWorksClient(); const client = getThermoWorksClient(use_legacy_smoke); await client.authenticate({ email, password }); const devices = await client.getDevices(); let text = `## ✅ Connected\n\n**Devices:** ${devices.length}\n`; for (const d of devices) text += `- ${d.name} (${d.serial})\n`; return { content: [{ type: "text", text }] }; } catch (error) { const message = error instanceof Error ? error.message : "Auth failed"; return { content: [{ type: "text", text: `❌ ${message}` }], isError: true }; } } );
  • Main handler function for thermoworks_authenticate in primary server entry point. Similar logic with enhanced error messages and structured output.
    async (params: AuthenticateInput) => { try { // Reset any existing client to ensure fresh auth resetThermoWorksClient(); const client = getThermoWorksClient(params.use_legacy_smoke); await client.authenticate({ email: params.email, password: params.password, }); // Get list of devices after successful auth const devices = await client.getDevices(); const authInfo = client.getAuthInfo(); const output = { authenticated: true, userId: authInfo.userId, tokenExpiry: authInfo.tokenExpiry?.toISOString(), deviceCount: devices.length, devices: devices.map((d) => ({ serial: d.serial, name: d.name, type: d.type, })), }; let markdown = `## ✅ Connected to ThermoWorks Cloud\n\n`; markdown += `**Account:** ${params.email}\n`; markdown += `**Devices Found:** ${devices.length}\n\n`; if (devices.length > 0) { markdown += `### Your Devices\n\n`; for (const device of devices) { markdown += `- **${device.name}** (${device.type}) - Serial: ${device.serial}\n`; } markdown += `\nYou can now use \`thermoworks_get_live_readings\` to get temperature data!`; } else { markdown += `No devices found. Make sure your devices are:\n`; markdown += `- Registered in the ThermoWorks app\n`; markdown += `- Connected to WiFi (for Signals/Smoke Gateway)\n`; markdown += `- Currently powered on\n`; } return { content: [{ type: "text", text: markdown }], structuredContent: output, }; } catch (error) { const message = error instanceof Error ? error.message : "Authentication failed"; return { isError: true, content: [ { type: "text", text: `## ❌ Authentication Failed\n\n${message}\n\n**Troubleshooting:**\n- Verify your email and password are correct\n- Make sure you're using the same credentials as the ThermoWorks app\n- For older Smoke Gateway devices, set use_legacy_smoke=true`, }, ], }; } }
  • Zod input schema defining parameters: email (required, validated), password (min 6 chars), use_legacy_smoke (boolean, default false). Used in main index.ts registration.
    export const AuthenticateSchema = z .object({ email: z .string() .email() .describe("Email address used for your ThermoWorks account (same as in the ThermoWorks app)"), password: z .string() .min(6) .describe("Password for your ThermoWorks account"), use_legacy_smoke: z .boolean() .default(false) .describe("Set to true if using older Smoke Gateway devices (pre-2022). Default false for newer ThermoWorks Cloud devices."), }) .strict();
  • src/index.ts:972-1068 (registration)
    Full tool registration using server.registerTool with title, detailed description, imported schema, annotations, and handler reference.
    server.registerTool( "thermoworks_authenticate", { title: "Authenticate with ThermoWorks Cloud", description: `Connect to ThermoWorks Cloud using your ThermoWorks account credentials. This allows the BBQ MCP Server to access live temperature data from your connected ThermoWorks devices (Signals, Smoke, BlueDOT, etc.). IMPORTANT: Your credentials are only used to authenticate with ThermoWorks' servers and are not stored. The authentication token expires after 1 hour. Args: - email: Your ThermoWorks account email (same as the ThermoWorks app) - password: Your ThermoWorks account password - use_legacy_smoke: Set to true for older Smoke Gateway devices (pre-2022) Returns: Authentication status and list of connected devices. Security Notes: - Credentials are sent directly to ThermoWorks/Firebase servers over HTTPS - No credentials are stored by the MCP server - For production use, set credentials via environment variables: THERMOWORKS_EMAIL and THERMOWORKS_PASSWORD Examples: - "Connect to my ThermoWorks account" -> Provide email and password - "I have an older Smoke Gateway" -> Set use_legacy_smoke=true`, inputSchema: AuthenticateSchema, annotations: { readOnlyHint: false, destructiveHint: false, idempotentHint: true, openWorldHint: true, }, }, async (params: AuthenticateInput) => { try { // Reset any existing client to ensure fresh auth resetThermoWorksClient(); const client = getThermoWorksClient(params.use_legacy_smoke); await client.authenticate({ email: params.email, password: params.password, }); // Get list of devices after successful auth const devices = await client.getDevices(); const authInfo = client.getAuthInfo(); const output = { authenticated: true, userId: authInfo.userId, tokenExpiry: authInfo.tokenExpiry?.toISOString(), deviceCount: devices.length, devices: devices.map((d) => ({ serial: d.serial, name: d.name, type: d.type, })), }; let markdown = `## ✅ Connected to ThermoWorks Cloud\n\n`; markdown += `**Account:** ${params.email}\n`; markdown += `**Devices Found:** ${devices.length}\n\n`; if (devices.length > 0) { markdown += `### Your Devices\n\n`; for (const device of devices) { markdown += `- **${device.name}** (${device.type}) - Serial: ${device.serial}\n`; } markdown += `\nYou can now use \`thermoworks_get_live_readings\` to get temperature data!`; } else { markdown += `No devices found. Make sure your devices are:\n`; markdown += `- Registered in the ThermoWorks app\n`; markdown += `- Connected to WiFi (for Signals/Smoke Gateway)\n`; markdown += `- Currently powered on\n`; } return { content: [{ type: "text", text: markdown }], structuredContent: output, }; } catch (error) { const message = error instanceof Error ? error.message : "Authentication failed"; return { isError: true, content: [ { type: "text", text: `## ❌ Authentication Failed\n\n${message}\n\n**Troubleshooting:**\n- Verify your email and password are correct\n- Make sure you're using the same credentials as the ThermoWorks app\n- For older Smoke Gateway devices, set use_legacy_smoke=true`, }, ], }; } } );
  • Smithery-compatible tool registration using server.tool with inline schema and handler for deployment scenarios.
    server.tool( "thermoworks_authenticate", "Connect to ThermoWorks Cloud", { email: z.string().email(), password: z.string(), use_legacy_smoke: z.boolean().default(false), }, async ({ email, password, use_legacy_smoke }) => { try { resetThermoWorksClient(); const client = getThermoWorksClient(use_legacy_smoke); await client.authenticate({ email, password }); const devices = await client.getDevices(); let text = `## ✅ Connected\n\n**Devices:** ${devices.length}\n`; for (const d of devices) text += `- ${d.name} (${d.serial})\n`; return { content: [{ type: "text", text }] }; } catch (error) { const message = error instanceof Error ? error.message : "Auth failed"; return { content: [{ type: "text", text: `❌ ${message}` }], isError: true }; } } );

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