mcpField
M
mcp-supertoinette

mcp-supertoinette

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

关于 mcp-supertoinette

mcp-supertoinette 将聊天客户端连接到 Supertoinette 法语食谱站点,可搜索食谱、调整份量并查询站点的葡萄酒搭配建议,无需 API 密钥或账户。

主要功能

  1. 01按菜名或食材搜索食谱
  2. 02读取食谱并调整份量
  3. 03分页浏览食谱分类
  4. 04查询葡萄酒搭配
  5. 05缩放任意食材清单

适用场景

  1. 01按食材寻找法语食谱
  2. 02调整多人用餐的食谱份量
  3. 03浏览某个分类中的食谱
  4. 04查看菜品对应的站点酒类建议

MCP 相关

向 MCP 客户端提供 Supertoinette 食谱搜索、详情读取、分类浏览、葡萄酒搭配和食材缩放工具。

配置

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

暂未收录安装方式

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

代码仓库
安装包
npmmcp-supertoinette1.2.0
mcpbmcp-supertoinette-1.2.0.mcpb1.2.0

工具

6

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

参数类型必填说明
idstring是食谱地址中的数字,例如 '4210'。没有食谱编号时,请搜索菜品。
servingsinteger否将用量调整为此份数。省略时,按网站发布的原始用量返回。如果网站的原文中没有可用于换算的数字,则会拒绝此参数。

详细介绍

README 配图

mcp-supertoinette

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

Supertoinette 是一个法国烹饪网站,也是现存最古老的网站之一。它的食谱会列出食材、步骤、准备时间、烹饪时间和静置时间、适用人数,以及菜品照片。除了食谱,网站还设有专门页面,介绍适合搭配菜品的饮品、与菜品相配的葡萄酒,以及葡萄酒所属的风格。

此服务可将聊天客户端连接到该网站。你可以搜索食谱、阅读按餐桌人数调整过食材用量的食谱、浏览分类、逐页阅读分类页面,还可以查询网站建议搭配菜品的饮品。它无需 API 密钥或账户。

法语版


安装

一键安装

在 Cursor 中安装 在 VS Code 中安装

Claude Code

claude mcp add supertoinette -- npx -y mcp-supertoinette

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

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

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

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

-i 会保持 stdin 打开,协议通过它传输;省略 -t,因为 TTY 会改写数据流。容器需要能够通过 HTTPS 向 www.supertoinette.com 发起出站连接,仅此而已:无需卷、端口或凭据。

打包,无需 npm

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

可以询问的内容

  • « 给我找一道小牛肉白酱炖菜的食谱。 »
  • "把那道食谱读给我听,按十人份来。"
  • "这个网站按哪些类别归档食谱?"
  • "牛肉勃艮第炖菜配什么葡萄酒?"
  • "把我祖母笔记本里的这份食材清单扩大三倍。"

Supertoinette 是一个法国网站,因此食谱都是法语。通常的操作路径是先搜索,再查看食谱:每一行都带有一个 id,而 get_recipe 需要这个 id。

工具

工具功能
get_recipe读取一道食谱,并可按要求调整份数。
search_recipes按菜名或食材查找食谱。
list_categories读取网站用于归档食谱的类别。
browse_recipes逐页读取一个类别中的食谱。
get_wine_pairings读取网站建议与某道菜搭配饮用的酒。
scale_ingredients调整任意食材清单的用量,不会向网站发出请求。
get_recipe

完整读取一道食谱;如果提供份数,则会相应调整食材用量。

参数类型必填功能
idstring,1 到 10 个字符是食谱地址中的编号,每一行都会附带此编号。
servingsinteger,1 到 1000否将食材用量调整为指定份数。

返回内容: title,其中会去掉网站标题开头的图标;title_as_published,保留网站原样标题;url;description;published_at;intro,即烹饪步骤上方的介绍文字;steps;prep_minutes、cook_minutes、rest_minutes 和 total_minutes;category;author;以及 rating,页面未注明的字段均为 null。yield 表示食谱原本的份数以及调整后的份数。ingredients 包含各行食材及页面为其分组设置的标题;ingredient_count 统计的就是这些行数。每行的 scaling 值为 scaled、rounded 或 unscaled。

search_recipes

逐页按菜名或食材搜索食谱。

参数类型必填功能
querystring,1 到 120 个字符是法语的菜名或食材。
limitinteger,1 到 39否返回的行数。
pageinteger,1 到 1000否要读取的结果页码;默认读取第一页。
categorystring,1 到 60 个字符否一个类别,拼写须与先前回答中 facets 给出的拼写一致。

返回内容: 各行包含 id(get_recipe 需要此字段)、title、title_as_published 和 url。此外还会返回 page、last_page(网站从当前页链接到的最高页码)、result_count、rows_published(页面在呈现任何行之前所包含的行数)、total_available 和 facets(其中列出了后续搜索可用的类别名称)。切勿自行拼写类别名称:如果网站不认识该名称,就会返回一页空结果。

list_categories

读取网站用于归档食谱的类别。此工具无需参数。

返回内容: categories,其中包含网站两个列表中的条目;category_count 为条目数;以及读取这些类别的 url。将类别传递给 browse_recipes。

browse_recipes

逐页读取一个类别。

参数类型必填说明
categorystring,1 到 80 个字符是类别,取自 list_categories 发布的内容。
limitinteger,1 到 30否返回的行数。
pageinteger,1 到 1000否要读取的页码,默认为第一页。

返回内容: 行数据以及 search_recipes 返回的封装信息,其中 last_page 表示列表到第几页结束。

get_wine_pairings

读取网站根据其撰写的相关页面,为一道菜建议搭配饮用的内容。

参数类型必填说明
idstring,1 到 10 个字符二选一菜品网址中的编号。
pageinteger,1 到 100二选一网站自有菜品列表中的页码。

返回内容: 各条目包含 id、网站为该菜品使用的名称 dish,以及页面开头提到的葡萄酒风格 style;如果页面未提及,则为 null。

scale_ingredients

对任意法语食材列表执行相同的算术换算,无需向网站发出请求。

参数类型必填说明
ingredients由 1 到 200 个字符串组成的数组,每个字符串为 1 到 300 个字符是要换算的行,按照食谱中的写法提供。
factornumber,大于 0 且不超过 100二选一食材数量要乘以的倍数。
from_servingsinteger,1 到 1000二选一列表原本对应的份数。
to_servingsinteger,1 到 1000二选一应供多少人食用。

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

返回内容: 按照 get_recipe 的格式返回换算后的行,每行都包含其 scaling。

换算数量

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

食材能切分到多细取决于食材本身。法棍可以切成两份、三份或四份;鸡蛋则不能分着用。若数量落在两者之间,就会进行四舍五入,换算后的食谱比例也会与原食谱略有不同。该行会包含 rounded,并在备注中说明处理方式。

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

配置

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

变量默认值作用
STO_USER_AGENT项目标识向网站标识你的应用,并提供可联系到相关人员的地址。
STO_MIN_INTERVAL_MS3000两次请求之间的间隔,范围为 3000 到 60000。
STO_TIMEOUT_MS20000单次请求的截止时间,范围为 1000 到 120000。
STO_MAX_RETRIES3临时故障后的重试次数,范围为 0 到 8。
STO_CACHE_TTL_MS900000页面在内存中的保留时长,范围为 0 到 86400000。
STO_CACHE_MAX_ENTRIES200内存中同时保留的页面数,范围为 1 到 5000。
STO_MAX_BODY_BYTES8000000读取的页面大小上限(字节),范围为 100000 到 64000000。
STO_LOG_LEVELerrorsilent、error、info 或 debug,写入 stderr。

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

错误

每种故障都会包含六种代码之一、一条消息,以及在有帮助时提供的提示,指出下一步操作。

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

作为库使用

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

import { SupertoinetteClient } from "mcp-supertoinette/client";

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

searchRecipes、browseRecipes、getRecipe 和 getPairings 均返回 { data, cached },并会抛出携带六种代码之一的错误。这里同样会确保两次请求之间至少间隔三秒。

请求频率与署名

请求逐个发送,间隔至少三秒;无论服务器如何配置,这一间隔下限始终有效。User-Agent 始终以项目标识和可联系到真人的地址结尾。

每条结果都会附上读取内容的页面地址,source 则标明网站。食谱、标题和照片均属于 Supertoinette。

此 MCP 服务是一个非官方项目,与 Supertoinette 毫无关联。

隐私

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

开发

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

测试使用生成的测试样例运行,不会发出网络请求。实时测试套件 npm run test:live 会针对每个路由发出一次请求,并每晚直接对该网站运行。

贡献

欢迎在问题跟踪器中反馈错误、提出问题和分享想法。欢迎提交拉取请求;先提出问题有助于商定修改方案。请参阅 CONTRIBUTING.md。

许可证

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


mcp-supertoinette(法语)

英文版

Supertoinette 是一个法国烹饪网站,也是至今仍在运营的最古老网站之一。它的食谱列出了食材、步骤、准备时间、烹饪时间和静置时间、可供食用的人数,以及菜品照片。除了食谱,它还维护着一系列介绍菜品搭配饮品的页面,为菜品搭配葡萄酒,并说明葡萄酒的风格。

此服务将对话客户端连接到该网站。你可以搜索食谱、查看食谱及按人数调整后的食材、浏览食谱分类、逐页查看某个分类,还可以查询网站为菜品推荐的饮品。无需 API 密钥,也无需账户。

安装

一键安装

在 Cursor 中安装 在 VS Code 中安装

Claude Code

claude mcp add supertoinette -- npx -y mcp-supertoinette

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

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

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

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

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

Bundle,无需 npm

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

可以询问的内容

  • “给我找一道小牛肉白酱炖菜的食谱。”
  • “给我读一下这份适合 10 人食用的食谱。”
  • “网站将食谱归入哪些类别?”
  • “勃艮第炖牛肉配什么酒?”
  • “把我祖母食谱本上的这份食材清单乘以 3。”

Supertoinette 是一个法国网站,因此它的食谱都是法语。常见流程是先搜索,再查看食谱:搜索结果行包含一个 id,get_recipe 会使用这个标识符。

工具

工具功能
get_recipe读取一份食谱,并可按需调整份数。
search_recipes按菜肴或食材查找食谱。
list_categories读取网站对食谱进行分类的类别。
browse_recipes逐页读取某个类别。
get_wine_pairings读取网站推荐与某道菜搭配的饮品。
scale_ingredients调整任意食材清单,无需向网站发出请求。
get_recipe

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

参数类型必需功能
id字符串,1 至 10 个字符是食谱网址中的编号,搜索结果行中会提供。
servings整数,1 至 1000否将食材用量调整为指定份数。

返回内容: title 不含网站标题前的图标,title_as_published 则与网站上的写法完全一致;url;description;published_at;intro,即烹饪步骤上方的介绍文字;steps;prep_minutes、cook_minutes、rest_minutes 和 total_minutes;category;author;以及 rating。页面未注明的字段均为 null。yield 说明食谱原本对应的份数,以及调整后的份数。ingredients 包含食材行及页面用于分组的副标题;ingredient_count 统计食材数量;每行的 scaling 值为 scaled、rounded 或 unscaled。

search_recipes

按菜肴或食材搜索食谱,每次读取一页。

参数类型必需功能
query字符串,1 至 120 个字符是用法语填写菜肴或食材。
limit整数,1 至 39否返回的行数。
page整数,1 至 1000否要读取的结果页,默认读取第一页。
category字符串,1 至 60 个字符否类别,拼写须与先前响应中的 facets 一致。

返回内容: 包含 id 的行,get_recipe 可使用该标识符;还包含 title、title_as_published 和 url。此外还有 page、last_page(网站从当前页链接到的最远页面)、result_count、rows_published(页面在渲染前包含的行数)、total_available 和 facets。facets 提供类别名称的原始写法,可供后续搜索使用。切勿自行拼写类别名称:对于网站不认识的类别,它会返回一个看起来像是没有结果的页面。

list_categories

读取网站为其食谱分类的类别。此工具不接受任何参数。

返回: categories,其中包含两份网站列表中收录的条目数 category_count,以及读取类别的来源 url。类别可传给 browse_recipes。

browse_recipes

逐页读取某个类别。

参数类型必填说明
category字符串,1 至 80 个字符是由 list_categories 发布的类别。
limit整数,1 至 30否要返回的行数。
page整数,1 至 1000否要读取的页码,默认为第一页。

返回: search_recipes 返回的行和封装对象,其中 last_page 表示列表的末页。

get_wine_pairings

根据网站撰写的相关页面,读取网站建议搭配某道菜饮用的酒。

参数类型必填说明
id字符串,1 至 10 个字符二选一菜品网址中的编号。
page整数,1 至 100二选一网站菜品列表中的页码。

返回: 包含 id、网站所用名称 dish,以及页面开头所列葡萄酒风格 style 的条目;如果页面未写明风格,则为 null。

scale_ingredients

对任意法语食材列表应用相同的计算,无需查询网站。

参数类型必填说明
ingredients数组,含 1 至 200 个字符串,每个 1 至 300 个字符是要调整的行,按照食谱中的写法填写。
factor数字,大于 0 且不超过 100二选一数量的乘数。
from_servings整数,1 至 1000二选一原列表对应的用餐人数。
to_servings整数,1 至 1000二选一目标用餐人数。

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

返回: 按 get_recipe 返回的格式调整后的行,每行都包含其 scaling。

数量调整

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

食材可切分的精细程度取决于其性质。法棍可以切成两份、三份或四份;鸡蛋则不能分割。因此,遇到无法整除的数量时会进行四舍五入,调整后的食谱与原比例会有轻微偏差。该行会标记为 rounded,并在说明中注明处理方式。

这些数字是由此服务进行计算的,因此展示时请说明它们经过了重新计算。如果食谱页面没有注明份数,就无法按用餐人数调整,返回结果会说明这一点。

配置

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

变量默认值作用
STO_USER_AGENT项目标识向网站标识您的应用,并提供联系人员的地址。
STO_MIN_INTERVAL_MS3000两次请求之间的间隔,范围为 3000 到 60000。
STO_TIMEOUT_MS20000请求超时时间,范围为 1000 到 120000。
STO_MAX_RETRIES3临时失败后的重试次数,范围为 0 到 8。
STO_CACHE_TTL_MS900000页面在内存中保留的时长,范围为 0 到 86400000。
STO_CACHE_MAX_ENTRIES200同时保留在内存中的页面数,范围为 1 到 5000。
STO_MAX_BODY_BYTES8000000读取的页面最大大小(字节),范围为 100000 到 64000000。
STO_LOG_LEVELerrorsilent、error、info 或 debug,写入错误输出。

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

错误

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

代码发生的情况处理方法
not_found网站已响应,但没有这道菜谱或这个页面。使用 search_recipes 检查标识符。
invalid_input参数在发出任何请求前就被拒绝。阅读消息,其中会指出具体参数。
rate_limited网站要求此客户端降低请求频率。等待指定的秒数,然后使用相同参数再次调用。菜谱仍然存在。
parse_failure页面已加载,但缺少预期内容。在问题跟踪页报告此问题。
network_error请求未能完成。稍后重试。
timeout请求超过了超时时间。增大 STO_TIMEOUT_MS,或减少请求的行数。

作为库使用

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

import { SupertoinetteClient } from "mcp-supertoinette/client";

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

searchRecipes、browseRecipes、getRecipe 和 getPairings 各自返回 { data, cached },并会抛出带有六种代码之一的错误。两次请求之间至少间隔 三秒的限制在此处同样适用。

请求节奏与署名

请求会逐个发出,两次请求之间至少间隔三秒,无论配置如何,此下限都适用。User-Agent 始终以项目标识和联系人员的地址结尾。

每个结果都会附带读取该结果的页面地址,source 则标明网站。菜谱、标题和照片的所有权均属于 Supertoinette。

此 MCP 是一个非官方项目,与 Supertoinette 无关联。

隐私

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

开发

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

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

贡献

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

许可证

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

评论

支持 Markdown

第一次接触 MCP?

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

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