关于 mcp-pequerecetas
mcp-pequerecetas 将西班牙家庭食谱网站 Pequerecetas 接入聊天客户端,适合查找食谱并按人数调整用量。它还可浏览分类,并缩放现有的西班牙语食材清单,无需 API 密钥或账户。
主要功能
- 01按菜名或食材搜索食谱
- 02读取食谱并调整份量
- 03浏览分类及其选项
- 04缩放西班牙语食材清单
适用场景
- 01按人数调整食谱用量
- 02按饮食、场合或烹饪器具查找食谱
- 03缩放已有的西班牙语食材清单
MCP 相关
作为 MCP 服务,它向客户端提供食谱搜索、读取、分类浏览和食材用量缩放工具。
配置
本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。
我们还没有获取到这个服务的安装包或远程地址,请按项目 README 中的说明安装。
工具
5收录的工具列表 · 更新于 今天
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| id | string | 是 | 菜谱地址中的 slug,来自 search_recipes 或 browse_recipes。 |
| servings | integer | 否 | 将用量调整为此份数,最多 1000 份。省略时,返回已发布菜谱的原始用量。 |
详细介绍
mcp-pequerecetas
Pequerecetas 是一个面向家庭的西班牙家常菜网站。它收录了数千道食谱,包含食材、步骤和照片,并按适用的饮食类型、烹饪所用的厨具、制作场合以及食用者的年龄分类,年龄范围从 6 个月起。
此服务将聊天客户端连接到该网站。你可以搜索食谱、阅读食谱并按用餐人数调整食材用量、列出各分类体系提供的取值、逐页浏览分类页面,还可以按比例调整你已有的任意西班牙语食材清单。无需 API 密钥或账户。
安装
一键安装
Claude Code
claude mcp add pequerecetas -- npx -y mcp-pequerecetas
Claude Desktop、Cursor 以及任何使用标准配置格式的客户端
{
"mcpServers": {
"pequerecetas": {
"command": "npx",
"args": ["-y", "mcp-pequerecetas"]
}
}
}
需要 Node 24 或更高版本,无需设置环境变量。
使用 Docker
{
"mcpServers": {
"pequerecetas": {
"command": "docker",
"args": ["run", "-i", "--rm", "ghcr.io/smeet666/mcp-pequerecetas:1.1.0"]
}
}
}
-i 会保持标准输入开启,协议通过标准输入传输;省略 -t 是因为 TTY 会改写数据流。容器需要能够通过 HTTPS 访问 www.pequerecetas.com,除此之外不需要任何东西:无需卷、端口或凭据。
打包版本,无需 npm
从最新版本下载 mcp-pequerecetas-1.1.0.mcpb 并打开。支持 MCP bundle 的客户端会自行安装,无需 npm,也无需编辑配置文件。bundle 包含其依赖项,因此安装时不会下载任何内容。
你可以这样提问
- “给我找一道西班牙海鲜饭食谱。”
- “把这道食谱按 8 人份读给我听。”
- “这个网站上有什么可以用空气炸锅做的菜?”
- “给我看看它归类在 6 个月宝宝名下的泥糊。”
- “把这份西班牙语食材清单的用量扩大到 3 倍。”
Pequerecetas 使用西班牙语撰写,其搜索会匹配页面所用的词语,因此需要用西班牙语查找食谱。常规流程是从搜索或分类体系找到食谱:结果行包含一个 id,而 get_recipe 接收该 id。
工具
| 工具 | 功能说明 |
|---|---|
get_recipe | 读取食谱板块中的一页,并按请求重新计算用量。 |
search_recipes | 按菜品或食材查找食谱。 |
list_facets | 列出各分类体系提供的值。 |
browse_recipes | 逐页读取一个分类体系。 |
scale_ingredients | 重新计算任意西班牙语食材清单的用量,无需请求网站。 |
get_recipe
读取食谱板块中的一页;如果指定了份数,则重新计算食材用量。
| 参数 | 类型 | 必填 | 功能说明 |
|---|---|---|---|
id | string,1 至 200 个字符 | 是 | 食谱地址中的 slug,与列表项中的内容一致。 |
servings | integer,1 至 1000 | 否 | 将用量重新计算为指定份数。 |
返回内容: kind,其值为 recipe 或 collection。网站会在此类地址发布这两种内容,并以相同方式介绍它们,因此可通过此字段区分:合集是收录其他食谱的文章,返回的字段为 headings 和 recipes(即它所指向的列表项),而非食谱字段。
食谱包含 source_shape:如果网站为搜索引擎发布的结构化区块中包含食材,则值为 structured;如果食材是从页面正文中读取的,则值为 article,而该网站的大多数食谱都采用这种方式。接下来是 title、url、description、published_at、modified_at、prep_minutes、cook_minutes、total_minutes、categories、cuisines、keywords、author、author_url、rating、nutrition 和 images;若页面没有说明相应内容,则值为 null 或空值。yield 说明食谱原本适用的份数以及重新计算后的份数;如果页面未说明份数,则返回的 factor 为 1,并附注说明原因。ingredients 中的每一项都包含 scaling,其值为 scaled、rounded 或 unscaled;还包含 is_equipment,用于标记该项是否为工具,而非食材。
search_recipes
按菜品或食材搜索食谱。
| 参数 | 类型 | 必填 | 功能说明 |
|---|---|---|---|
query | string,1 至 120 个字符 | 是 | 西班牙语菜品或食材名称。 |
limit | integer,1 至 60 | 否 | 返回的列表项数量。 |
返回内容: 包含 id(可供 get_recipe 使用)、title、url 和 image_url 的列表项。此外还包含已返回列表项的 result_count,以及始终为 null 的 total_available:网站不会发布搜索匹配结果的总数。网站的搜索结果只有一页,再请求第二页时会再次返回第一页,因此这些就是该查询能返回的全部列表项。其中一些列表项是收录食谱的文章,get_recipe 会将其标记为 collection。
list_facets
列出网站浏览食谱所用的分类值,这些值读取自各分类发布的站点地图。
| 参数 | 类型 | 必填 | 作用 |
|---|---|---|---|
facet | string,至少 1 个字符 | 否 | 一个分类。不填时返回全部八个。 |
这些分类为 dieta、edad、ingrediente、ocasion、recetas-de、tecnica、tipo-de-cocina 和 tipo-plato:饮食类型、食用者的年龄、主要食材、场合、一天中的时段、厨具、菜系和菜肴种类。
返回内容: facets,其中每项包含 name、value_count 和 values,而 value 是 browse_recipes 所用的 slug。各值按网站发布的顺序排列。读取全部八个分类,每个分类需要一次请求。无法读取的分类会列在 notes 中,并从 facets 中省略,这样缺少一个分类的列表就不会被误认为网站只有七个分类。
browse_recipes
读取某个分类中食谱的一页。
| 参数 | 类型 | 必填 | 作用 |
|---|---|---|---|
facet | string,至少 1 个字符 | 是 | 要浏览的分类。 |
value | string,1 到 120 个字符 | 是 | 来自 list_facets 的 slug,例如 thermomix。 |
page | integer,1 到 200 | 否 | 要读取的页码,默认为第一页。 |
返回内容: 返回与 search_recipes 相同结构的行,其中 page_served 表示网站实际提供的页码,has_more 表示网站自身的分页是否还有下一页;total_available 始终为 null,因为网站不会在这些页面上显示总数。网站使用自己的 slug,因此手动构造的 slug 会指向网站没有的页面,并返回 not_found。这些分类不能组合:网站不支持同时查询两个分类。
scale_ingredients
按比例调整一组西班牙语食材条目。不访问网站。
| 参数 | 类型 | 必填 | 作用 |
|---|---|---|---|
ingredients | 由 1 到 200 个字符串组成的数组 | 是 | 要调整的条目,按原文填写。 |
factor | 大于 0 且不超过 1000 的数字 | 二选一 | 数量的乘数。 |
from_servings | 1 到 1000 的整数 | 二选一 | 这份清单适用于多少人。 |
to_servings | 1 到 1000 的整数 | 二选一 | 应适用于多少人。 |
请提供 factor,或同时提供 from_servings 和 to_servings。不能同时指定这两种方式,因为它们可能要求不同的结果。
返回内容: 每一行都包含 text(调整后的文本)、original(输入的原文)、amount、amount_max、unit 和 scaling,后者说明结果的准确性:计算结果恰好吻合时为 scaled;为便于厨房计量而调整数值时为 rounded;该行没有数量时为 unscaled。is_equipment 用于标记提及工具的条目。此外还会返回 scaled_count、rounded_count 和 unscaled_count。不同单位制之间不会进行换算,像 pizca 这样的近似计量单位会保留厨师给出的份量。
配置
| 变量 | 默认值 | 范围 | 作用 |
|---|---|---|---|
PQR_USER_AGENT | 未设置 | 添加到此服务自身的 User-Agent 前面。 | |
PQR_MIN_INTERVAL_MS | 3000 | 3000 至 60000 | 两次请求之间的间隔(毫秒)。 |
PQR_TIMEOUT_MS | 20000 | 1000 至 120000 | 单次请求允许耗时多久。 |
PQR_MAX_RETRIES | 3 | 0 至 8 | 网站未响应时尝试请求的次数。 |
PQR_CACHE_TTL_MS | 900000 | 0 至 86400000 | 读取结果的缓存时长。设为 0 会关闭缓存。 |
PQR_CACHE_MAX_ENTRIES | 200 | 1 至 5000 | 同时缓存的读取结果数。 |
PQR_MAX_BODY_BYTES | 8000000 | 100000 至 64000000 | 可读取页面的最大字节数。 |
PQR_LOG_LEVEL | error | silent、error、info、debug | 输出到 stderr 的内容。 |
间隔下限为 3000 毫秒。低于此值会被拒绝并采用默认值;这一点会在 stderr 中说明,而不会静默处理。
错误
| 代码 | 含义 | 处理方法 |
|---|---|---|
not_found | 网站在该地址没有内容。 | 对照 search_recipes 检查 slug。 |
invalid_input | 参数无法生成请求。 | 消息会指出出错的参数。 |
rate_limited | 网站要求此客户端放慢请求速度。 | 等待后重试。请求的内容仍然存在。 |
parse_failure | 页面格式无法读取。 | 请反馈此问题;网站可能已发生变化。 |
network_error | 请求未能完成。 | 请重试。 |
timeout | 未能在规定时间内收到响应。 | 请重试,或调高 PQR_TIMEOUT_MS。 |
作为库使用
读取层单独发布,包含自己的请求节奏控制、缓存和错误术语,不附带任何协议。
import { PequerecetasClient } from "mcp-pequerecetas/client";
const client = new PequerecetasClient();
const read = await client.getRecipe("paella-de-marisco");
无需依赖其他内容即可运行;它从环境中读取配置,并将诊断信息发送到 stderr。对于希望在代码中设置配置的调用方,可从同一入口点导入 loadConfig 和 createLogger:
import { createLogger, loadConfig, PequerecetasClient } from "mcp-pequerecetas/client";
const client = new PequerecetasClient({
config: { ...loadConfig(), minIntervalMs: 5000 },
logger: createLogger("debug"),
});
每次读取都会返回 { data, cached },其中 cached 表示结果来自缓存,而非网站。
请求节奏与署名
一次只发送一个请求,两次请求间隔三秒;如果网站施加限制,间隔会延长。User-Agent 中包含项目名称、版本,以及可供联系的地址。
Pequerecetas 可免费阅读,并自行承担托管费用。向他人展示食谱时,请注明网站并链接到食谱来源页面。
此服务与 Pequerecetas 无关联。
隐私
不会收集任何信息。此服务只读取 www.pequerecetas.com,默认将读取内容保存在内存中 15 分钟,不会写入磁盘,并将诊断信息发送到 stderr。它不携带任何凭据,因为网站不需要凭据。请参阅 PRIVACY.md。
开发
npm install
npm run build:fixtures
npm test
npm run coverage
npm run check
测试套件读取的语料由 scripts/build-fixtures.mjs 生成,其中包含虚构食谱,因此这里不会存储任何第三方内容。实时测试套件通过 PQR_LIVE=1 运行,每个路由发送一个请求。
贡献
欢迎提交问题和拉取请求。请参阅 CONTRIBUTING.md。
许可证
MIT。请参阅 LICENSE。
mcp-pequerecetas(法语)
Pequerecetas 是一个西班牙家庭烹饪网站。它收录了数千道食谱,附有食材、步骤和照片,并根据适合的饮食类型、烹饪器具、制作场合以及食用者的年龄(从 6 个月起)对每道食谱进行分类。
此服务将对话客户端连接到该网站。你可以搜索食谱、阅读食谱并按用餐人数调整用量、列出每个分类体系公布的值、逐页浏览某个分类体系,还可以调整任何已有的西班牙语食材清单。它不需要 API 密钥或账户。
安装
一键安装
Claude Code
claude mcp add pequerecetas -- npx -y mcp-pequerecetas
Claude Desktop、Cursor 以及所有采用标准配置格式的客户端
{
"mcpServers": {
"pequerecetas": {
"command": "npx",
"args": ["-y", "mcp-pequerecetas"]
}
}
}
需要 Node 24 或更高版本,且无需设置任何环境变量。
使用 Docker
{
"mcpServers": {
"pequerecetas": {
"command": "docker",
"args": ["run", "-i", "--rm", "ghcr.io/smeet666/mcp-pequerecetas:1.1.0"]
}
}
}
-i 会保持 stdin 开启,协议通过它传输;不使用 -t,因为 TTY 会重写数据流。容器需要能够通过 HTTPS 出站连接到 www.pequerecetas.com,除此之外不需要任何东西:不需要卷、端口或凭据。
Bundle,无需 npm
从最新发布版本下载 mcp-pequerecetas-1.1.0.mcpb 并打开。支持 MCP bundles 的客户端会自动完成安装,无需 npm,也无需修改配置文件。bundle 包含其依赖项,因此安装时不会下载任何内容。
可以这样询问
- “Búscame una receta de paella de marisco.”
- “请把这道食谱读给我听,按 8 人份计算。”
- “这个网站上有什么适合用空气炸锅烹饪的菜?”
- “给我看看它归类在 6 个月以下的泥糊食物。”
- “把这份西班牙语食材清单的用量乘以 3。”
Pequerecetas 使用西班牙语编写,其搜索会比对页面中的词语,因此需要用西班牙语查找食谱。通常的流程是从搜索或分类体系找到食谱:每条结果都带有一个 id,而 get_recipe 接受这个 id。
工具
| 工具 | 功能 |
|---|---|
get_recipe | 阅读食谱版块中的页面,并按需调整用量。 |
search_recipes | 按菜品或食材查找食谱。 |
list_facets | 列出每个分类体系公布的值。 |
browse_recipes | 逐页浏览某个分类体系。 |
scale_ingredients | 调整西班牙语食材清单的用量,无需发起请求。 |
get_recipe
读取食谱栏目中的页面;如果提供了份数,则按比例调整食材用量。
| 参数 | 类型 | 必填 | 作用 |
|---|---|---|---|
id | 字符串,1 至 200 个字符 | 是 | 食谱 URL 中的 slug。 |
servings | 整数,1 至 1000 | 否 | 将用量按此份数进行调整。 |
返回: kind,值为 recipe 或 collection。该网站会在这类地址发布这两种页面,且对它们的描述方式相同,因此由此区分:合集是一篇汇集其他食谱的文章,返回 headings 和 recipes(即它所指向的条目),而不是食谱字段。
食谱包含 source_shape:当页面发布给搜索引擎的区块包含食材时,值为 structured;当食材从页面正文中读取时,值为 article,该网站的大多数食谱都将食材放在正文中。其余字段依次为 title、url、description、published_at、modified_at、prep_minutes、cook_minutes、total_minutes、categories、cuisines、keywords、author、author_url、rating、nutrition 和 images;页面未说明的字段为 null 或空值。yield 表示食谱原本适用的份数以及调整后的份数;如果页面未说明份数,则返回的 factor 为 1,并附带说明这一点的备注。每条 ingredients 都包含 scaling,值为 scaled、rounded 或 unscaled,以及 is_equipment,用于标记该条目指的是器具而非可食用物品。
search_recipes
按菜肴或食材搜索食谱。
| 参数 | 类型 | 必填 | 作用 |
|---|---|---|---|
query | 字符串,1 至 120 个字符 | 是 | 用西班牙语输入菜肴或食材。 |
limit | 整数,1 至 60 | 否 | 要返回的条目数。 |
返回: 条目包含 id(可传给 get_recipe)、title、url 和 image_url。此外还有 result_count(已返回的条目数)和 total_available,后者始终为 null:该网站不会公布搜索结果总数。该网站的搜索仅提供单页,且对第二页请求会原样返回第一页,因此这些就是它针对该查询提供的全部条目。有些条目是汇集多个食谱的文章,get_recipe 会将其作为 collection 返回。
list_facets
列出该网站浏览食谱时使用的值,这些值从每个分类体系发布的站点地图中读取。
| 参数 | 类型 | 必填 | 作用 |
|---|---|---|---|
facet | 字符串,至少 1 个字符 | 否 | 一个分类体系;未提供时返回全部八个。 |
分类体系包括 dieta、edad、ingrediente、ocasion、recetas-de、tecnica、tipo-de-cocina 和 tipo-plato:饮食方式、用餐者的年龄、主要食材、场合、一天中的时段、器具、菜系和菜肴类型。
返回: facets,每项包含 name、value_count 和 values;其中 value 是 browse_recipes 使用的 slug。值的顺序与网站发布时一致。读取八个分类体系需要每个分类体系各发起一次请求。无法读取的分类体系会列在 notes 中,并从 facets 中省略,以免缺少一个分类体系的列表被误认为是只有七个分类体系的网站。
browse_recipes
读取某个分类体系中的食谱页面。
| 参数 | 类型 | 必需 | 作用 |
|---|---|---|---|
facet | 字符串,至少 1 个字符 | 是 | 要浏览的分类体系。 |
value | 字符串,1 至 120 个字符 | 是 | 来自 list_facets 的 slug,例如 thermomix。 |
page | 整数,1 至 200 | 否 | 要读取的页面,默认为第一页。 |
返回: 返回 search_recipes 所提供格式的行,其中 page_served 表示网站实际提供的页面,has_more 表示其分页中是否还有下一页,而 total_available 始终为 null,因为网站不会在这些页面上显示总数。网站会自行生成 slug,因此手动构造的 slug 会指向网站没有收录的页面,并返回 not_found。各分类体系之间无法交叉查询:网站不提供同时查询两个分类体系的方法。
scale_ingredients
按比例调整西班牙语食材行的用量。此工具不会连接任何网站。
| 参数 | 类型 | 必需 | 作用 |
|---|---|---|---|
ingredients | 由 1 至 200 个字符串组成的数组 | 是 | 要调整用量的行。 |
factor | 数字,大于 0 且不超过 1000 | 二选一 | 用来乘以用量的数值。 |
from_servings | 整数,1 至 1000 | 二选一 | 原食谱的份数。 |
to_servings | 整数,1 至 1000 | 二选一 | 目标份数。 |
提供 factor,或同时提供 from_servings 和 to_servings。同时指定这两种方式会被拒绝,因为它们可能要求不同的结果。
返回: 每一行都包含当前文本 text、原始输入 original、amount、amount_max、unit,以及体现结果准确性的 scaling:算术结果精确时为 scaled,为便于厨房计量而调整数值时为 rounded,该行不包含用量时为 unscaled。is_equipment 标记名称为器具的行。此外还会返回 scaled_count、rounded_count 和 unscaled_count。不会在不同计量单位体系之间转换,而像 pizca 这样的近似计量单位会保留厨师给出的量。
配置
| 变量 | 默认值 | 范围 | 作用 |
|---|---|---|---|
PQR_USER_AGENT | 未设置 | 添加到服务器的 User-Agent 前缀。 | |
PQR_MIN_INTERVAL_MS | 3000 | 3000 至 60000 | 两次请求之间的间隔(毫秒)。 |
PQR_TIMEOUT_MS | 20000 | 1000 至 120000 | 请求的最长持续时间。 |
PQR_MAX_RETRIES | 3 | 0 至 8 | 请求无响应时的重试次数。 |
PQR_CACHE_TTL_MS | 900000 | 0 至 86400000 | 读取结果的保留时长。设为零会关闭缓存。 |
PQR_CACHE_MAX_ENTRIES | 200 | 1 至 5000 | 同时保留的读取结果数量。 |
PQR_MAX_BODY_BYTES | 8000000 | 100000 至 64000000 | 可读取的最大页面大小,单位为字节。 |
PQR_LOG_LEVEL | error | silent、error、info、debug | 输出到 stderr 的内容。 |
间隔下限为 3000 毫秒。低于此值的设置会被拒绝并采用默认值;这一情况会在 stderr 中说明,而不会静默处理。
错误
| 代码 | 含义 | 后续操作 |
|---|---|---|
not_found | 网站上没有这个地址对应的内容。 | 使用 search_recipes 检查 slug。 |
invalid_input | 参数无法生成请求。 | 消息会指出相关参数。 |
rate_limited | 网站要求降低请求频率。 | 等待后重试。请求的内容仍然存在。 |
parse_failure | 页面以无法读取的形式返回。 | 请报告此问题;网站可能已发生变化。 |
network_error | 请求未能完成。 | 重试。 |
timeout | 未能及时收到响应。 | 重试,或增大 PQR_TIMEOUT_MS。 |
作为库使用
读取层单独发布,包含请求间隔、缓存和错误术语,不绑定任何协议。
import { PequerecetasClient } from "mcp-pequerecetas/client";
const client = new PequerecetasClient();
const read = await client.getRecipe("paella-de-marisco");
无需配置即可构建;它会从环境变量读取设置,并将诊断信息输出到 stderr。偏好在代码中
设置这些值的用户,可以从同一入口点使用 loadConfig 和 createLogger:
import { createLogger, loadConfig, PequerecetasClient } from "mcp-pequerecetas/client";
const client = new PequerecetasClient({
config: { ...loadConfig(), minIntervalMs: 5000 },
logger: createLogger("debug"),
});
每次读取都会返回 { data, cached },其中 cached 表示响应来自缓存,而非网站。
请求频率与署名
一次只发出一个请求,每次请求间隔三秒;网站要求降低请求频率时,间隔会相应延长。User-Agent 中包含项目名称、版本和联系地址。
Pequerecetas 免费提供阅读内容,并自行承担托管费用。向他人展示食谱时,请注明网站并链接到食谱来源页面。
此服务与 Pequerecetas 无关联。
隐私
不会收集任何信息。服务仅读取 www.pequerecetas.com,不会访问其他主机;默认将读取内容保存在内存中十五分钟,不写入磁盘,并将诊断信息输出到 stderr。服务不携带任何标识符,因为网站不要求提供标识符。请参阅 PRIVACY.md。
开发
npm install
npm run build:fixtures
npm test
npm run coverage
npm run check
测试套件读取的数据集由 scripts/build-fixtures.mjs 编写,包含虚构的食谱,因此这里不存储任何第三方内容。实时测试套件在 PQR_LIVE=1 时运行,每条路由发送一个请求。
贡献
欢迎提交 issue 和 pull request。请参阅 CONTRIBUTING.md。
许可证
MIT。请参阅 LICENSE。
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。