Skip to main content
Glama

bbq_get_target_temperature

Retrieve target cooking temperatures for BBQ proteins with pull temperatures for carryover cooking, ensuring proper doneness levels for meats like beef, pork, chicken, and fish.

Instructions

Get the target internal temperature for a specific protein and doneness level.

Returns both the target serving temperature and the pull temperature (when to remove from heat) accounting for carryover cooking.

Args:

  • protein_type: Type of protein

  • doneness: Desired doneness level (optional, uses recommended if not specified)

  • include_pull_temp: Whether to include pull temperature (default: true)

  • response_format: 'markdown' or 'json'

Examples:

  • "What temp for medium-rare ribeye?" -> protein_type='beef_ribeye', doneness='medium_rare'

  • "When is chicken done?" -> protein_type='chicken_whole'

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
protein_typeYesType of protein
donenessNoDesired doneness level
include_pull_tempNoWhether to include pull temperature (accounting for carryover)
response_formatNoOutput formatmarkdown

Implementation Reference

  • Primary handler and registration for bbq_get_target_temperature tool in main MCP server. Calls helper getTargetTemperature and formats response.
    server.registerTool( "bbq_get_target_temperature", { title: "Get Target Temperature", description: `Get the target internal temperature for a specific protein and doneness level. Returns both the target serving temperature and the pull temperature (when to remove from heat) accounting for carryover cooking. Args: - protein_type: Type of protein - doneness: Desired doneness level (optional, uses recommended if not specified) - include_pull_temp: Whether to include pull temperature (default: true) - response_format: 'markdown' or 'json' Examples: - "What temp for medium-rare ribeye?" -> protein_type='beef_ribeye', doneness='medium_rare' - "When is chicken done?" -> protein_type='chicken_whole'`, inputSchema: GetTargetTemperatureSchema, annotations: { readOnlyHint: true, destructiveHint: false, idempotentHint: true, openWorldHint: false, }, }, async (params: GetTargetTemperatureInput) => { try { const profile = getProteinProfile(params.protein_type); const { targetTemp, pullTemp, doneness } = getTargetTemperature( params.protein_type, params.doneness ); if (params.response_format === "json") { const output = { proteinType: params.protein_type, displayName: profile.displayName, doneness: { level: doneness, displayName: DONENESS_INFO[doneness].displayName, description: DONENESS_INFO[doneness].description, }, temperatures: { target: targetTemp, pull: params.include_pull_temp ? pullTemp : undefined, carryover: profile.carryoverDegrees, usdaSafeMin: profile.usdaSafeTemp, }, allDonenessOptions: Object.entries(profile.donenessTemps).map(([level, temp]) => ({ level, displayName: DONENESS_INFO[level as DonenessLevel]?.displayName || level, temperature: temp, })), }; return { content: [{ type: "text", text: JSON.stringify(output, null, 2) }], structuredContent: output, }; } const markdown = formatTargetTempMarkdown(profile, targetTemp, pullTemp, doneness); return { content: [{ type: "text", text: markdown }], }; } catch (error) { const message = error instanceof Error ? error.message : "Unknown error occurred"; return { isError: true, content: [{ type: "text", text: `Error getting target temperature: ${message}` }], }; } } );
  • Zod input schema for bbq_get_target_temperature tool defining parameters: protein_type, doneness, include_pull_temp, response_format.
    export const GetTargetTemperatureSchema = z .object({ protein_type: ProteinTypeSchema.describe("Type of protein"), doneness: DonenessLevelSchema.optional().describe("Desired doneness level"), include_pull_temp: z .boolean() .default(true) .describe("Whether to include pull temperature (accounting for carryover)"), response_format: ResponseFormatSchema.describe("Output format"), }) .strict(); export type GetTargetTemperatureInput = z.infer<typeof GetTargetTemperatureSchema>;
  • Core helper function that computes targetTemp, pullTemp, and doneness for a given protein_type, used by the tool handlers.
    * Get the target temperature for a protein at a specific doneness */ export function getTargetTemperature( proteinType: ProteinType, doneness?: DonenessLevel ): { targetTemp: number; pullTemp: number; doneness: DonenessLevel } { const profile = getProteinProfile(proteinType); // Determine the doneness to use let actualDoneness: DonenessLevel; if (doneness && profile.donenessTemps[doneness] !== undefined) { actualDoneness = doneness; } else { // Use the first available doneness (most common/recommended) const availableDoneness = Object.keys(profile.donenessTemps) as DonenessLevel[]; actualDoneness = availableDoneness[0]; } const targetTemp = profile.donenessTemps[actualDoneness] ?? profile.usdaSafeTemp; const pullTemp = targetTemp - profile.carryoverDegrees; return { targetTemp, pullTemp, doneness: actualDoneness }; }
  • Alternative handler for bbq_get_target_temperature in Smithery-compatible server entry point.
    server.tool( "bbq_get_target_temperature", "Get target and pull temps for a protein", { protein_type: z.string().describe("Type of protein"), doneness: z.string().optional().describe("Desired doneness"), }, async ({ protein_type, doneness }) => { try { const { targetTemp, pullTemp, doneness: actualDoneness } = getTargetTemperature( protein_type as ProteinType, doneness as DonenessLevel | undefined ); const profile = getProteinProfile(protein_type as ProteinType); const text = `## ${profile.displayName}\n\n**Target:** ${targetTemp}°F\n**Pull At:** ${pullTemp}°F\n**Doneness:** ${DONENESS_INFO[actualDoneness]?.displayName || actualDoneness}`; return { content: [{ type: "text", text }] }; } catch (error) { const message = error instanceof Error ? error.message : "Unknown error"; return { content: [{ type: "text", text: `Error: ${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