Skip to main content
Glama

bbq_list_proteins

Discover available BBQ protein types with cooking information. Filter by category to identify meats and their identifiers for use in other BBQ cooking tools.

Instructions

List all supported protein types with their key cooking information.

Use this to discover available proteins and their identifiers for use with other tools.

Args:

  • category: Filter by category ('beef', 'pork', 'poultry', 'lamb', 'seafood', 'all')

  • response_format: 'markdown' or 'json'

Examples:

  • "What meats can you help me cook?" -> category='all'

  • "Show me beef options" -> category='beef'

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
categoryNoFilter by protein categoryall
response_formatNoOutput formatmarkdown

Implementation Reference

  • Main handler function for bbq_list_proteins tool. Filters PROTEIN_PROFILES by category, handles JSON or Markdown output, and uses formatting helper.
    async (params: ListProteinsInput) => { try { let proteins = Object.values(PROTEIN_PROFILES); if (params.category !== "all") { proteins = proteins.filter((p) => p.category === params.category); } if (params.response_format === "json") { const output = { category: params.category, count: proteins.length, proteins: proteins.map((p) => ({ type: p.type, displayName: p.displayName, category: p.category, usdaSafeTemp: p.usdaSafeTemp, recommendedMethods: p.recommendedMethods, hasStall: !!p.stallRange, donenessOptions: Object.keys(p.donenessTemps), })), }; return { content: [{ type: "text", text: JSON.stringify(output, null, 2) }], structuredContent: output, }; } const markdown = formatProteinListMarkdown(proteins, params.category); 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 listing proteins: ${message}` }], }; }
  • Zod input schema for bbq_list_proteins defining category filter and response format.
    export const ListProteinsSchema = z .object({ category: z .enum(["beef", "pork", "poultry", "lamb", "seafood", "all"]) .default("all") .describe("Filter by protein category"), response_format: ResponseFormatSchema.describe("Output format"), }) .strict(); export type ListProteinsInput = z.infer<typeof ListProteinsSchema>;
  • src/index.ts:435-457 (registration)
    Primary registration of the bbq_list_proteins tool with MCP server including title, description, schema, and annotations.
    server.registerTool( "bbq_list_proteins", { title: "List Supported Proteins", description: `List all supported protein types with their key cooking information. Use this to discover available proteins and their identifiers for use with other tools. Args: - category: Filter by category ('beef', 'pork', 'poultry', 'lamb', 'seafood', 'all') - response_format: 'markdown' or 'json' Examples: - "What meats can you help me cook?" -> category='all' - "Show me beef options" -> category='beef'`, inputSchema: ListProteinsSchema, annotations: { readOnlyHint: true, destructiveHint: false, idempotentHint: true, openWorldHint: false, }, },
  • Helper function to format the filtered protein list into grouped Markdown output with key info like targets, methods, and stall warnings.
    export function formatProteinListMarkdown( proteins: ProteinProfile[], category?: string ): string { const categoryDisplay = category === "all" ? "All Proteins" : `${category?.charAt(0).toUpperCase()}${category?.slice(1)}`; let output = `## 🥩 ${categoryDisplay}\n\n`; // Group by category const grouped = proteins.reduce( (acc, protein) => { if (!acc[protein.category]) { acc[protein.category] = []; } acc[protein.category].push(protein); return acc; }, {} as Record<string, ProteinProfile[]> ); for (const [cat, prots] of Object.entries(grouped)) { output += `### ${cat.charAt(0).toUpperCase() + cat.slice(1)}\n\n`; for (const protein of prots) { const doneness = Object.keys(protein.donenessTemps)[0] as DonenessLevel; const temp = protein.donenessTemps[doneness]; output += `**${protein.displayName}** (\`${protein.type}\`)\n`; output += `- Target: ${temp}°F (${DONENESS_INFO[doneness]?.displayName || doneness})\n`; output += `- Methods: ${protein.recommendedMethods.map((m) => COOK_METHOD_INFO[m].displayName).join(", ")}\n`; if (protein.stallRange) { output += `- ⚠️ Stalls at ${protein.stallRange.start}-${protein.stallRange.end}°F\n`; } output += "\n"; } } return output; }
  • Alternative simplified registration for Smithery compatibility using inline Zod schema and getProteinsByCategory helper.
    server.tool( "bbq_list_proteins", "List all supported proteins", { category: z.enum(["all", "beef", "pork", "poultry", "lamb", "seafood"]).default("all") }, async ({ category }) => { const proteins = getProteinsByCategory(category); const markdown = formatProteinListMarkdown(proteins, category); return { content: [{ type: "text", text: markdown }] }; } );

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