mcpField
M
mcp-marmiton

mcp-marmiton

本地服务
github.com游戏娱乐11 天前更新

关于 mcp-marmiton

mcp-marmiton 将聊天客户端连接到 Marmiton 食谱,适合家庭烹饪和餐食规划。它支持搜索、读取完整食谱,并按用餐人数或自带食材清单调整用量。

主要功能

  1. 01按菜名或食材搜索食谱
  2. 02读取食材、步骤和烹饪时间
  3. 03按用餐人数调整食谱用量
  4. 04缩放独立的食材清单
  5. 05无需 API 密钥或账户

适用场景

  1. 01按现有食材查找食谱
  2. 02按不同用餐人数调整食谱
  3. 03缩放书中食谱的食材清单

MCP 相关

MCP 服务向兼容客户端提供食谱搜索、读取和食材用量调整工具。它从 Marmiton 读取内容,不会向网站发布内容。

配置

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

暂未收录安装方式

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

代码仓库
安装包
npmmcp-marmiton2.1.0
mcpbmcp-marmiton-2.1.0.mcpb2.1.0

工具

3

收录的工具列表 · 更新于 2 周前

参数类型必填说明
limitinteger否此页结果中最多返回的食谱数。
querystring是要搜索的内容,使用法语,例如 'tarte aux pommes'。

详细介绍

mcp-marmiton

npm CI license MCP Registry Glama M8ven LobeHub Install in Cursor Install in VS Code

Marmiton 是法国规模最大的烹饪网站,自 1999 年起,家庭厨师便一直在这里发布食谱。每份食谱都列出食材及其用量、烹饪步骤、准备和烹饪时间、适用人数,以及制作过这道菜的人留下的评分。

此服务可将聊天客户端连接到该网站。你可以按菜名或食材搜索食谱,查看包含食材和步骤的完整食谱,还可以按餐桌就餐人数调整用量;每一行都会注明数值是精确的,还是为了便于厨房操作而做了调整。无需 API 密钥,也无需账号。

法语版


安装

一键安装

Install in Cursor Install in VS Code

Claude Code

claude mcp add marmiton -- npx -y mcp-marmiton

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

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

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

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

-i 会保持 stdin 开启,协议通过它传输;不使用 -t,因为 TTY 会改写数据流。容器需要能够通过 HTTPS 访问 www.marmiton.org,除此之外不需要任何东西:无需挂载卷、无需端口、无需凭据。

打包版本,无需 npm

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

你可以这样提问

  • « 给我找一个苹果挞食谱。 »
  • "把这份食谱改成适合六个人,而不是四个人。"
  • "我能用西葫芦和山羊奶酪做些什么?"
  • "这是我从书上抄下来的食谱,帮我把用量乘以 1.5。"
  • "第二道菜需要多长时间烹饪?"

Marmiton 是一个法国网站,因此要用法语搜索食谱:tarte aux pommes、poulet curry coco。通常的流程是先搜索,再查看食谱:search_recipes 会返回一个 id,然后将该 ID 传给 get_recipe。

工具

工具功能
search_recipes按菜名或食材查找食谱。
get_recipe读取一份食谱,并可按需换算为指定份数。
scale_ingredients换算任意食材清单,无需向网站发送请求。

该服务仅执行读取操作,不会向 Marmiton 发布任何内容。

search_recipes

按菜名或食材搜索食谱。Marmiton 会匹配单词的开头字母,因此查询会返回网站为其排序的结果;如果标题中没有包含查询词,答复也会说明这一点。

参数类型必填功能
query字符串,最多 200 个字符是要搜索的内容,使用法语。
limit整数,1 到 30,默认值为 10否从此结果页返回的食谱数量。

**返回内容:**包含 id 的结果行,get_recipe 会使用该值;还有 title、url 和 image_url。如果某份食谱发布时没有图片,image_url 的值为 null。此外还会返回 result_count 和 total_available,分别表示应用 limit 之前此页上的食谱数量。Marmiton 的 robots.txt 禁止翻页浏览搜索结果,因此一次搜索只会读取一页;缩小查询范围即可查看其他食谱。

get_recipe

完整读取一份食谱;如果指定了份数,还会换算食材用量。

参数类型必填功能
id纯数字字符串二选一Marmiton 食谱 ID,与 search_recipes 返回的值相同。
urlmarmiton.org URL二选一食谱的网址,在未提供 id 时使用。
servings大于 0 且最多为 500 的数字否将用量换算为指定份数。

返回内容:title、url、ingredients、steps、prep_minutes、cook_minutes、total_minutes、category、author、rating 和 nutrition;如果页面未发布相应信息,则对应值为 null。yield 说明食谱原本适用的份数以及换算后的份数,包含 original_count、original_text、requested、表示计数单位的 unit,以及所用乘数 factor。每种食材都包含 original、text、amount、表示范围上限的 amountMax、unit 和 scaling;scaling 的值为 scaled、rounded 或 unscaled。这些数值由此服务计算,因此展示时请说明它们是重新计算得出的。nutrition 描述的是食谱发布时、按其原始份数计算的营养信息。

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,用于统计数值经缩放后发生变化的行数。

缩放数量

每种食材都会带有一个 scaling 标记,说明其数量经过缩放后的处理方式。

标记含义示例
scaled数值是直接相乘的结果。3 oeufs ×2 → 6 oeufs
rounded为了便于使用,对数值进行了调整。25 cl de lait ×0.667 → 17 cl de lait
unscaled不含数量,因此保持原样。sel、coriandre

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

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

配置

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

变量默认值作用
MARMITON_USER_AGENT项目标识向 Marmiton 标明你的应用,并提供可联系到相关人员的地址。
MARMITON_MIN_INTERVAL_MS1000两次请求之间的间隔,范围为 500 至 60000。低于下限的值会被拒绝,并使用下限值。
MARMITON_TIMEOUT_MS15000单次请求的截止时间,范围为 1000 至 120000。
MARMITON_MAX_RETRIES3瞬时故障后的重试次数,范围为 0 至 10。
MARMITON_CACHE_TTL_MS900000页面在内存中的保留时长,范围为 0 至 86400000。
MARMITON_CACHE_MAX_ENTRIES200同时保存在内存中的页面数,范围为 0 至 10000。
MARMITON_MAX_BODY_BYTES8000000此工具读取的页面大小上限,单位为字节,范围为 100000 至 64000000。
MARMITON_LOG_LEVELerror日志级别:silent、error、info 或 debug,输出到 stderr。

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

错误

每种失败都包含六种代码之一、一条消息,以及在有帮助时指明下一步操作的提示。

代码发生了什么如何处理
not_foundMarmiton 已响应,但没有此菜谱。使用 search_recipes 检查 ID。
invalid_input请求发出前,参数已被拒绝。阅读消息,其中会指出对应的参数。
rate_limitedMarmiton 要求此客户端减慢请求速度。等待提示中指定的秒数,然后使用相同参数再次调用。菜谱仍然存在。
parse_failure页面已加载,但缺少预期内容。在问题跟踪页报告。
network_error请求未能完成。稍后重试。
timeout请求超过了截止时间。调高 MARMITON_TIMEOUT_MS。

作为库使用

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

import { MarmitonClient } from "mcp-marmiton/client";

const client = new MarmitonClient();
const { data, cached } = await client.getRecipe({ id: "18257" });
console.log(data.title, data.ingredients.length, cached);

search 和 getRecipe 均会返回 { data, cached },并会抛出携带六种代码之一的错误。两次请求之间的间隔下限在此同样适用。

请求频率与署名

请求会逐个发送,且彼此之间至少间隔一段时间,无论服务如何配置,这个间隔下限都不会改变。User-Agent 始终以项目标识和可联系到负责人的地址结尾。所有内容均读取自 Marmiton 发布供机器使用的 schema.org JSON-LD 数据,并且不会访问其 robots.txt 禁止访问的路径。

每个结果都包含食谱标题和地址;如果页面注明了作者,get_recipe 也会包含作者信息,以及由署名、标题和地址组成的一行文字。

食谱属于 Marmiton 以及撰写食谱的厨师。这个 MCP 服务是一个非官方项目,与 Marmiton 没有关联。

隐私

此服务不会收集关于你的任何信息,也不会向其作者发送任何内容。它在你的机器上运行,只会联系 www.marmiton.org,运行期间将答复保存在内存中,不会写入磁盘。 PRIVACY.md 说明了请求会携带哪些信息,以及哪些设置会改变这些信息。

开发

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

测试使用生成的测试夹具运行,不会发起网络请求。实时测试套件 npm run test:live 会对每个路由发起一次请求,并每晚针对网站本身运行。

贡献

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

许可证

MIT,详见 LICENSE。食谱属于 Marmiton 及其作者。


mcp-marmiton(法语)

English version

Marmiton 是法国最大烹饪网站,自 1999 年起,厨师们便在此发布食谱。每份食谱都会列出配料及其用量、操作步骤、准备和烹饪时间、适用人数,以及制作过这道菜的人留下的评分。

此服务将对话客户端连接到该网站。你可以按菜品或配料搜索食谱,阅读包含配料和步骤的完整食谱,还可以根据就餐人数调整用量;每一行都会注明数字是精确值,还是为了便于烹饪而进行了调整。无需 API 密钥,也无需账号。

安装

一键安装

在 Cursor 中安装 在 VS Code 中安装

Claude Code

claude mcp add marmiton -- npx -y mcp-marmiton

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

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

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

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

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

Bundle,无需 npm

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

可以询问的内容

  • “帮我找一个苹果挞的食谱。”
  • “把这个食谱按 6 人份而不是 4 人份读给我听。”
  • “西葫芦和山羊奶酪可以做什么?”
  • “这是我从书上抄下来的食谱,把用量乘以 1.5。”
  • “第二个食谱要烤多久?”

Marmiton 是一个法国网站,因此它的食谱都是法语的:tarte aux pommes、poulet curry coco。常规流程是先搜索,再阅读:search_recipes 会给出一个 id,get_recipe 会使用这个标识符。

工具

工具功能
search_recipes按菜品或食材查找食谱。
get_recipe阅读食谱,并可按需适配份数。
scale_ingredients适配任意食材清单,无需向网站发起请求。

该服务只会读取内容,不会在 Marmiton 上发布任何内容。

search_recipes

按菜品或食材搜索食谱。Marmiton 会匹配单词的开头,因此搜索结果取决于网站为该查询分类的内容;如果标题中没有任何搜索词,响应会对此作出说明。

参数类型必填功能
query字符串,最多 200 个字符是要搜索的内容,使用法语。
limit整数,1 到 30,默认值为 10否从此结果页返回的食谱数量。

**返回内容:**包含 id 的条目,供 get_recipe 使用;title;url;以及 image_url,对于已发布但没有照片的食谱,该字段为 null。还会返回 result_count 和 total_available,表示应用 limit 之前此页面上的食谱数量。Marmiton 的 robots.txt 禁止对搜索结果分页,因此每次搜索只会读取一个页面;请缩小搜索范围以查看其他食谱。

get_recipe

完整读取食谱;如果提供了份数,还会调整用量。

参数类型必填功能
id数字字符串二选一search_recipes 返回的 Marmiton 标识符。
url一个 marmiton.org 地址二选一食谱地址;未提供 id 时使用。
servings大于 0 且不超过 500 的数字否按指定份数调整用量。

返回内容:title、url、ingredients、steps、prep_minutes、cook_minutes、total_minutes、category、author、rating 和 nutrition;如果页面未发布相应信息,各字段的值为 null。yield 说明食谱原本的份数以及适配后的份数:original_count、original_text、requested、表示计数单位的 unit,以及所应用的乘数 factor。每种食材都包含 original、text、amount、表示区间的 amountMax、unit,以及取值为 scaled、rounded 或 unscaled 的 scaling。这些数字由该服务计算得出,因此展示时请说明它们已重新计算。nutrition 描述的是已发布食谱本身的营养信息,适用于其原有份数。

scale_ingredients

对任意配料列表应用相同的算术运算,无需查询网站,因此也适用于从书籍或家庭笔记本中抄录的食谱。

参数类型必填作用
ingredients包含 1 到 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,分别统计因四舍五入而改变数值的配料行数。

数量调整

每种配料都会附带一个 scaling 标记,说明数量经过调整后发生了什么变化。

标记含义示例
scaled数值按乘数直接计算得出。3 oeufs ×2 → 6 oeufs
rounded为了便于使用,对数值进行了调整。25 cl de lait ×0,667 → 17 cl de lait
unscaled没有数量,保持原样。sel、coriandre

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

配料可分割的精细程度取决于其性质。法棍可以切成两份、三份或四份;鸡蛋则无法分割。因此,介于这些数值之间的数量会被四舍五入,调整后的食谱与原配方的比例会略有偏差。该行会标记为 rounded,其 note 会说明具体的处理方式。

配置

每个变量都是可选的。它们应放在客户端配置的 env 块中。

变量默认值功能
MARMITON_USER_AGENT项目标识向 Marmiton 标识您的应用,并提供可联系到负责人的地址。
MARMITON_MIN_INTERVAL_MS1000两次请求之间的间隔,范围为 500 到 60000。低于下限的值将被拒绝并改用默认值。
MARMITON_TIMEOUT_MS15000单次请求的超时时间,范围为 1000 到 120000。
MARMITON_MAX_RETRIES3临时失败后的重试次数,范围为 0 到 10。
MARMITON_CACHE_TTL_MS900000页面在内存中的保留时长,范围为 0 到 86400000。
MARMITON_CACHE_MAX_ENTRIES200同时保存在内存中的页面数,范围为 0 到 10000。
MARMITON_MAX_BODY_BYTES8000000读取页面的最大大小(字节),范围为 100000 到 64000000。
MARMITON_LOG_LEVELerrorsilent、error、info 或 debug,输出到错误输出流。

超出范围的值将恢复为默认值,并在错误输出流中写明原因。

错误

每次失败都会带有六种代码之一和一条消息;有助于处理时,还会提供下一步操作建议。

代码发生的情况该怎么做
not_foundMarmiton 已响应,但没有这道食谱。使用 search_recipes 检查标识符。
invalid_input请求发出前,参数已被拒绝。阅读消息,其中会指出相关参数。
rate_limitedMarmiton 要求此客户端降低请求频率。等待所示秒数,然后使用相同参数重试。食谱仍然存在。
parse_failure页面已加载,但缺少预期内容。请在问题跟踪页反馈。
network_error请求未能完成。稍后重试。
timeout请求超时。增大 MARMITON_TIMEOUT_MS。

作为库使用

读取 Marmiton 的层单独发布,包含请求间隔、缓存和错误处理,不绑定任何协议。

import { MarmitonClient } from "mcp-marmiton/client";

const client = new MarmitonClient();
const { data, cached } = await client.getRecipe({ id: "18257" });
console.log(data.title, data.ingredients.length, cached);

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

请求频率与署名

请求逐一发送,彼此之间至少间隔一段时间,无论配置如何,都会遵守这一最低间隔。User-Agent 始终以项目身份和联系人员的地址结尾。所有数据均从 Marmiton 为机器发布的 JSON-LD schema.org 中读取,并避开其 robots.txt 禁止访问的路径。

每条结果都包含食谱标题和地址;如果页面注明了作者,get_recipe 也会提供作者,以及写在同一行的 attribution、标题和地址。

食谱归 Marmiton 及撰写食谱的厨师所有。此 MCP 是一个非官方项目,与 Marmiton 无关联。

隐私

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

开发

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

测试使用生成的 fixtures 运行,不会发送任何请求。实时测试套件 npm run test:live 会为每个路由发送一个请求,并且每晚针对网站本身运行。

贡献

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

许可证

MIT,详见 LICENSE。食谱归 Marmiton 及其作者所有。

评论

支持 Markdown

第一次接触 MCP?

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

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