🚀 Alko MCP 服务器
Alko MCP 服务器是一个生产级的 模型上下文协议 (MCP) 服务器,它能让 AI 助手访问 Alko.fi 的酒精产品目录。
🚀 快速开始
前提条件
- Node.js 24+
- Google Cloud Firestore(本地开发可使用模拟器)
- Playwright(用于网页抓取,会自动安装)
安装步骤
git clone https://github.com/yourusername/alko-mcp.git
cd alko-mcp
npm install
npx playwright install chromium
npm run build
使用 Firestore 模拟器进行本地开发
步骤 1:启动 Firestore 模拟器(保持在后台运行)
gcloud emulators firestore start --host-port=localhost:8081
步骤 2:启动 Claude Desktop(或其他 AI 助手)
如果模拟器为空,MCP 服务器会在首次查询时自动加载捆绑的种子数据(约 12,000 种产品,约 360 家商店),无需手动同步!
注意:模拟器不会持久保存数据。重启模拟器后,首次使用时会再次自动加载种子数据。
可选:同步最新数据
如果需要从 Alko.fi 获取最新的产品数据:
export FIRESTORE_EMULATOR_HOST=localhost:8081
npm run sync-data
npm run sync-stores
npm run export-seed
✨ 主要特性
- 产品搜索:可按名称、类型、国家、价格范围、酒精含量等搜索 11,900 多种产品。
- 产品详情:获取详细信息,包括丰富的数据(口味特征、食物搭配、证书、饮用建议)。
- Vivino 评分:通过名称或 URL 获取 Vivino.com 上的葡萄酒评分。
- 商店营业时间:通过“现在营业”筛选查看商店营业时间。
- 商店库存情况:通过网页抓取检查 Alko 商店的实时库存情况。
- 产品推荐:根据食物搭配、场合和偏好获取产品推荐。
- 商店列表:按城市浏览 360 多家 Alko 商店。
所有工具都返回紧凑的 JSON 数据,以高效使用大语言模型(LLM)的令牌。
💻 使用示例
基本搜索
> **为我寻找价格低于 20 欧元的优质意大利红葡萄酒**
> *搜索价格低于 20 欧元的意大利红葡萄酒*
葡萄酒推荐
> **为烤三文鱼推荐一款葡萄酒,预算约 15 - 25 欧元。**
> *在预算范围内为烤三文鱼推荐葡萄酒*
香槟和起泡酒
> **Alko 有哪些香槟可供选择?请展示 5 个最佳选项。**
> *列出香槟选项*
精酿啤酒搜索
> **搜索来自芬兰或其他北欧国家的印度淡色艾尔(IPA)啤酒**
> *搜索北欧的 IPA 啤酒*
产品详情
> **提供编号为 906458 的产品的更多信息**
> *获取带有口味特征的详细产品信息*
商店营业时间
> **赫尔辛基现在有哪些 Alko 商店正在营业?**
> *列出赫尔辛基现在正在营业的商店*
商店库存情况
> **赫尔辛基的商店是否有巴罗洛葡萄酒?**
> *检查赫尔辛基商店中产品的库存情况*
礼品推荐
> **为葡萄酒爱好者寻找礼品创意,预算 50 - 100 欧元。**
> *为葡萄酒爱好者提供高级礼品创意*
食物搭配(使用 Alko 的官方搭配数据)
> **为海鲜推荐一款葡萄酒**
> *使用 Alko 的食物符号搜索,查找官方标记为适合与海鲜搭配的产品*
> **我需要一款适合奶酪拼盘的葡萄酒。奶酪有:布里干酪、曼彻格干酪和蓝纹奶酪。**
> *为奶酪拼盘搭配葡萄酒 - 匹配“温和奶酪”和“浓郁奶酪”*
特定地区搜索
> **搜索来自里奥哈地区的西班牙红葡萄酒**
> *搜索里奥哈地区的西班牙葡萄酒*
预算购物
> **寻找价格低于 10 欧元的适合工作日晚餐的最佳葡萄酒**
> *为工作日晚餐寻找最佳预算葡萄酒*
特殊场合
> **为 20 人的新年派对推荐一款起泡酒**
> *为新年派对推荐起泡酒*
Vivino 评分
> **搜索价格在 15 - 25 欧元之间的红葡萄酒,并查看它们的 Vivino 评分**
> *搜索红葡萄酒并查看它们的 Vivino 评分*
评分最高的葡萄酒
> **Alko 中在 Vivino 上评分最高的巴罗洛葡萄酒是哪一款?**
> *查找巴罗洛葡萄酒并比较它们的 Vivino 评分*
葡萄酒比较
> **比较这些葡萄酒的 Vivino 评分:阿玛罗尼、蒙塔希诺布鲁奈罗**
> *比较优质意大利葡萄酒的 Vivino 评分*
📚 详细文档
MCP 工具
| 工具 |
描述 |
search_products |
按名称、类型、国家、价格范围、酒精含量搜索产品 |
get_product |
获取产品详情。设置 includeEnrichedData=true 可获取口味、食物搭配、饮用提示 |
get_store_hours |
获取商店营业时间。可按城市、名称或 openNow=true 进行过滤。如果数据过时会自动刷新 |
get_availability |
检查产品在商店的库存情况(通过抓取 alko.fi) |
list_stores |
按城市列出 Alko 商店 |
get_recommendations |
获取个性化产品推荐 |
get_vivino_rating |
通过名称或 URL 获取 Vivino 葡萄酒评分(通过抓取 vivino.com) |
sync_products |
使数据库与最新的 Alko 价格列表同步 |
get_sync_status |
检查同步状态和产品数量 |
AI 助手配置
Claude Desktop
配置文件:~/Library/Application Support/Claude/claude_desktop_config.json(macOS)
本地开发:
{
"mcpServers": {
"alko": {
"command": "node",
"args": ["/absolute/path/to/alko-mcp/dist/server.js"],
"env": {
"FIRESTORE_EMULATOR_HOST": "localhost:8081"
}
}
}
}
生产环境(Cloud Run):
{
"mcpServers": {
"alko": {
"url": "https://YOUR-CLOUD-RUN-URL.run.app/mcp",
"transport": "streamable-http"
}
}
}
ChatGPT Desktop
配置文件:~/.config/chatgpt/mcp.json(macOS/Linux)或 %APPDATA%\chatgpt\mcp.json(Windows)
本地开发:
{
"servers": {
"alko": {
"command": "node",
"args": ["/absolute/path/to/alko-mcp/dist/server.js"],
"env": {
"FIRESTORE_EMULATOR_HOST": "localhost:8081"
}
}
}
}
生产环境(Cloud Run):
{
"servers": {
"alko": {
"url": "https://YOUR-CLOUD-RUN-URL.run.app/mcp",
"transport": "streamable-http"
}
}
}
Google Gemini(AI Studio)
对于 Gemini,使用 HTTP 传输。使用以下命令启动服务器:
MCP_TRANSPORT=http PORT=3000 node dist/server.js
然后在 AI Studio 中使用 MCP 端点 URL 进行配置:
http://localhost:3000/mcp
在生产环境中,部署到 Cloud Run 并使用 API 令牌进行身份验证(见下文)。
Claude Code CLI
添加到项目的 .mcp.json 文件中:
{
"mcpServers": {
"alko": {
"command": "node",
"args": ["./dist/server.js"],
"env": {
"FIRESTORE_EMULATOR_HOST": "localhost:8081"
}
}
}
}
数据来源
产品目录
- 来源:Alko 的公开 Excel 价格列表
- URL:
https://www.alko.fi/INTERSHOP/static/WFS/Alko-OnlineShop-Site/-/Alko-OnlineShop/fi_FI/Alkon%20Hinnasto%20Tekstitiedostona/alkon-hinnasto-tekstitiedostona.xlsx
- 产品数量:约 11,900 种
- 更新方式:运行
npm run sync-data
商店数据
- 来源:从 alko.fi 商店查找器抓取
- 商店数量:约 360 家
- 包含信息:名称、地址、营业时间(今天/明天)
- 更新方式:运行
npm run sync-stores
丰富的产品数据
- 来源:从单个产品页面抓取
- 包含信息:口味特征、使用提示、饮用建议、食物搭配、证书、成分
- 缓存方式:首次抓取后持久保存到 Firestore
产品字段
| 字段 |
描述 |
id |
产品 ID(例如,"004246") |
name |
产品名称 |
producer |
生产商/制造商 |
price |
价格(欧元) |
pricePerLiter |
每升价格 |
bottleSize |
容量(例如,"0.75 l") |
type |
类别(红葡萄酒、白葡萄酒、啤酒等) |
subtype |
风味特征(例如,"醇厚 & 清爽") |
country |
原产国 |
region |
葡萄酒产区 |
alcoholPercentage |
酒精含量 |
description |
来自 Excel 的口味描述 |
tasteProfile |
详细口味(丰富数据,抓取而来) |
usageTips |
使用建议(丰富数据) |
servingSuggestion |
饮用温度(丰富数据) |
foodPairings |
食物搭配符号(丰富数据) |
certificates |
认证标签:有机、素食等(丰富数据) |
ingredients |
生产商声明的成分(丰富数据) |
assortment |
常规产品、订购产品等 |
🔧 技术细节
开发命令
npm run build
npm run dev
npm run test
npm run test:run
npm run typecheck
npm run sync-data
npm run sync-stores
npm run export-seed
日志查看
tail -f /tmp/alko-mcp.log
部署到 Google Cloud Run
服务器可以部署到 Cloud Run 并提供公共访问(无需身份验证),以与 ChatGPT 和其他 MCP 客户端兼容。
gcloud services enable run.googleapis.com firestore.googleapis.com artifactregistry.googleapis.com cloudbuild.googleapis.com
gcloud firestore databases create --location=europe-north1
gcloud builds submit --config=cloudbuild.yaml
gcloud run deploy alko-mcp \
--source . \
--region europe-north1 \
--memory 2Gi \
--cpu 2 \
--execution-environment gen2 \
--set-env-vars="MCP_TRANSPORT=http" \
--allow-unauthenticated
测试端点:
curl -X POST https://alko-mcp-xxx.a.run.app/mcp \
-H "Content-Type: application/json" \
-H "Accept: application/json, text/event-stream" \
-d '{"jsonrpc":"2.0","id":1,"method":"tools/list"}'
有关 API 令牌身份验证和其他选项,请参阅 DEPLOYMENT.md。
📄 许可证
本项目采用 MIT 许可证。
法律声明
- Alko 价格列表是公开可用的数据。
- 网页抓取遵守速率限制(请求间隔 2 秒)。
- 这是一个非官方项目,与 Alko Oy 没有关联。
- 在芬兰,只有 18 岁以上的人才能购买酒精产品。