howtocook-mcp
Version:
MCP Server for howtocook recipe database - 炫一周好饭,拒绝拼好饭
63 lines (62 loc) • 2.71 kB
JavaScript
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),
},
],
};
});
}