Skip to main content
Glama

bbq_get_cooking_tips

Get cooking tips and best practices for specific BBQ proteins and cooking phases to improve your grilling or smoking results.

Instructions

Get cooking tips and best practices for a specific protein and situation.

Args:

  • protein_type: Type of protein

  • cook_method: Specific cooking method (optional)

  • current_phase: Current cooking phase for targeted tips (optional)

    • 'prep': Preparation and seasoning

    • 'cooking': Active cooking

    • 'stall': Temperature stall

    • 'wrapping': Texas crutch / wrapping

    • 'final_push': End of cook

    • 'resting': Rest period

    • 'serving': Slicing and serving

  • response_format: 'markdown' or 'json'

Examples:

  • "Tips for smoking brisket" -> protein_type='beef_brisket', cook_method='smoke_low_slow'

  • "Help with the stall" -> protein_type='beef_brisket', current_phase='stall'

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
protein_typeYesType of protein
cook_methodNoSpecific cooking method for targeted tips
current_phaseNoCurrent phase of the cook for phase-specific tips
response_formatNoOutput formatmarkdown

Implementation Reference

  • Inline MCP handler function that processes input parameters, calls helper functions for tips and formatting, supports JSON or markdown output, and handles errors.
    async (params: GetCookingTipsInput) => { try { const tips = getCookingTips(params.protein_type, params.cook_method, params.current_phase); if (params.response_format === "json") { const output = { proteinType: params.protein_type, cookMethod: params.cook_method, currentPhase: params.current_phase, tips, }; return { content: [{ type: "text", text: JSON.stringify(output, null, 2) }], structuredContent: output, }; } const markdown = formatTipsMarkdown(tips, params.protein_type); 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 cooking tips: ${message}` }], }; } }
  • src/index.ts:686-750 (registration)
    Registration of the bbq_get_cooking_tips tool with MCP server, including title, description, input schema reference, annotations, and inline handler.
    /** * Tool: bbq_get_cooking_tips * Get cooking tips for a protein */ server.registerTool( "bbq_get_cooking_tips", { title: "Get Cooking Tips", description: `Get cooking tips and best practices for a specific protein and situation. Args: - protein_type: Type of protein - cook_method: Specific cooking method (optional) - current_phase: Current cooking phase for targeted tips (optional) - 'prep': Preparation and seasoning - 'cooking': Active cooking - 'stall': Temperature stall - 'wrapping': Texas crutch / wrapping - 'final_push': End of cook - 'resting': Rest period - 'serving': Slicing and serving - response_format: 'markdown' or 'json' Examples: - "Tips for smoking brisket" -> protein_type='beef_brisket', cook_method='smoke_low_slow' - "Help with the stall" -> protein_type='beef_brisket', current_phase='stall'`, inputSchema: GetCookingTipsSchema, annotations: { readOnlyHint: true, destructiveHint: false, idempotentHint: true, openWorldHint: false, }, }, async (params: GetCookingTipsInput) => { try { const tips = getCookingTips(params.protein_type, params.cook_method, params.current_phase); if (params.response_format === "json") { const output = { proteinType: params.protein_type, cookMethod: params.cook_method, currentPhase: params.current_phase, tips, }; return { content: [{ type: "text", text: JSON.stringify(output, null, 2) }], structuredContent: output, }; } const markdown = formatTipsMarkdown(tips, params.protein_type); 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 cooking tips: ${message}` }], }; } } );
  • Zod schema defining input validation for the tool: protein_type (required), cook_method and current_phase (optional), response_format.
    * Schema for getting cooking tips */ export const GetCookingTipsSchema = z .object({ protein_type: ProteinTypeSchema.describe("Type of protein"), cook_method: CookMethodSchema.optional().describe("Specific cooking method for targeted tips"), current_phase: z .enum(["prep", "cooking", "stall", "wrapping", "final_push", "resting", "serving"]) .optional() .describe("Current phase of the cook for phase-specific tips"), response_format: ResponseFormatSchema.describe("Output format"), }) .strict(); export type GetCookingTipsInput = z.infer<typeof GetCookingTipsSchema>;
  • Main helper function that retrieves base tips from protein profile, adds method-specific and phase-specific tips, returns array of strings.
    */ export function getCookingTips( proteinType: ProteinType, cookMethod?: CookMethod, currentPhase?: string ): string[] { const profile = getProteinProfile(proteinType); const tips: string[] = [...profile.tips]; // Add method-specific tips if (cookMethod) { const methodInfo = COOK_METHOD_INFO[cookMethod]; tips.push(`For ${methodInfo.displayName}: Cook at ${methodInfo.tempRange}`); if (cookMethod === "reverse_sear") { tips.push("Start at 225°F until 10-15°F below target, then sear at high heat for 1-2 minutes per side."); } else if (cookMethod === "spatchcock") { tips.push( "Remove backbone with kitchen shears, flatten bird for more even cooking and crispier skin." ); } } // Add phase-specific tips if (currentPhase) { switch (currentPhase) { case "prep": tips.push("Season liberally - salt enhances flavor and aids bark formation."); tips.push("Let meat come to room temperature (30-60 min) for more even cooking."); break; case "stall": tips.push("The stall is caused by evaporative cooling - moisture on the surface keeps temps flat."); tips.push("Options: Wrap in butcher paper/foil (Texas crutch) or ride it out."); break; case "wrapping": tips.push("Butcher paper allows some smoke penetration while speeding the cook."); tips.push("Foil is faster but can soften the bark."); break; case "resting": tips.push("Don't skip the rest! It allows juices to redistribute."); tips.push("Large cuts can rest in a cooler for hours without losing much heat."); break; } } return tips; }
  • Helper function that formats the array of tips into a markdown string with header using protein display name.
    */ export function formatTipsMarkdown(tips: string[], proteinType: ProteinType): string { const profile = PROTEIN_PROFILES[proteinType]; let output = `## 💡 Cooking Tips: ${profile.displayName}\n\n`; for (const tip of tips) { output += `- ${tip}\n`; } return output; }

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