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