UNPKG

howtocook-mcp

Version:

MCP Server for howtocook recipe database - 炫一周好饭,拒绝拼好饭

63 lines (62 loc) 2.71 kB
import { z } from "zod"; export function registerGetRecipeByIdTool(server, recipes) { server.tool("mcp_howtocook_getRecipeById", "根据菜谱名称或ID查询指定菜谱的完整详情,包括食材、步骤等", { query: z.string().describe('菜谱名称或ID,支持模糊匹配菜谱名称') }, async ({ query }) => { // 首先尝试精确匹配ID let foundRecipe = recipes.find(recipe => recipe.id === query); // 如果没有找到,尝试精确匹配名称 if (!foundRecipe) { foundRecipe = recipes.find(recipe => recipe.name === query); } // 如果还没有找到,尝试模糊匹配名称 if (!foundRecipe) { foundRecipe = recipes.find(recipe => recipe.name.toLowerCase().includes(query.toLowerCase())); } // 如果仍然没有找到,返回所有可能的匹配项(最多5个) if (!foundRecipe) { const possibleMatches = recipes.filter(recipe => recipe.name.toLowerCase().includes(query.toLowerCase()) || recipe.description.toLowerCase().includes(query.toLowerCase())).slice(0, 5); if (possibleMatches.length === 0) { return { content: [ { type: "text", text: JSON.stringify({ error: "未找到匹配的菜谱", query: query, suggestion: "请检查菜谱名称是否正确,或尝试使用关键词搜索" }, null, 2), }, ], }; } return { content: [ { type: "text", text: JSON.stringify({ message: "未找到精确匹配,以下是可能的匹配项:", query: query, possibleMatches: possibleMatches.map(recipe => ({ id: recipe.id, name: recipe.name, description: recipe.description, category: recipe.category })) }, null, 2), }, ], }; } // 返回找到的完整菜谱信息 return { content: [ { type: "text", text: JSON.stringify(foundRecipe, null, 2), }, ], }; }); }