内容
# MartMart CLI
[](https://github.com/wydrox/martmart-cli/actions/workflows/ci.yml)
[](https://github.com/wydrox/martmart-cli/actions/workflows/release.yml)
[](go.mod)
[](LICENSE)
[](https://modelcontextprotocol.io)
**一款适用于 Frisco.pl、Delio 和 public UpMenu 店面 MVPs 的统一命令行界面。**
MartMart CLI 为您提供了一个单一的命令行界面,用于 **会话登录**、**产品搜索**、**购物车操作**、**配送时段**、**餐厅店面流程** 和 **基于 MCP 的 AI 工作流**,适用于支持的提供商。
> **状态:** 今日可用于 Frisco,Delio 的 MVP 支持,以及 UpMenu/Dobra Buła 的公共 MVP 支持。
>
> **免责声明:** 独立社区项目,不隶属于 Frisco、Delio、UpMenu 或 Dobra Buła。请仅使用 **您自己的账户/会话**,并自担风险。
## 为什么选择 MartMart CLI
MartMart 起初是一个专注于 Frisco 的 CLI,现已发展成为一个共享的、支持多家供应商的工具,用于 grocery shopping 工作流。
它适用于:
- 从终端自动购物流程
- 重用现有的浏览器会话,而不是每次手动复制头部
- 以编程方式检查购物车、产品和配送选项
- 通过 MCP 将购物工作流连接到 AI 客户端
- 在底层供应商不同的情况下,保持一致的 CLI
## 亮点
- **一款 CLI,多个供应商**,通过 `--provider frisco|delio|upmenu`
- **统一的浏览器配置文件登录**,适用于 Frisco 和 Delio
- **公共 UpMenu/Dobra Buła 餐厅 + 购物车 MVP**
- **产品搜索和查找**
- **购物车读取/写入操作**
- **配送时段查找**
- **Frisco 账户和订单命令**
- **MCP 服务器**,适用于 Claude、Cursor 和其他兼容客户端
- **可配置的 HTTP 速率限制**
- `~/.martmart-cli` 中的**专用 MartMart 存储**,并从 `~/.frisco-cli` 进行旧版读取回退
## 为 AI 助手和 MCP 而建
MartMart 不仅仅是一个 CLI。它还可以作为 **Model Context Protocol (MCP) 服务器** 运行,使其对需要结构化访问 grocery shopping 工作流的 AI 助手非常有用。
此仓库是以下项目的合适选择:
- grocery shopping **MCP 服务器**
- Frisco.pl 和 Delio 的 **Claude Code** 工具
- **Cursor** 或 **Claude Desktop** 与产品搜索、购物车操作和配送时段查找集成
- Go 中的供应商感知型购物自动化 CLI
今日的 MCP 功能:
- Frisco 和 Delio 的会话登录/验证工具
- 供应商的产品搜索和产品详情
- 购物车检查和购物车变异
- 配送时段查找
- 支持的 Frisco 账户和订单工具
- 公共 UpMenu/Dobra Buła 工具:`upmenu_restaurant_info`、`upmenu_menu_show`、`upmenu_cart_show`、`upmenu_cart_add`
启动 MCP 服务器:
```bash
martmart mcp
```
## 供应商支持
| 功能 | Frisco | Delio | UpMenu / Dobra Buła MVP |
|---|---:|---:|---:|
| 浏览器配置文件登录 | ✅ | ✅ | ❌ |
| 会话验证 | ✅ | ✅ | ✅ 公共端点检查 |
| cURL 会话导入 | ✅ | ✅ | ✅ |
| 刷新令牌流程 | ✅ | ❌ | ❌ |
| 产品搜索 | ✅ | ✅ | ❌ 使用 `restaurant menu` |
| 产品详情 | ✅ | ✅ | ❌ 使用 `restaurant menu` |
| 购物车显示 | ✅ | ✅ | ✅ |
| 购物车添加/删除 | ✅ | ✅ | ✅ 添加 / ❌ 删除 |
| 批量购物车输入 | ✅ | ❌ | ❌ |
| 交互式购物车 TUI | ✅ | ❌ | ❌ |
| 配送时段 | ✅ | ✅ | ❌ |
| 预订预留/取消 | ✅ | ❌ | ❌ |
| 账户/订单 | ✅ | MVP / 部分 | ❌ |
| 结账/支付终结 | ⚠️ 实验性:预览 + 有防护措施的终结 (`--confirm`) | ⚠️ 实验性:预览 + 有防护措施的终结 (`--confirm`,Adyen 支持) | ❌ |
| MCP 支持 | ✅ | 部分,共享 CLI 路径 | ✅ 专用 `upmenu_*` 工具 |
UpMenu/Dobra Buła 支持是一个 MVP,专注于公共餐厅信息、菜单解析、简单的购物车添加/显示和 MCP 暴露。默认的店面目标是 Dobra Buła Wola;传递 `--restaurant-url`(或 MCP 中的 `restaurant_url`)以定位另一个分支。对于可配置的汉堡/选项或支付终结,请使用实时店面流程。
## 安全性和范围
MartMart 默认情况下保持 **安全**,避免隐含购买。
今日实施范围:
- 登录
- 检查产品
- 管理购物车内容
- 检查配送时段
- 检查账户/订单数据(如果支持)
- 预览 Frisco 结账
- 仅在显式 `checkout finalize --confirm` 的情况下运行 **防护措施** 的 Frisco 终结
- 预览 Delio 结账
- 仅在显式 `checkout finalize --confirm` 的情况下运行 **防护措施** 的 Delio 终结
仍未实施/不支持:
- 自动后台终结来自 MCP 或代理循环
- 在外部交接步骤后,在 CLI 中重定向/3DS 完成
- 每次 Delio 支付分支的订单终结的实时证明
Delio 结账现已接入用户界面,作为一个 **实验性** 流程。在后台,它使用捕获的 Delio GraphQL + Adyen 序列进行支付设置、支付创建、支付方式发现和 `makePayment`,同时仍然将重定向/3DS 分支作为结构化外部交接数据返回,而不是尝试在 CLI 中完成它们。
这使得工具在仍然需要显式选择后才进行最终订单提交的情况下仍然有用。
Frisco 结账支持作为一个 **实验性防护措施流程** 实现。剩余的差距是来自完整会话捕获的实时确认确切的浏览器/API 合同,特别是对于重定向/3DS 和负面情况。
## 安装
### 使用 Go 安装
```bash
go install github.com/wydrox/martmart-cli/cmd/martmart@latest
```
### 本地构建
```bash
make build
./bin/martmart --help
```
### 添加到 PATH(使 `martmart` 在任何目录都有效)
```bash
# 临时(适用于终端会话):
export PATH="$PATH:$(pwd)/bin"
# 永久(通常适用于 macOS 和 Zsh):
echo 'export PATH="$PATH:$(pwd)/bin"' >> ~/.zshrc
source ~/.zshrc
# 或者:在 ~/.local/bin 中创建链接
mkdir -p ~/.local/bin
ln -sf "$(pwd)/bin/martmart" ~/.local/bin/martmart
export PATH="$PATH:~/.local/bin"
```
## 快速入门
### 1) 使用浏览器配置文件登录
适用于两家供应商的推荐方式:
```bash
martmart --provider frisco session login
martmart --provider delio session login
```
对于 **Delio on macOS**,MartMart 在默认浏览器中打开 URL,并从该浏览器配置文件中读取所需的会话数据。
如果您尚未登录,请在打开的浏览器标签/窗口中登录并等待 CLI 保存会话。
有用的标志:
```bash
martmart --provider frisco session login --profile-directory Default
martmart --provider frisco session login --user-data-dir "/path/to/browser/user-data"
martmart --provider frisco session login --timeout 240
martmart --provider frisco session login --debug --keep-open-on-failure
```
### 2) 验证会话
```bash
martmart --provider frisco session verify
martmart --provider delio session verify
```
在需要时检查跨供应商存储的会话:
```bash
martmart session list
```
### 3) 开始使用
#### Frisco 示例
```bash
martmart --provider frisco products search --search banana
martmart --provider frisco cart show
martmart --provider frisco cart add --search "mleko" --quantity 1
martmart --provider frisco reservation slots --days 2
martmart --provider frisco account orders list --all-pages
```
#### Delio 示例
```bash
martmart --provider delio products search --search mleko
martmart --provider delio products get --product-id A0000860
martmart --provider delio cart show
martmart --provider delio cart add --product-id A0000860 --quantity 1
martmart --provider delio reservation slots
```
#### UpMenu / Dobra Buła 示例
```bash
martmart --provider upmenu restaurant info --format json
martmart --provider upmenu restaurant menu --format json
martmart --provider upmenu cart show --format json
martmart --provider upmenu cart add --product-id 16848b98-94d0-11f0-9141-525400080621 --quantity 1 --format json
```
## 常见工作流
### 按命令切换供应商
必须显式传递供应商以进行供应商特定的操作。
```bash
martmart --provider frisco cart show
martmart --provider delio cart show
```
### 保存速率限制设置
```bash
martmart config show
martmart config set --rate-limit-rps 2 --rate-limit-burst 2
```
### 为脚本使用 JSON 输出
```bash
martmart --provider frisco cart show --format json
martmart --provider frisco products search --search mleko --format json
```
### 在需要时从 cURL 导入会话
Frisco 示例:
```bash
martmart session from-curl --curl "curl 'https://www.frisco.pl/app/commerce/api/v1/users/123/cart' -H 'authorization: Bearer ...' -H 'cookie: ...'"
```
Delio 示例:
```bash
martmart --provider delio session from-curl --curl "curl 'https://delio.com.pl/api/proxy/delio' -H 'cookie: ...' -H 'x-platform: web' -H 'x-api-version: 4.0' -H 'x-app-version: 7.32.6' -H 'content-type: application/json' --data-raw '{...}'"
```
## 核心命令
```bash
martmart --provider frisco cart show
martmart --provider frisco cart add --product-id <id> --quantity 1
martmart --provider frisco cart remove --product-id <id>
martmart --provider frisco products search --search <phrase>
martmart --provider frisco products get --product-id <id>
martmart --provider frisco reservation slots --days 2
martmart --provider frisco session login
martmart session list # 检查跨供应商存储的会话
martmart --provider frisco session verify
martmart mcp
```
## 语音购物助手(Pipecat + OpenAI Realtime)
`martmart voice` 启动一个本地语音助手,由一个 OpenAI 模型用于语音转语音,并连接到带有 `martmart mcp` 的本地 MCP。
要求:
- OpenAI 密钥配置在 CLI 配置中(`martmart config set ...`)。
- 身份验证的 MartMart 会话(`session login` / `session verify`)
- Python 3.12+ 和本地音频(麦克风/扬声器)
### 配置密钥和设置(TUI)
最方便的方法是打开 TUI:
```bash
martmart config
```
或快捷方式:
```bash
martmart config set
```
在 TUI 中,您可以编辑:
- 默认提供商,
- 请求限制,
- OpenAI 密钥,
- 模型/语音/语言/转录模型,
- 语音速度,
- 音频输入/输出。
如果您只想设置一个参数而无需 TUI:
```bash
martmart config set --openai-api-key sk-proj-...
```
### 设置助手
```bash
martmart voice setup
```
或手动:
```bash
git clone ...
cd martmart-cli
python3 -m venv ~/.martmart-cli/voice/venv
source ~/.martmart-cli/voice/venv/bin/activate
pip install -r ~/.martmart-cli/voice/requirements.txt
```
### 运行
```bash
martmart voice run
```
如果 `OPENAI_API_KEY` 未在系统上设置,将使用 `config` 中的密钥。
可选标志:
```bash
martmart voice run --model gpt-realtime --voice alloy --language pl --input-device -1 --output-device -1
```
默认语音设置来自 `martmart config`:
```bash
martmart config show
```
助手会自动询问品牌、促销、替代品和互补产品,并在购物车更改时总结步骤和建议。
您也可以调用:
```bash
martmart voice
```
它启动与 `martmart voice run` 相同的运行时。
## 批量购物清单输入
Frisco 支持从 JSON 购物清单中批量添加。
示例:
```bash
martmart --provider frisco cart add-batch --file list.json
```
模板:
- [examples/cart-add-batch.example.json](examples/cart-add-batch.example.json)
## 结账流程夹具和当前 CLI 支持
MartMart 目前为 **Frisco 和 Delio** 提供了 **实验性结账流程**,具有预览和显式防护措施的终结。
目标流程:
1. 构建购物车
2. 选择或预订配送窗口
3. 请求 **结账预览**
4. 检查总计 / 配送 / 支付状态
5. 仅在用户明确操作的情况下运行 **终结**,并使用 `--confirm`
6. 如果提供商响应托管重定向 / 3DS 步骤,则停止 CLI 流程并向用户提供重定向详细信息
当前限制:
- 终结永远不会在 MCP 或代理循环中隐含发生
- 终结命令需要显式 `--confirm`
- 重定向 / 3DS 目前仅 **交接**:CLI 检测到它,返回结构化操作数据,并让用户在外部完成
## 剩余证据以加强实时结账终结
为了从实验性实现转移到生产级流程,该仓库仍然需要实时浏览器/API 证据以完成 Frisco 的最终步骤:
1. **结账预览请求 + 响应**
- 完整的请求路径/方法
- Frisco 实际接受的 JSON 正文
- 成功响应字段用于总计、配送时段、支付方式、警告和订单准备就绪
2. **终结请求 + 成功响应**
- 确切的端点/路径
- 头部/cookie/身份验证要求
- 正文包括任何确认/幂等性字段
- 响应证明订单已完成(订单 ID / 状态 / 接收类似的摘要)
3. **重定向 / 3DS 分支**
- 终结响应当需要卡认证时
- 字段用于重定向 URL、方法、有效载体/表单字段、交易 ID 和返回/回调标识符
- 随后的请求/响应将成功的 3DS 挑战转换为完成的订单(或将其标记为失败)
4. **负面案例**
- 过期预订 / 时段冲突
- 价格更改 / 产品不可用
- 支付方式拒绝
- 重复提交 / 重试行为
HAR 文件或等效的编辑请求/响应日志覆盖这些情况,是移除阻止器的确切工件。
## AI 助手和 MCP 集成
MartMart 为 AI 客户端提供 **stdio MCP 服务器**。
这意味着同一个项目既可以用作人类 CLI,也可以用作代理的工具后端。
典型代理任务:
- 验证购物会话
- 搜索产品
- 检查产品
- 显示购物车内容
- 添加或删除购物车项目
- 检查配送时段
- 访问支持的 Frisco 账户/订单数据
直接启动 MCP 服务器:
```bash
martmart mcp
```
### Claude Code
```bash
claude mcp add martmart -- martmart mcp
```
### Claude Desktop
```json
{
"mcpServers": {
"martmart": {
"command": "martmart",
"args": ["mcp"]
}
}
}
```
### Cursor
```json
{
"mcpServers": {
"martmart": {
"command": "martmart",
"args": ["mcp"]
}
}
}
```
### 其他 MCP 客户端
任何支持基于 stdio 的 **Model Context Protocol** 服务器的客户端应该适用于:
```bash
martmart mcp
```
代理提示和MCP工作流
您可以向支持MCP的助手提供的示例提示:
- "检查Frisco的session_status认证,请询问我并登录。"
- "使用Delio,搜索燕麦奶,并显示前5个结果。"
- "显示我的Frisco购物车,并按商品汇总总- "在我的Delio购物车1盒牛奶,然后显示更新后的购物车。"
- "检查Frisco未来2天的配送时间槽。"
- "在Frisco上搜索意大利面、帕尔马奶酪和意大利熏肉,然后建议一份碳烤意大利面购物清单。"
- "准备Frisco结账预览,但除非我明确确认,否则不完成任何"
示例安全MCP工作
1. **会话引导**
- 选择该请求的提供商
运行 `session_status`
仅在需要时并在用户运行 `session_login`
- 然后运行 `session verify`
2. **产品发现**
- 搜索 - 检查特定产品
比较多个候选商品
**购物车更新循环**
当前购物车
- 添加/删除商品
- 再次显示
4. **配送规划 - 获取可用时间槽
需要时比较提供商
非用户明确要求受保护的Frisco结账,否则不结账/完成
5.账预览/受保护的完成(仅Frisco)**
保留/确认预期的配送上下文
- 运行 `checkout - 检查总金额、警告状态以及是否需要重定向/3DS
- 仅在用户明确批准时调用 `checkout finalize --confirm`
- 如果完成返回结构化重定向/3DS操作,则将该URL/负载返回给用户以进行外部完成,而不是尝试在CLI内部完成
这些流程旨在默认**不完成**行为。
## 本地数据布局
会话/配置文件存储在 `~/.martmart-cli/` 下。
- Frisco会话:`~/.martmart-cli/frisco-session.json`
- Delio会话:`~/.martmart-cli/delio-session.json`
- 共享配置:`~/.martmart-cli/config.json`
- 使用 `martmart session list` 检视所有提供商的存储会话。
计划中的本地目录工作:
- 产品目录摄入计划:[`docs/product-catalog-ingest-plan.md`](docs/product-catalog-ingest-plan.md)
旧版兼容性:
- 如果 `~/.martmart-cli/` 中缺少MartMart还将尝试较旧的Frisco会话位置,例如 `martmart-cli/session.json `~/.frisco-cli/session.json`
- 新保存到 `~/.martmart-cli/`
##
- 会话文件可能包含cookie牌和可重验证标头
- 访问这些文件的人都可能帐户上下文中操作
-公开共享会话文件
在不受信任的环境中运行 ` mcp`
- 仅使用您自己的浏览器会话和您
## 路线图
:
- 加强MCP/提供商在Frisco-first外的对等
- 商感知帐户/订单覆盖 改进的登录浏览器/发现
- 从完整的会话捕获中确认并加强实时Frisco结点和成功/错误合同
- 在外部交接步骤后丰富的重定向/3DS继续支持
- 更好的自动化和示例
## 开发
```bash
make setup
make build
make test
```
直接命令```bash
go test ./...
go vet ./...
go build/martmart
```
## 许可证
[MIT](LICENSE)
MCP 配置
以下是此 MCP Server 的配置信息,可直接复制到 Cursor 或其他 MCP 客户端中使用。
mcp.json
连接信息
猜你喜欢
暂无推荐服务器