Back to the catalog

Menus Recommender

全球美食加权随机推荐:基于 396 道菜的知识库,给出多样化的就餐推荐。

Open source Open in the app JSON README (API)

About

全球美食加权随机推荐:基于 396 道菜的知识库,给出多样化的就餐推荐。

Details

Kind
MCP servers
Topic
No topic detected
Publisher
spyyps
Origin
official
Category
ferramentas
Transport
local
Version
1.0.1
Last push
2026-06-16T06:21:21Z
Repository state
ativo
Language
Python
Added
2026-08-29 04:01:26
Updated
2026-08-29 04:01:26
Origin id
io.github.spyyps/menus-recommender

README

# 环球美食推荐 Plugin

一个 AI agent 插件:当用户表达就餐意向(「推荐晚餐」「不知道吃什么」「想吃点辣的」),基于 462 道菜的全球美食知识库做加权随机推荐。

- **零依赖**:纯 Python 3 标准库
- **跨 agent**:Claude Code(plugin)+ Gemini CLI(GEMINI.md)+ 任何 MCP 兼容 agent(规划中)
- **智能兜底**:本地知识库 → 自动放宽 → 网络搜索 → LLM 常识,4 层兜底
- **去偏置 + 多样性**:避免大菜系(如中餐)压制小菜系;避免推荐 3 道全是同一菜系

## 快速测试

```bash
python3 scripts/recommender.py --count 3 --keywords "辣,牛肉"
```

返回 JSON:

```json
{"dishes": [{"id": "...", "name": "麻婆豆腐", "price": 38, "cuisine": "川菜", ...}, ...], "exhausted": false, ...}
```

完整参数:

```bash
python3 scripts/recommender.py --help
```

## 安装到不同 AI Agent

### Claude Code

**方式 A:自建 marketplace(推荐)**

```
/plugin marketplace add spyyps/recommend-dish
/plugin install menus-recommender@spyyps-recommend-dish
```

安装后在任意目录的 Claude Code 会话里说「推荐晚餐」「想吃点辣的」即可触发。
后续更新插件:`/plugin update menus-recommender`。

**方式 B:本地 git clone**

```bash
git clone https://github.com/spyyps/recommend-dish ~/.claude/plugins/menus-recommender
```

### Gemini CLI

```bash
git clone https://github.com/spyyps/recommend-dish
cd recommend-dish
gemini   # 在本目录运行 Gemini CLI,会自动加载 GEMINI.md
```

### Cursor / Codex

待添加(参考 `.cursor-plugin/` 与 `.codex-plugin/` 的多 manifest 适配,第二阶段交付)。

### MCP 兼容的任意 Agent

适用于 Claude Desktop / Cline / Cursor / Continue 等任何 MCP 客户端。

**uvx 方式(推荐,无需 pip install):**

```json
{
  "mcpServers": {
    "menus": {
      "command": "uvx",
      "args": ["menus-mcp"]
    }
  }
}
```

**或者 pip install:**

```bash
pip install menus-mcp
```

```json
{
  "mcpServers": {
    "menus": { "command": "menus-mcp" }
  }
}
```

详见 [`mcp-server/README.md`](mcp-server/README.md)。

## 触发示例

| 用户说 | 触发 | 解析为 |
|--------|------|--------|
| 「推荐晚餐」 | ✓ | 默认 3 道,无筛选 |
| 「想吃点辣的」 | ✓ | `--keywords "辣"` |
| 「来 5 道便宜的海鲜」 | ✓ | `--count 5 --keywords "海鲜" --price-tier "实惠"` |
| 「推荐两道川菜」 | ✓ | `--count 2 --cuisine "川菜"` |
| 「换一批」(紧接上一次推荐) | ✓ | `--exclude-ids "<上轮所有 id>"` |
| 「100 块以内的欧洲菜」 | ✓ | `--max-price 100 --geo "欧洲"` |

## 算法核心

1. **关键词硬过滤**:用户传了关键词时,菜品必须至少命中一个(OR 语义)
2. **多重命中加权**:命中 N 个关键词的菜,权重 ×2^(N-1)
3. **菜系反偏置**:权重 ×1/√(该菜系总菜数),平衡中餐占 35% 的天然偏差
4. **多样性贪心**:同一菜系上限 ≤ ceil(count/3)
5. **价格档松弛**:候选不足自动去掉价格档重试一次

## 关键词白名单

只接受以下关键词,超出范围的(如「不辣」「清淡」)由 LLM 在调用前消化掉:

- **口味**:麻辣 / 辣 / 甜 / 酸 / 咸 / 鲜
- **食材**:海鲜 / 牛肉 / 羊肉 / 猪肉 / 鸡肉 / 素食
- **类型**:面食 / 米饭类 / 汤 / 甜品 / 烧烤 / 火锅 / 咖喱 / 汉堡披萨 / 饮品

## 数据来源

- 全球菜系 462 道菜(10 个地区、41 个菜系、69 个子风味)
- 价格范围 ¥6 ~ ¥388(CNY)
- 完整数据见 `menu.json` 与 `knowledge_base/` 各索引文件

## 发布到他人(仓库 owner 视角)

### 作为 Plugin 分享

1. `git push` 到 GitHub(本仓库已就绪:`spyyps/recommend-dish`)
2. 仓库内 `.claude-plugin/marketplace.json` 已配置好,列出所有可装插件
3. 在 README 贴出一行安装命令,分享仓库链接即可

### 作为 MCP 分享

仓库内 `mcp-server/` 目录已实现 MCP server(Python,复用同一 `recommender.py`),暴露 `recommend_dishes` 与 `list_keywords` 两个工具。发布方式:

- **PyPI**(推荐):
  ```bash
  cd mcp-server
  pip install build twine
  python3 -m build
  twine upload dist/*
  ```
  用户 `uvx menus-mcp` 或 `pip install menus-mcp` 即可。
- **社区目录**:发布完成后,提 PR 到 [`github.com/modelcontextprotocol/servers`](https://github.com/modelcontextprotocol/servers) 把 menus-mcp 加进列表。
- **MCPB 单文件(Claude Desktop 专用)**:`npx @anthropic-ai/mcpb pack` → GitHub Release → 用户拖入 Claude Desktop 即装。

详见 [`mcp-server/README.md`](mcp-server/README.md)。

## 许可

MIT

More