关于 Fyndling
Fyndling MCP 面向中世纪市集爱好者、历史重演者和生活史爱好者,提供欧洲活动、主题地点及历史食谱数据。客户端可按地点、日期和食谱标签等条件查询。
主要功能
- 01按地点、半径和日期搜索活动
- 02搜索城堡、蜜酒厂等地点
- 03检索中世纪历史食谱
- 04提供食谱来源及分类标签
- 05支持分页查询和结果筛选
适用场景
- 01规划附近的中世纪主题活动行程
- 02查找附近的城堡或蜜酒厂
- 03按菜式或饮食条件查阅历史食谱
MCP 相关
服务通过 Streamable HTTP MCP 端点 https://fyndling.de/mcp 提供活动、地点和食谱查询工具,无需认证。
配置
远程服务无需本地安装。选择你使用的客户端,复制配置或使用一键安装。
https://fyndling.de/mcpclaude mcp add --transport http fyndling https://fyndling.de/mcp{"mcpServers":{"fyndling":{"type":"http","url":"https://fyndling.de/mcp"}}}在 Cursor 中打开{"servers":{"fyndling":{"type":"http","url":"https://fyndling.de/mcp"}}}在 VS Code 中打开{"mcpServers":{"fyndling":{"type":"http","url":"https://fyndling.de/mcp"}}}{"mcpServers":{"fyndling":{"serverUrl":"https://fyndling.de/mcp"}}}命令在终端中运行;JSON 粘贴到对应客户端的 MCP 配置后重启。需要授权的服务会在首次连接时提示登录。
工具
9| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| lat | number | 是 | 中心点的纬度 |
| lon | number | 是 | 中心点的经度 |
| radius_km | number | 否 | 搜索半径,单位为公里(默认值为 50) |
| date_from | string | 否 | 筛选条件:开始日期,采用 ISO 8601 格式(例如 2026-06-01) |
| date_to | string | 否 | 筛选:结束日期,ISO 8601 格式(例如 2026-06-30) |
| types | array | 否 | 按事件类型筛选。省略则包含所有类型。 |
| limit | integer | 否 | 最大结果数(默认 20) |
详细介绍
fyndling-mcp
专为中世纪市集爱好者、历史重演者和生活史爱好者打造,也适用于帮助他们规划行程的 AI 助手。Fyndling MCP 为 AI 客户端提供直接访问两个欧洲特色数据集的能力:
- 中世纪活动 — 可按地点 + 半径 + 日期范围查询欧洲和北美 26 个以上国家的 5,800 多场市集、音乐会、城堡体验、生活史活动和文艺复兴集市(每周更新)
- 常设兴趣点 — 1,900 多家蜂蜜酒馆、蜂蜜酒生产商、城堡和中世纪餐厅,也支持按地理半径搜索
- 历史食谱 — 收录来自四十一本食谱书的 6,350 多道食谱,年代约为 1300 至 1598 年,包含现代德语改编版本、结构化食材清单、原始手稿转录,以及用于按菜肴类型、饮食和社会阶层筛选的受控标签词汇表
→ fyndling.de — 提供这些数据的 Web 应用
端点: https://fyndling.de/mcp
传输方式: Streamable HTTP(MCP 规范 2025-03-26)
身份验证: 无
速率限制: 每分钟 60 个请求
快速入门
添加到 MCP 客户端配置中(例如 Claude Desktop 的 claude_desktop_config.json):
{
"mcpServers": {
"fyndling": {
"url": "https://fyndling.de/mcp"
}
}
}
工具
活动与地点
所有列表工具(find_events_near、list_events、find_pois_near、search_recipes)均返回相同的封装结构:total(所有匹配项)、count、offset、sort、has_more、next_offset,以及相应数组(events、pois、recipes)。使用 offset 翻页。排序相同时始终以 id 作为次级排序依据,因此翻页不会跳过或重复条目。错误(未知 id、无效输入)会作为真正的 MCP 错误(isError)返回,不会伪装成普通结果。
活动架构(固定;所有来源的字段均相同):id、name、date_from、date_to(null = 单日活动)、ort、plz、country、lat、lon、geo_precision、venue、category、categories[]、flags[]、cancelled、source_url、fyndling_url、description(列表中为摘要)、extra{}(来源特有的原始字段);可选字段:band、organizers[]、duplicate_ids[]。以某个地点为中心搜索时,会额外返回 distance_km 和 distance_approximate。
category是存储的类别(market、concert、burg_event、renfaire);categories[]还包含基于标志的类别,例如living_history。筛选条件(category、types)使用categories[]检索,因此响应结果与筛选条件始终一致。flags[]包含living_history、beerenweine、free_admission、sold_out,以及派生标志party(例如“Bal Renaissance”等舞蹈和派对之夜,归类为market)。geo_precision由数据推导,未经验证:venue、address、plz或city。多个场馆共用的坐标(例如每座城市仅有一个定位点)归为city。精度不足的活动仍会显示并标记(distance_approximate),但排序时会分别视作距离最多远 5 km(plz)或 10 km(city),因此不会挤掉定位精确的结果。- 抓取内容中的占位文本会以
null返回。
find_events_near
查找地理坐标附近的中世纪活动,并按实际距离、日期和 ID 排序。
| 参数 | 类型 | 必填 | 描述 |
|---|---|---|---|
lat | number | ✓ | 纬度,-90 至 90 |
lon | number | ✓ | 经度,-180 至 180 |
radius_km | number | — | 搜索半径,单位为 km(默认 50,最大 500) |
date_from | string | — | YYYY-MM-DD,有效日历日期。默认:今天(Europe/Berlin) |
date_to | string | — | YYYY-MM-DD,不得早于 date_from |
types | array | — | market、concert、burg_event、renfaire、living_history |
limit / offset | integer | — | 每页数量(默认 20,最大 100)/ 跳过数量 |
include_cancelled | boolean | — | 默认 false。已取消 = DB 标记,或名称/描述中包含 "abgesagt" |
dedupe | boolean | — | 默认 true:隐藏展示重复项(类别、规范化名称、日期和地点相同);保留的条目会列出 duplicate_ids。ID 和抓取器键不会更改 |
日期筛选条件检查时间重叠:开始日期早于 date_from 且仍在进行的多日活动也会被找到。循环市集会作为一个条目显示下一场日期。响应会回显 effective_date_from 和 effective_date_to。输入无效(lat 为 95、"morgen"、日期范围颠倒)时会产生验证错误。
示例 — 查找今年夏天维也纳 80 km 范围内的市集:
{
"lat": 48.2082, "lon": 16.3738,
"radius_km": 80,
"date_from": "2026-06-01", "date_to": "2026-08-31",
"types": ["market"]
}
list_events
按类别、国家和/或日期范围筛选活动,并按开始日期、再按 ID 排序。
| 参数 | 类型 | 必填 | 描述 |
|---|---|---|---|
category | string | — | market、concert、burg_event、renfaire、living_history |
country | string | — | ISO 3166-1 alpha-2 代码(例如 DE、AT、FR、PL) |
date_from / date_to | string | — | YYYY-MM-DD;date_from 默认为今天(Europe/Berlin) |
limit / offset | integer | — | 每页数量(默认 20,最大 100)/ 跳过数量 |
include_cancelled、dedupe | boolean | — | 与 find_events_near 相同 |
get_event
获取单个活动的完整详情(也接受 POI ID):完整描述、organizers、other_dates(附近的同系列活动日期)、nearby_events 和 nearby_pois(各最多 5 个,位于 25 km 范围内,且仅限即将举行的活动)。未知或已删除的 ID 会产生 MCP 错误。
| 参数 | 类型 | 必填 | 描述 |
|---|---|---|---|
id | string | ✓ | 活动 ID(16 位十六进制,例如 a1b2c3d4e5f6a7b8) |
find_pois_near
查找附近的常设中世纪主题地点,并按实际距离、再按 ID 排序。
| 参数 | 类型 | 必填 | 描述 |
|---|---|---|---|
lat / lon | number | ✓ | 坐标(按上述规则验证) |
radius_km | number | — | 默认 100,最大 1000 |
poi_type | string | — | meadery(蜂蜜酒生产商;接受 metkellerei 和 metkellereien 作为别名)、burg(城堡)、ma_gastronomie(中世纪餐厅;国家为单独字段)。输出的 poi_type 始终采用规范名称,并与筛选值相同 |
limit / offset | integer | — | 每页数量(默认 20,最大 100)/ 跳过数量 |
POI 架构:id、name、poi_type、ort、plz、country、state、address、lat、lon、geo_precision、website、website_ok(true/false = 上次链接检查结果,null = 未知)、collected_at、distance_km、distance_approximate、fyndling_url、extra{}(例如城堡的 zustand/slug)。不包含活动字段。
历史食谱
list_recipe_sources
列出所有可用食谱书及其元数据(年份、语言、地区、食谱数量),以及完整的菜品分类体系(原子值 + 别名)。
无参数。
来源(41 本活跃食谱书,按日期排序):
| 键 | 标题 | 年份 | 语言 | 食谱数 |
|---|---|---|---|---|
harpestreng | 烹饪书(Harpestreng 手稿 NKS 66) | ~1300 | 古丹麦语 | 25 |
viandier | Taillevent 的《Viandier》 | ~1300 | 古法语 | 55 |
buch-guter-speise | 《美食之书》 | ~1350 | 中古高地德语 | 101 |
corema_n2 | 纽伦堡,日耳曼国家博物馆,手稿 3227a | ~1389 | 中古高地德语(东中部德语) | 15 |
anonimo_toscano | 托斯卡纳匿名作者(《烹饪之书》) | ~1390 | 托斯卡纳俗语 | 40 |
form-of-cury | 《烹饪之法》 | ~1390 | 中古英语 | 192 |
menagier | 《巴黎家政指南》 | 1393 | 古法语 | 378 |
bockenheim | 《烹饪登记簿》(Johannes von Bockenheim) | ~1433 | 中世纪拉丁语 | 70 |
muenchner_cgm811 | 慕尼黑手稿 Cgm 811 | ~1440 | 早期新高地德语(施瓦本—巴伐利亚) | 4 |
corema_ka2 | 《家用与药用书》(卡尔斯鲁厄,Cod. Donaueschingen 793) | ~1445 | 早期新高地德语(巴伐利亚语,因河下游河谷) | 56 |
rheinfraenkisches_kochbuch | 《莱茵法兰克烹饪书》 | ~1445 | 莱茵法兰克语(中古高地德语) | 76 |
corema_ka1 | 《赖兴瑙烹饪书》(卡尔斯鲁厄,Cod. Aug. pap. 125) | 15 世纪 | 早期新高地德语(阿勒曼尼语) | 104 |
hausbuch-donaueschingen-792 | 《唐纳埃申根手抄本 792 中的家用与药用书》 | ~1450 | 早期新高地德语(阿勒曼尼语,博登湖地区) | 2 |
corema_b4 | 柏林,国家图书馆,Ms. germ. qu. 1187 | ~1450 | 早期新高地德语(巴伐利亚语) | 269 |
corema_w1 | 维也纳,奥地利国家图书馆,Cod. 2897 | ~1450 | 早期新高地德语(巴伐利亚—奥地利语) | 269 |
meister_eberhard | 《埃伯哈德大师烹饪书》 | ~1450 | 早期新高地德语(巴伐利亚语) | 23 |
tegernsee | 《泰根湖食谱书》 | 1453–1534 | 早期新高地德语(巴伐利亚语) | 51 |
meister_hans | 《汉斯大师烹饪书》(巴塞尔大学图书馆,A.N.V. 12) | ~1460 | 早期新高地德语(阿勒曼尼—施瓦本) | 289 |
muenchner_clm15632 | 《罗特修道院烹饪书》(Clm 15632) | 1458/1464 | 早期新高地德语(巴伐利亚语) | 55 |
martino | 《烹饪艺术之书》 | ~1465 | 早期意大利语 | 268 |
koenigsberger_kochbuch | 《柯尼斯堡烹饪书》(条顿骑士团档案馆) | 15 世纪 | 早期新高地德语(巴伐利亚语/东中部地区) | 34 |
muenchner_cgm384 | 慕尼黑手稿 Cgm 384 | ~1470 | 早期新高地德语(阿勒曼尼语) | 83 |
corema_k1 | 《科隆厨房大师指南》(科隆市历史档案馆,Best. 7004, 27) | 15–16 世纪(有争议) | 早期新高地德语(里普阿里亚语/西中部德语) | 24 |
edelike_spijse | 《美好而珍贵的美食》(Wel ende edelike spijse) | ~1475 | 中古荷兰语 | 62 |
muenchner_cgm467 | 《迪特拉姆斯采尔家用书》(Cgm 467) | ~1477 | 早期新高地德语(巴伐利亚语) | 3 |
mondseer_kochbuch | 《蒙德湖烹饪书》(格拉茨大学图书馆,Ms. 1609) | ~1480 | 早期新高地德语(巴伐利亚—奥地利语) | 268 |
muenchner_cgm725 | 慕尼黑手稿 Cgm 725 | 15 世纪末 | 早期新高地德语(巴伐利亚语) | 22 |
corema_so1 | 《索洛图恩厨房大师指南》(索洛图恩中央图书馆,Cod. S 490) | ~1487 | 早期新高地德语(阿勒曼尼语) | 26 |
corema_n1 | 《阿勒曼尼美食小册》 | 1492–1494 | 早期新高地德语(施瓦本语) | 26 |
weinbuch-donaueschingen | 《唐纳埃申根手抄本中的葡萄酒书》 | ~1500 | 早期新高地德语(南莱茵法兰克语) | 28 |
muenchner_cgm349 | 慕尼黑手稿 Cgm 349 | 16 世纪(附录) | 早期新高地德语(巴伐利亚语) | 4 |
muenchner_cgm5919 | 《雷根斯堡烹饪书》(Cgm 5919) | ~1505 | 早期新高地德语(巴伐利亚语) | 104 |
severin | 《烹饪术》(波希米亚烹饪书) | 1535 | 早期捷克语 | 147 |
corema_wo10 | 沃尔芬比特尔,奥古斯特公爵图书馆,Cod. Guelf. 42.3-5. Aug. 4° | 1543 | 早期新高地德语 | 116 |
philippine_welser | 《菲利皮娜·韦尔瑟烹饪书》 | 1543 | 早期新高地德语(东施瓦本语/奥格斯堡语,附有蒂罗尔—巴伐利亚语补充) | 242 |
staindl | 《一部巧妙实用的烹饪书》(Balthasar Staindl) | 1545 | 早期新高地德语(施瓦本语/奥格斯堡语) | 294 |
sabina_welserin | 《萨比娜·韦尔瑟琳烹饪书》 | 1553 | 早期新高地德语(东施瓦本语/奥格斯堡语) | 206 |
stenglerin | 《玛丽亚·施滕格勒烹饪书》 | 1554 | 早期新高地德语(施瓦本语/奥格斯堡语) | 145 |
koch_kellermeisterei | 《烹饪与酒窖管理》 | 1574 | 早期新高地德语 | 110 |
rumpolt | 《一本新烹饪书》(Marx Rumpolt) | 1581 | 早期新高地德语(法兰克福/美因茨) | 2028 |
wecker | 《一本精美的新烹饪书》(Anna Wecker) | 1598 | 早期新高地德语(上德语,安贝格/上普法尔茨) | 50 |
上方 食谱数 列表示每个来源中当前可用的食谱数量。list_recipe_sources 会为每个来源返回两个数值:recipe_count(当前已导入且可搜索的数量)和 recipe_count_original(原稿或版本中的食谱数量;若未知则为 null)。描述中可能会引用原始数量,因此对于仍在导入的来源,两者可能确实不同。语料库按来源逐一审核和发布,因此所有数量都会随时间增加。 |
list_recipe_tags
按类别(dish_type、diet、social_class)列出受控标签词汇表,包含标签、描述和当前食谱数量。在 search_recipes 和 compose_menu 的 tags 参数中使用这些标签 ID。
无参数。
标签组:
| 分组 | 标签 |
|---|---|
dish_type | pasta、reis、brei、beilage、huelsenfruechte、brot |
diet | vegetarisch、vegan、fastenspeise |
social_class | hofkueche、buergerlich、bauernkueche |
beverage | met、methiglyn、bochet、melomel、hippocras |
occasion | festtag、schauspeise |
响应还会列出 uncontrolled_tags:存在于食谱中、但不是有效 tags 筛选值的自由格式编辑/内部标签。
标签 ID 为德语(kebab 风格)。在 search_recipes(tags=[...]) 中原样传入。多个标签按 AND 逻辑组合——tags=["hofkueche", "vegetarisch"] 只会返回同时标记为素食和宫廷菜肴的菜品。当来源明确涉及多个阶层时,同一食谱可以同时带有多个社会阶层标签(典型的 Bockenheim 模式:"et erit bonum pro ciuibus Rusticis et nobilibus" → 同时带有 bauernkueche 和 hofkueche)。
**饮食标签与可选食材:**食谱的基础版本(不含可选食材)决定其标签。如果可选食材会使其不符合标签(例如,素食食谱中的可选肉类和鸡蛋,或纯素食谱中的可选猪油),食谱仍保留该标签,并附带 dietary_note(“基础版本为纯素(不含可选食材);可选添加:鸡蛋、肉类、山羊奶”)。当筛选 dietary 或饮食标签时,此注释会自动显示,也可通过 fields 获取。“Menge nach Belieben”表示用量,而非可选食材。
search_recipes 中的 dietary 筛选器是一个便捷别名:dietary="vegetarian" 等同于 tags=["vegetarisch"],dietary="vegan" 等同于 tags=["vegan"]。请注意,纯素食食谱也带有 vegetarisch 标签,因此 dietary="vegetarian" 会返回这两个类别的食谱。
search_recipes
通过筛选和食材匹配搜索历史食谱。
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
course | 字符串 | — | 参见下方的课程类型 |
difficulty_max | 整数 1–3 | — | 1=简单,2=中等,3=进阶 |
lagerkueche | 布尔值 | — | 仅限适合户外/露营烹饪的食谱 |
source_key | 字符串 | — | 按食谱书键筛选。调用 list_recipe_sources 可查看完整列表(41 个有效来源)。 |
dietary | 字符串 | — | vegetarian(不含肉类/鱼类,可含蛋奶)或 vegan(不含动物制品;按惯例接受杏仁奶和蜂蜜)。纯素食谱也会标记为素食,因此 vegetarian 也包含纯素食谱。等同于 tags=["vegetarisch"] / tags=["vegan"]。 |
tags | 字符串[] | — | 受控词表标签筛选(AND 逻辑,最多 6 个)。词表:pasta、reis、brei、beilage、huelsenfruechte、brot(菜肴类型);vegetarisch、vegan、fastenspeise(饮食类型);hofkueche、buergerlich、bauernkueche(社会阶层)。调用 list_recipe_tags 查看说明。 |
epoch_from | 整数 | — | 来源的最早年份(例如 1300) |
epoch_to | 整数 | — | 来源的最晚年份(例如 1500) |
ingredients | 字符串[] | — | 包含筛选:所有列出的配料都必须存在(AND)。匹配时不区分大小写、变音符号和 ß(Apfel 可匹配 Äpfel);忽略括号备注,例如 Öl (zum Braten der Äpfel),也忽略否定词(在 word/token 模式下,fleischlose Brühe、ohne Fleisch、kein Fleisch 不会匹配 word/token 模式中的 Fleisch);参见 ingredient_match。 |
ingredient_qids | 字符串[] | — | 按 Wikidata QID 精确筛选,例如 ["Q89"] = 苹果(AND)。不受拼写、语言和复数形式影响。对于没有 QID 的配料会漏掉匹配项(参见 qid_coverage)。 |
ingredient_match | word | token | substring | — | word(默认):词语必须位于配料名称某个单词的开头(Apfel 可匹配 Äpfel、Apfelessig,但不匹配 Granatäpfel)。token:词语必须是完整单词(不匹配 Apfelessig)。substring:任意位置均可(也匹配 Granatäpfel、Jakober-Äpfel)。搜索词采用普通复数词干(Birnen = Birne)。 |
query | 字符串 | — | 全文搜索(至少 3 个字符;%、_、\ 等特殊字符按普通标点处理,绝不视为通配符;不含字母或数字的查询不会匹配任何内容;词项之间为 AND 关系,并忽略变音符号差异)。长度 ≤ 4 个字符的词项必须位于单词开头;较长词项可匹配任意位置(Torte 可匹配 Quittentorte,但不匹配 Törtchen)。 |
query_in | 数组 | — | query 的搜索范围:title、text、ingredients、transcript。默认值为 ["title","text","ingredients"]。按词项和字段评分;单词开头的匹配优先于复合词内部的匹配:标题 100/60、配料 30/15、正文 10/5、转录文本 3/1;平分时按 quality_score,再按 id 排序。 |
sort | relevance | quality_score | id | — | 默认有 query 时为 relevance,否则为 id。相关性排序:(1)标题匹配的食谱优先;单词开头的匹配优先于复合词内部的匹配;(2)在无标题匹配的食谱中,配料匹配优先于正文匹配;(3)按 quality_score 降序;(4)按 id 排序。因此,标题匹配的食谱之间仅按 quality_score 排序。所有排序平局时都以 id 决胜,因此分页结果稳定。 |
exclude_courses | 字符串[] | — | 排除这些课程类型 |
exclude_ingredients | 字符串[] | — | 排除含有任一指定配料的食谱(匹配方式与 ingredients 相同) |
related_to | 字符串 | — | 食谱 ID:仅返回与其相关的食谱(参见 get_related);可与其他所有筛选条件组合。每个匹配项都会带有 relation、reason、confidence、quelle;默认按关联强度排序,然后按 quality_score 排序。 |
include_low_confidence | 布尔值 | — | 与 related_to 配合使用:同时包含自动推导且 confidence: low 的关联(默认隐藏;除非通过 relation 请求,否则 similar 也会隐藏) |
relation | 字符串[] | — | 与 related_to 配合使用:限定为 twin、variant、alternative_role、parallel_other_language、similar、depends_on(OR)。 |
dish_role | 字符串[] | — | 食谱所扮演的角色,与 course 无关(OR):tortenboden、pastetenteig、teig_basis、fuellung、garnitur、sauce_basis、bruehe_basis、gelee_basis。取值和数量:list_recipe_tags → dish_roles。 |
limit | 整数 | — | 每页条数,默认 20,最多 100 |
offset | 整数 | — | 跳过的匹配项数量;传入上一条响应中的 next_offset |
detail | slim | standard | — | 默认 slim:id、source_key、source_ref、title_modern、course、lagerküche、difficulty、prep_time_min、tags(始终为数组;没有标签时为 [])、fyndling_url。standard = 完整列表条目(正文、配料、注释、FAQ)。 |
fields | 字符串[] | — | 在默认字段上增加的白名单字段(例如 quality_score、tags、score、matched_ingredients、dish_role、relations = 精简格式 [{id, relation}]);缺失值返回 null/[],未知名称会被拒绝。 |
fields_mode | add | only | — | add(默认)扩展默认字段;only 仅返回 fields(以及 id、fyndling_url)。 |
响应: total(所有匹配结果)、count(当前页结果数)、offset、sort、has_more、next_offset、recipes。使用食材筛选时,每条结果都会包含 matched_ingredients;使用 ingredient_qids 时,响应还会添加 qid_coverage(只有约 75% 的食材行带有 QID——没有 QID 的食谱无法通过该筛选条件找到)。结果按 ID 排序(使用 query 时,标题匹配项排在前面),因此进行宽泛搜索时请检查 has_more。 |
课程类型:
| 值 | 描述 |
|---|---|
starter | 前菜/开胃菜 |
main_beef | 牛肉主菜 |
main_pork | 猪肉主菜 |
main_poultry | 家禽主菜(鸡肉、鹅肉等) |
main_game | 野味主菜(鹿肉、野兔肉等) |
main_fish | 鱼类主菜 |
main_other | 其他主菜 |
main_vegetarian | 素食主菜 |
main_side | 配菜类主菜 |
main_meat | 未注明动物种类的肉类主菜(羊肉、羔羊肉、内脏、混合肉类)——同时也是所有肉类主菜的别名,见下文 |
main | 别名——所有主菜(牛肉、猪肉、家禽、野味、肉类、鱼类、素食、配菜、其他) |
side | 配菜 |
dessert | 甜点/甜食 |
drink / beverage | 饮品(beverage 是 drink 的别名;cellar 工艺品不属于饮品) |
condiment | 酱汁、香料酱 |
other | 杂项 |
main_meat 刻意同时用作存储值和别名:未注明种类的肉也属于肉类,因此 course=main_meat 会返回所有肉类主菜(牛肉、猪肉、家禽、野味和未注明种类的肉类),但不会返回素食或鱼类菜肴。beverage 不包含 cellar。
示例——含肉桂和姜的甜点:
{
"course": "dessert",
"ingredients": ["Zimt", "Ingwer"],
"limit": 5
}
示例——1450 年以前简单易做的野营家禽菜肴:
{
"course": "main_poultry",
"difficulty_max": 1,
"lagerkueche": true,
"epoch_to": 1450
}
示例——最古老来源中的所有食谱(13 世纪丹麦):
{
"source_key": "harpestreng",
"limit": 25
}
示例——15 世纪晚期的佛兰德宫廷菜肴:
{
"source_key": "edelike_spijse",
"course": "main_poultry",
"limit": 10
}
示例——雷根斯堡手稿(Cgm 5919,约 1500 年):
{
"source_key": "muenchner_cgm5919",
"limit": 20
}
示例——纯素甜点(适合斋戒期的甜食,不含动物制品):
{
"course": "dessert",
"dietary": "vegan",
"limit": 10
}
示例——宫廷风格的面包类菜肴(宴席级 Backwerk):
{
"tags": ["hofkueche", "brot"],
"limit": 10
}
示例——农民阶层的斋戒食物(乡村斋戒日菜肴):
{
"tags": ["bauernkueche", "fastenspeise"],
"limit": 20
}
食谱列表字段(为提升列表性能,已去除完整详情;v2 还会从列表结果中移除 applied_delta_ids、quality_score_details、review_dates——get_recipe 仍会返回所有内容):id、source_key、title_modern、course、difficulty、serves、prep_time_min、ingredients、lagerküche、published_at、fyndling_url(指向 fyndling.de 上食谱页面的规范链接)
get_recipe
获取单个食谱的完整详情。
| 参数 | 类型 | 必填 | 描述 |
|---|---|---|---|
id | string | ✓ | 食谱 ID(例如 hkb-001、bgs-001、foc-015、men-042、m384-001、m5919-010) |
完整响应包括:
text_modern— 食谱的现代德语改写版本ingredients— 结构化列表,包含amount、unit、name、original_text、original(中世纪原始文本)transcript— 带有语言和来源信息的中世纪原文annotations— 古语术语表faq— 常见问题解答interpretive_choices— 对含义模糊段落所作的编辑决定scan— 手稿扫描图链接fyndling_url— 指向 fyndling.de 上食谱页面的规范链接(例如https://fyndling.de/rezepte/mar-005/)
食材单位: g、kg、ml、l、TL(Teelöffel/茶匙)、EL(Esslöffel/汤匙)、tsp、tbsp、pinch、piece、slice、clove、bunch、sprig、leaf、cm。显示时使用 original_text;amount 和 unit 仅用于按比例调整份量。
食材对象示例:
{
"original": "ein phunt mandels",
"amount": 500,
"unit": "g",
"name": "Mandeln",
"original_text": "500 g Mandeln"
}
get_related
与某个食谱相关的食谱,以及它们如何相关。推荐用于探索双生食谱、变体和替代方案;get_recipe 为兼容性保留 related_recipes(纯 ID 列表),并新增 related(ID、标题、关系)。
| 参数 | 类型 | 必填 | 描述 |
|---|---|---|---|
id | string | ✓ | 食谱 ID,例如 wo10-042 |
relation | string[] | — | 仅包含这些类型(或)。默认:除 similar 外的所有类型(使用 relation: ["similar"] 查询) |
include_low_confidence | boolean | — | 默认 false:隐藏 confidence: low 的自动推导关系(主要是文本公式匹配);人工整理的关系始终显示 |
detail | slim | standard | — | 默认 slim:不包含 reason 和 fyndling_url(任意 ID 的页面:https://fyndling.de/rezepte/<id>/),每条约 70 个 token。standard 会添加 fyndling_url、source_ref 和完整的 reason |
limit / offset | integer | — | 页面大小(默认 20,最大 100)/跳过条数 |
关系类型: twin(同一道食谱的另一种传承版本)、variant(采用相同技巧,但用量或食材不同)、alternative_role(以另一种做法实现相同功能,例如使用不同的挞底)、parallel_other_language(另一种语言的同一道食谱)、similar(自动生成、未分类,来自人工整理的相关列表)、depends_on(有方向:“如上所述”;条目带有 direction:outgoing = 这道食谱依赖列出的食谱,incoming = 列出的食谱依赖这道食谱)。除 depends_on 外,其他类型均为对称关系。
条目(slim): id、title_modern、source_key、course、difficulty、prep_time_min、relation、confidence、quelle、direction(仅适用于 depends_on);standard 会添加 fyndling_url、source_ref 和 reason(一句话,摘自描述差异的食谱备注)。关于 confidence(high/medium/low)和 quelle(curated = 对照食谱文本逐条核查,auto = 根据文本引用、对照表和相关列表批量推导;两者都不是最终的人工结论)的详细信息。排序:关系强度,然后是 quality_score,最后是 id。每种关系类型中,每道食谱只出现一次;仅当两种关系均为人工整理且描述不同内容时,一对食谱才会有两种关系(例如,wo10-044 是 wo10-042 的 variant,并且 depends_on 它)。total 精确统计可分页浏览的条目数。封装结构与 search_recipes 相同。未知 ID 会导致 MCP 错误。
compose_menu
根据历史食谱搭配多道菜单,每道菜选用一道食谱。每道菜的选择顺序为:与此前已选菜品的食材重叠最少;其次,优先选择菜单中尚未使用的食谱书(在品质允许时混合来源);最后,选择 quality_score 最高的食谱。每道菜的候选项为匹配结果中评价最高的 200 道。
| 参数 | 类型 | 必填 | 描述 |
|---|---|---|---|
courses | string[] | ✓ | 按顺序排列的菜品列表,1–6 项(使用上文中的菜品类型值) |
persons | integer | — | 用餐人数。仅回显——不会按人数缩放用量。 |
detail | slim | standard | — | 默认值为 slim(id、标题、菜品、来源、难度、准备时间、quality_score、URL;3 道菜约 400 个 token)。standard 会返回完整条目(每道菜约 8k 个 token)。 |
max_difficulty | integer 1–3 | — | 任意菜品的最高难度 |
lagerkueche | boolean | — | 仅限适合营地烹饪的食谱 |
dietary | string | — | vegetarian 或 vegan——应用于每道菜(纯素食谱也会标记为素食) |
tags | string[] | — | 应用于每道菜的受控词表标签(AND 逻辑,最多 6 个)。适用于主题菜单,例如,["hofkueche"] 用于宫廷宴席,或 ["bauernkueche"] 用于农民阶层餐食。词表请参见 list_recipe_tags。 |
epoch_from | integer | — | 来源年份下限 |
epoch_to | integer | — | 来源年份上限 |
示例——适合 8 人的 4 道菜晚餐,仅限 14 世纪:
{
"courses": ["starter", "main_fish", "main_poultry", "dessert"],
"persons": 8,
"epoch_from": 1300,
"epoch_to": 1400
}
示例——适合 6 人的素食 3 道菜菜单:
{
"courses": ["starter", "main_vegetarian", "dessert"],
"persons": 6,
"dietary": "vegetarian"
}
示例——宫廷宴席(适合 12 人的 5 道菜 Hofküche 晚餐):
{
"courses": ["starter", "main_fish", "main_poultry", "main_game", "dessert"],
"persons": 12,
"tags": ["hofkueche"]
}
覆盖范围
**活动:**德国、奥地利、瑞士、法国、波兰、捷克、意大利、西班牙、葡萄牙、英国、爱尔兰、比利时、荷兰、卢森堡、丹麦、瑞典、挪威、芬兰、爱沙尼亚、立陶宛等地的活动,以及美国、加拿大、墨西哥等地的文艺复兴集市。
**食谱:**40 部烹饪书,涵盖古丹麦语、古法语、中高地德语、中古英语、托斯卡纳俗语、拉丁文、中古荷兰语、早期新高地德语(巴伐利亚语、阿勒曼尼—施瓦本语、莱茵—法兰克尼亚语、里普阿里亚语)、早期意大利语和早期捷克语;来源包括哥本哈根、巴黎、伦敦、维尔茨堡、佛罗伦萨、罗马教廷、根特、科隆、索洛图恩、上莱茵地区、意大利北部、布拉格、美因河畔法兰克福,以及一系列密集分布于德国南部的手稿:慕尼黑(BSB Cgm 384、467、725、811、5919、Cgm 349、Clm 15632)、泰根湖、因河畔罗特、迪特拉姆斯策尔、雷根斯堡、赖兴瑙/博登湖地区(Karlsruhe, Cod. Aug. pap. 125)、下因河谷(Karlsruhe, Cod. Donaueschingen 793),以及条顿骑士团柯尼斯堡残篇。时间跨度为 13 至 16 世纪。
著名来源:Harpestreng 手稿(NKS 66,约 1300 年)是北欧现存最早的烹饪书。Taillevent 的《Le Viandier》(约 1300 年)是中世纪最具影响力的法国宫廷烹饪书之一。Johannes von Bockenheim 的《Registrum Coquine》(约 1433 年,BnF Ms. Latin 7054)是马丁五世教廷的一部拉丁文汇编,明确按社会阶层标注食谱——“pro magnatibus”“pro communibus”“pro rusticis”。根特手稿(BHSL.HS.1035,约 1475 年)是那个时代唯一完整保存下来的中古荷兰语食谱集。《泰根湖膳食书》(BSB Cgm 8137,1453–1534 年)记录了巴伐利亚本笃会修道院的饮食,并包含已知最早的 Rutschart(即今天的 Ritschert)这一名称的书面记录。德国南部的手稿群(慕尼黑/雷根斯堡/泰根湖)使 Fyndling 成为规模最大的 15 至 16 世纪德国烹饪书食谱结构化数字语料库之一。
许可与署名
活动数据汇总自公开来源;不保证准确性——请务必向主办方核实。
食谱文本和现代改编:© Fyndling,CC BY-SA 4.0。中世纪原文属于公有领域。
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。