mcpField
M
mcp-wikibooks-cookbook

mcp-wikibooks-cookbook

本地服务
github.com游戏娱乐0今天更新

关于 mcp-wikibooks-cookbook

mcp-wikibooks-cookbook 将聊天客户端连接到英文 Wikibooks Cookbook。它支持食谱搜索、分类列表和份量调整,也可缩放单独提供的食材清单。

主要功能

  1. 01按菜名或食材搜索食谱
  2. 02读取食谱并调整份量
  3. 03按菜系、菜品类型或主食材列出食谱
  4. 04缩放任意食材清单

适用场景

  1. 01按菜名或食材查找食谱
  2. 02按指定人数调整食谱份量
  3. 03按菜系或菜品类型浏览食谱
  4. 04缩放自备的食材清单

MCP 相关

向 MCP 客户端提供 Wikibooks Cookbook 搜索、食谱详情、分类列表和食材缩放工具。

配置

本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。

暂未收录安装方式

我们还没有获取到这个服务的安装包或远程地址,请按项目 README 中的说明安装。

代码仓库
安装包
npmmcp-wikibooks-cookbook2.2.0
mcpbmcp-wikibooks-cookbook-2.2.0.mcpb2.2.0

工具

4

收录的工具列表 · 更新于 今天

参数类型必填说明
limitinteger否
querystring是菜品,例如 'carbonara',或食材,例如 'guanciale'。
searchenum否'text' 搜索整个页面;'title' 仅匹配页面名称。text | title

详细介绍

mcp-wikibooks-cookbook

npm CI license MCP Registry Glama M8ven LobeHub 在 Cursor 中安装 在 VS Code 中安装

食谱是英文 Wikibooks(Wikimedia 的一个项目)中的食谱集。数千种食谱在这里以开放方式编写和维护,每种食谱都列出了所需食材、设备、步骤、作者补充的提示和变化,以及所属类别:菜系、菜肴类型和主要食材。页面采用 Creative Commons Attribution-ShareAlike 4.0 许可发布。

此 MCP 服务将聊天客户端连接到这个食谱集。你可以按菜肴或食材搜索食谱,按菜系、菜肴类型或主要食材浏览,也可以阅读一份食谱,并按餐桌人数调整食材用量;还可以调整自己的任意食材清单。无需 API 密钥或账户。

Version française


安装

一键安装

在 Cursor 中安装 在 VS Code 中安装

Claude Code

claude mcp add wikibooks-cookbook -- npx -y mcp-wikibooks-cookbook

Claude Desktop、Cursor 及任何使用标准配置格式的客户端

{
  "mcpServers": {
    "wikibooks-cookbook": {
      "command": "npx",
      "args": ["-y", "mcp-wikibooks-cookbook"]
    }
  }
}

需要 Node 24 或更高版本,无需设置环境变量。

使用 Docker
{
  "mcpServers": {
    "wikibooks-cookbook": {
      "command": "docker",
      "args": ["run", "-i", "--rm", "ghcr.io/smeet666/mcp-wikibooks-cookbook:2.1.0"]
    }
  }
}

-i 会保持标准输入开启,协议通过该输入流传输;省略 -t 是因为 TTY 会改写数据流。容器需要能够通过 HTTPS 访问 api.wikimedia.org,除此之外不需要任何东西:无需卷、端口或凭据。

使用 Bundle,无需 npm

从最新版本下载 mcp-wikibooks-cookbook-2.1.0.mcpb 并打开。支持 MCP bundle 的客户端会自动安装,无需 npm,也无需编辑配置文件。Bundle 包含所需依赖,因此安装时不会下载任何内容。

可以问什么

  • “在 Cookbook 中帮我找一个意式培根蛋面食谱。”
  • “把份量改成 6 人份,而不是 4 人份。”
  • “这个食谱集中有哪些泰式汤品?”
  • “哪些食谱以扁豆为主要食材?”
  • “帮我把这份食材清单的用量乘以 2.5。”

常见流程是先搜索,再查看食谱:每一行都带有一个 id,也就是页面键,get_recipe 接收这个键。

工具

工具功能
search_recipes按菜品或食材查找食谱。
get_recipe查看一道食谱,并可按需缩放至指定份数。
scale_ingredients缩放任意食材清单,无需请求 wiki。
list_recipes按菜系、菜品类型或主要食材列出食谱。
search_recipes

搜索 Cookbook,可搜索页面的全文,也可仅搜索页面标题。

参数类型必填功能
query字符串,1 到 300 个字符是菜品,例如 carbonara,或食材,例如 guanciale。
searchtext 或 title,默认 text否text 搜索全文;title 仅匹配页面名称。
limit整数,1 到 50,默认 10否返回的行数。

返回内容: 各行包含 id(即 get_recipe 接收的页面键)、title、 url、image_url、description(wiki 为页面保留的简短介绍)以及 excerpt(移除高亮标记后的匹配段落)。如果搜索结果中没有后三项中的某项,其值为 null。total_available 始终为 null:搜索接口不提供总数或分页,因此 result_count 表示本次调用返回的行数。

get_recipe

查看一道食谱;如果提供份数,则缩放其食材用量。

参数类型必填功能
id字符串,1 到 300 个字符是页面键,例如 Cookbook:Spaghetti_alla_Carbonara。
servings整数,1 到 500否将食材用量缩放至指定份数。
max_description_chars整数,100 到 20000,默认 1200否返回的页面正文长度。

返回内容: title、url、ingredients、equipment、steps、tips(页面提供的备注和变化做法)、prep_minutes、cook_minutes、 total_minutes、页面原文中的 time_text、time_phases、category,以及页面归属的所有类别 categories。页面未说明的数值为 null。id 表示实际读取的页面;如果发生重定向,它可能与请求的键不同,此时 redirected_from 会显示引导至该页面的键。yield 说明食谱原本的份数以及缩放后的份数,每种食材都带有 scaling,其值为 scaled、rounded 或 unscaled。

scale_ingredients

对任意配料行列表应用相同的算术运算,不会请求维基。

参数类型必填作用
ingredients1 到 100 个字符串组成的数组,每个最多 300 个字符是要按比例调整的行。
factor大于 0 且不超过 100 的数字三选一要应用的倍数。
from_servings大于 0 且不超过 500 的数字三选一列表所对应的份数。
to_servings大于 0 且不超过 500 的数字三选一目标份数。

传入 factor,或同时传入 from_servings 和 to_servings。

**返回内容:**使用的 factor、按 get_recipe 返回格式整理的缩放后 ingredients,以及 scaled_count、rounded_count 和 unscaled_count。

list_recipes

按 Cookbook 文件中使用的类别列出食谱。参数可以组合使用,回答会说明据此构建的搜索条件。

参数类型必填作用
cuisine最多 80 个字符的字符串否菜系或国家/地区,例如 Italian 或 Thai。
dish_type最多 80 个字符的字符串否菜肴类型,例如 soup、dessert 或 bread。
main_ingredient最多 80 个字符的字符串否食谱主要使用的配料。
limit1 到 50 的整数,默认值为 15否返回的行数。

返回内容:search_recipes 返回的行,其中 query 会说明此服务根据参数构建的搜索条件;每个参数也会原样返回,未提供的参数则返回 null。

数量缩放

数量会以适合的单位表示,因此返回的行可能使用与食谱原文不同的单位:将 200 g 乘以 20 后会显示为 4 kg。

配料可以细分到什么程度取决于配料本身。面包可以切成两份、三份或四份;鸡蛋则无法分割。若计算出的数量介于两者之间,就会进行四舍五入,此时缩放后的食谱与原始比例会略有偏差。该行会标记为 rounded,备注中会说明处理方式。

这些数字是此服务计算得出的,因此展示时请说明它们是重新计算的。如果食谱页面没有注明份数,就无法换算成指定人数的份量,回答也会说明这一点。

许可与署名

Cookbook 页面依据 知识共享署名-相同方式共享 4.0 许可发布。 复用食谱时,必须注明 Wikibooks 及其来源页面,并以相同许可共享基于该食谱创作的内容。get_recipe 会返回 license 和页面 url,因此回答会包含相应署名。

配置

所有变量均为可选项。请在客户端配置的 env 块中设置。

变量默认值用途
WB_USER_AGENT项目标识向 Wikimedia 标识你的应用,并提供可联系到相关人员的地址。
WB_MIN_INTERVAL_MS1000两次请求之间的间隔,范围为 500 到 60000。
WB_TIMEOUT_MS20000单次请求的截止时间,范围为 1000 到 120000。
WB_MAX_RETRIES3临时故障后的重试次数,范围为 0 到 8。
WB_CACHE_TTL_MS900000页面在内存中的保留时间,范围为 0 到 86400000。
WB_CACHE_MAX_ENTRIES200内存中同时保留的页面数,范围为 1 到 5000。
WB_MAX_BODY_BYTES8000000可读取的页面最大字节数,范围为 100000 到 64000000。
WB_LOG_LEVELerrorsilent、error、info 或 debug,输出到 stderr。

超出范围的值会回退到默认值,原因会写入 stderr。

错误

每种失败都带有六种代码之一和一条消息;适用时还会附上提示,说明下一步该怎么做。

代码发生了什么怎么做
not_foundWiki 已作出响应,但没有该页面。使用 search_recipes 检查页面键。
invalid_input请求发出前,参数已被拒绝。阅读消息,其中会指出相关参数。
rate_limitedWikimedia 要求此客户端放慢请求速度。等待提示中指出的秒数,然后使用相同参数再次调用。食谱仍然存在。
parse_failure页面已加载,但缺少预期内容。在问题跟踪器中报告。
network_error请求未能完成。稍后重试。
timeout请求超过了截止时间。提高 WB_TIMEOUT_MS,或减少请求的行数。

作为库使用

读取 Wiki 的这一层单独发布,包含自己的请求间隔控制、缓存和错误处理,且不绑定任何协议。

import { WikibooksClient } from "mcp-wikibooks-cookbook/client";

const client = new WikibooksClient();
const { data, cached } = await client.getRecipe("Cookbook:Spaghetti_alla_Carbonara");
console.log(data.title, data.ingredients.length, cached);

search 和 getRecipe 都会返回 { data, cached },并抛出携带六种代码之一的错误。此处同样会限制两次请求之间的最短间隔。

请求节奏与归属信息

请求逐个发出,间隔至少一秒;无论如何配置服务器,最低间隔都为半秒。User-Agent 始终以项目标识和可联系到负责人的地址结尾。

读取请求会发送到 api.wikimedia.org,这是 Wikimedia 为开发者提供并维护的主机。每条结果都会附上读取页面的地址,以及该页面发布时采用的许可协议。

此 MCP 服务是一个非官方项目,与 Wikimedia 或 Wikibooks 社区均无关联。

隐私

此服务不会收集你的任何信息,也不会向作者发送任何信息。它在你的计算机上运行,只会连接 api.wikimedia.org,运行期间会将回答保存在内存中,不会写入磁盘。 PRIVACY.md 说明了请求会携带哪些信息,以及哪些设置会影响这些信息。

开发

npm install
npm run build:fixtures
npm test
npm run check

测试使用生成的 fixture 运行,不会发出网络请求。实时测试套件 npm run test:live 会为每个路由发出一个请求,并于每晚针对服务本身运行。

贡献

错误报告、问题和想法请提交至问题跟踪器。 欢迎提交拉取请求;先创建问题有助于就变更方案达成一致。请参阅 CONTRIBUTING.md。

许可

此服务自身代码采用 MIT 许可,详见 LICENSE。Cookbook 页面归其作者和 Wikibooks 社区所有,采用 CC BY-SA 4.0 许可。


mcp-wikibooks-cookbook(法语)

英文版本

Cookbook 是英语 Wikibooks 中的食谱合集。Wikibooks 是 Wikimedia 的一个项目。数千道食谱在这里公开编写和维护,每道食谱都包含食材、所需器具、步骤、作者添加的建议和变体,以及所属类别:菜系、菜品类型、主要食材。页面采用知识共享署名—相同方式共享 4.0 许可协议发布。

此服务将对话客户端连接到这个合集。你可以按菜品或食材搜索食谱,按菜系、菜品类型或主要食材列出食谱,阅读食谱并根据用餐人数调整食材用量,还可以调整任意食材列表。无需 API 密钥,也无需账号。

安装

一键安装

在 Cursor 中安装 在 VS Code 中安装

Claude Code

claude mcp add wikibooks-cookbook -- npx -y mcp-wikibooks-cookbook

Claude Desktop、Cursor 及所有采用标准配置格式的客户端

{
  "mcpServers": {
    "wikibooks-cookbook": {
      "command": "npx",
      "args": ["-y", "mcp-wikibooks-cookbook"]
    }
  }
}

需要 Node 24 或更高版本,无需设置任何环境变量。

使用 Docker
{
  "mcpServers": {
    "wikibooks-cookbook": {
      "command": "docker",
      "args": ["run", "-i", "--rm", "ghcr.io/smeet666/mcp-wikibooks-cookbook:2.1.0"]
    }
  }
}

-i 会保持标准输入打开,它是协议通道;省略 -t 是因为 TTY 会重写数据流。容器只需能够通过 HTTPS 访问 api.wikimedia.org,除此之外不需要任何东西:无需卷、端口或凭据。

打包,无需 npm

从最新版本发布 下载 mcp-wikibooks-cookbook-2.1.0.mcpb 并打开。支持 MCP 捆绑包的客户端会自动安装,无需 npm,也无需修改配置文件。捆绑包包含其依赖项,因此安装时不会下载任何内容。

可以询问什么

  • “在 Cookbook 中帮我找一道培根蛋面食谱。”
  • “把它调整为六人份,而不是四人份。”
  • “这个合集里有哪些泰式汤品?”
  • “有哪些食谱以扁豆为主料?”
  • “把这份配料清单的用量乘以 2.5。”

常见流程是先搜索,再读取:一行结果包含 id,即页面键;get_recipe 会使用这个键。

工具

工具功能
search_recipes按菜品或食材查找食谱。
get_recipe读取食谱,并可按需调整份数。
scale_ingredients调整任意配料清单的用量,无需查询 wiki。
list_recipes按菜系、菜品类型或主要食材列出食谱。
search_recipes

在 Cookbook 中搜索,可以搜索页面的全部文本,也可以只搜索页面标题。

参数类型必填功能
query字符串,1 到 300 个字符是一道菜,如 carbonara,或一种食材,如 guanciale。
searchtext 或 title,默认值为 text否text 搜索整页;title 仅匹配页面名称。
limit整数,1 到 50,默认值为 10否返回的行数。

**返回内容:**包含 id 的行,即 get_recipe 会使用的页面键;title;url;image_url;description,即 wiki 为页面保留的简短说明;以及 excerpt,即去除高亮标记后的匹配片段。如果搜索未提供以上后三项中的某项,其值为 null。total_available 始终为 null:搜索接口不提供总数或分页信息,因此 result_count 统计本次调用返回的行数。

get_recipe

读取食谱;如果指定了份数,则会调整食材用量。

参数类型必填功能
id字符串,1 至 300 个字符是页面键,例如 Cookbook:Spaghetti_alla_Carbonara。
servings整数,1 至 500否将食材用量调整为指定份数。
max_description_chars整数,100 至 20000,默认值为 1200否返回的页面正文长度。

返回: title、url、ingredients、equipment、steps、tips(页面发布的 备注和变体)、prep_minutes、cook_minutes、total_minutes、页面原文中的 time_text、time_phases、category,以及页面所属的每个类别对应的 categories。 页面未提供的数字为 null。id 表示读取的页面;如果发生重定向,它会与请求的键不同, 此时 redirected_from 表示重定向来源键。yield 表示食谱适用的份数以及调整后的份数, 每种食材都带有 scaling,其值为 scaled、rounded 或 unscaled。

scale_ingredients

对任意食材列表应用相同的计算方式,不向 wiki 发出请求。

参数类型必填功能
ingredients1 至 100 个字符串组成的数组,每个字符串最多 300 个字符是要调整的行。
factor大于 0 且不超过 100 的数字二选一要应用的乘数。
from_servings大于 0 且不超过 500 的数字二选一原始列表的份数。
to_servings大于 0 且不超过 500 的数字二选一目标份数。

传入 factor,或同时传入 from_servings 和 to_servings。

返回: 使用的 factor、按 get_recipe 返回的格式调整后的 ingredients,以及 scaled_count、rounded_count 和 unscaled_count。

list_recipes

根据 Cookbook 为食谱归入的类别列出食谱。参数可以组合使用,响应会说明据此构建的搜索内容。

参数类型必填功能
cuisine字符串,最多 80 个字符否菜系或国家/地区,例如 Italian 或 Thai。
dish_type字符串,最多 80 个字符否菜品类型,例如 soup、dessert 或 bread。
main_ingredient字符串,最多 80 个字符否食谱的主要食材。
limit整数,1 至 50,默认值为 15否返回的行数。

返回: search_recipes 返回的行,其中 query 表示此服务根据参数构建的搜索内容, 并逐一返回每个参数;未提供的参数则为 null。

数量调整

数量会以合适的单位表示。因此,调整后,某一行可能使用与食谱不同的单位:200 g 乘以 20 得到 4 kg。

食材可细分到什么程度,取决于其性质。面包可以切成两份、三份或四份;鸡蛋则无法分割。因此,落在两者之间的数量会被取整,调整后的食谱也就与原食谱的比例略有偏差。该行会标记为 rounded,其备注会说明具体处理方式。

这些数字是此服务计算得出的,因此展示时请说明它们已重新计算。如果食谱页面未注明份数,就无法将其调整为指定用餐人数,响应中会说明这一点。

许可与署名

Cookbook 页面采用 知识共享署名-相同方式共享 4.0许可发布。 复用食谱时,必须注明 Wikibooks 和食谱来源页面,并以相同许可分享基于它构建的内容。get_recipe 会同时返回 license 和页面的 url,因此响应中也会附带署名信息。

配置

所有变量均为可选项。请将它们设置在客户端配置的 env 块中。

变量默认值作用
WB_USER_AGENT项目标识向 Wikimedia 标识您的应用,并提供一个可联系到相关人员的地址。
WB_MIN_INTERVAL_MS1000两次请求之间的间隔,范围为 500 至 60000。
WB_TIMEOUT_MS20000请求超时时间,范围为 1000 至 120000。
WB_MAX_RETRIES3临时故障后的重试次数,范围为 0 至 8。
WB_CACHE_TTL_MS900000页面在内存中的缓存时长,范围为 0 至 86400000。
WB_CACHE_MAX_ENTRIES200同时保留在内存中的页面数,范围为 1 至 5000。
WB_MAX_BODY_BYTES8000000读取页面的最大字节数,范围为 100000 至 64000000。
WB_LOG_LEVELerrorsilent、error、info 或 debug,输出到错误输出流。

超出范围的值会恢复为默认值,原因会写入错误输出流。

错误

每次失败都会带有六种代码之一、一条消息,并在有帮助时提供下一步操作提示。

代码发生了什么怎么做
not_foundWiki 已响应,但没有此页面。使用 search_recipes 检查页面键。
invalid_input参数在发出任何请求前就被拒绝。阅读消息,其中会指出相关参数。
rate_limitedWikimedia 要求此客户端降低请求频率。等待指定的秒数,然后使用相同的参数重试。食谱仍然存在。
parse_failure页面已加载,但缺少预期内容。在问题跟踪页中报告。
network_error请求未能完成。稍后重试。
timeout请求超时。增大 WB_TIMEOUT_MS,或请求更少的行。

作为库使用

读取 Wiki 的这一层单独发布,拥有自己的节奏、缓存和错误,不绑定任何协议。

import { WikibooksClient } from "mcp-wikibooks-cookbook/client";

const client = new WikibooksClient();
const { data, cached } = await client.getRecipe("Cookbook:Spaghetti_alla_Carbonara");
console.log(data.title, data.ingredients.length, cached);

search 和 getRecipe 各自返回 { data, cached },并会抛出带有六种代码之一的错误。两次请求之间的最短间隔在这里同样适用。

请求频率与署名

请求会逐个发出,间隔至少一秒,并且无论如何配置,最短间隔都不会低于半秒。User-Agent 始终以项目身份和个人联系地址结尾。

读取请求会发送到 api.wikimedia.org,这是 Wikimedia 为开发者提供文档并维护的主机。每个结果都附有读取该内容的页面地址,以及该页面发布所依据的许可证。

此 MCP 是一个非官方项目,与 Wikimedia 和 Wikibooks 社区均无关联。

隐私

此服务不会收集你的任何信息,也不会向其作者发送任何内容。它在你的计算机上运行,只连接 api.wikimedia.org,在运行期间将响应保存在内存中,并且不会写入磁盘。PRIVACY.md 说明了请求会携带哪些信息,以及哪些设置可以改变这一点。

开发

npm install
npm run build:fixtures
npm test
npm run check

测试使用生成的 fixture 运行,不会发出任何请求。实时测试套件 npm run test:live 会对每个路由发出一个请求,并且每晚直接针对服务运行。

贡献

问题、疑问和想法都可以提交到问题跟踪页。欢迎提交修改建议;先开一个工单有助于就修改方案达成一致。请参阅 CONTRIBUTING.md。

许可证

此服务代码采用 MIT 许可证,详情请见 LICENSE。Cookbook 页面归其作者和 Wikibooks 社区所有,采用 CC BY-SA 4.0 许可证。

评论

支持 Markdown

第一次接触 MCP?

从协议是什么,到在客户端里装上第一个服务,这几条回答覆盖了大多数入门问题。

一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。