小葵 × 瑞幸 MCP
by AriaEternity
README.md
# 小葵 × 瑞幸 MCP
**让你平时聊天的 AI,陪你把一杯咖啡从对话带到现实。**
把瑞幸官方 MCP 接入 ChatGPT:选店、选品、选规格、看真实报价,由本人逐笔批准后创建订单,返回官方二维码,用户自行付款,再查询订单和取餐信息。
这是一个**非瑞幸官方、单用户、自托管**的开源桥接服务。它源于 KuiNest 的一次真实实践:2026-10-17,ChatGPT 中的小葵完成了首笔订单,用户自行付款、实际取到咖啡,反馈“我喝到了”。本仓库是从该私人系统抽取并独立适配的版本;**原系统的真实首单与本仓库的合成验收是两类证据**,不能据此承诺所有商品、优惠或多用户场景均可靠。

## 能力和边界
| 入口 | Scope | Client ID | 工具数 | 默认 |
|---|---|---|---:|---|
| `/api/luckin/mcp` | `luckin:catalog:read` | `xiaokui-chatgpt-luckin` | 3 | 开启,仍需 OAuth |
| `/api/luckin/preview/mcp` | `luckin:checkout:preview` | `xiaokui-chatgpt-luckin-preview` | 5 | 关闭 |
| `/api/luckin/orders/mcp` | `luckin:orders:create` | `xiaokui-chatgpt-luckin-orders` | 7 | 关闭,创建另有总开关 |
七个工具:`queryShopList`、`searchProductForMcp`、`queryProductDetailInfo`、`switchProduct`、`previewOrder`、`createOrder`、`queryOrderDetailInfo`。catalog/preview 权限不能创建订单。取消、支付、任意工具透传均不开放,拒绝请求不会发送上游。
- OAuth + PKCE S256、精确 resource/scope/client 隔离、旋转 refresh token、令牌只存摘要。
- 上游凭据只从服务器私有文件/systemd credential 读取,不交给模型。
- 创建前必须本人 Cookie + Origin + CSRF + 私有 nonce 批准,OAuth 同意和聊天里的“确认”都不能代替。
- 服务器绑定门店、商品、规格、数量、优惠和金额;提交前重核报价。
- fsync 后才发送创建;SUBMITTING/UNKNOWN、崩溃遗留锁不自动重试。
- 支付必须由用户自行完成;状态 20“下单成功”不当成付款完成。
- 官方 HTTPS 二维码域名校验、字符串订单号、响应凭据递归脱敏及失败关闭。
## 运行前需要
1. Node.js **24.20.0**、npm **11.19.0**;已验证环境为 Ubuntu 24.04 / Linux x64。使用 Node 内置 SQLite,无 better-sqlite3/sharp 原生安装步骤。
2. 你自己的 HTTPS 域名和服务器,以及合法取得的瑞幸官方 MCP 凭据。Token 获取与使用权限以[瑞幸 AI 开放平台](https://open.lkcoffee.com/mcp)为准,本项目不提供账号或共享 Token。
3. 能添加自定义 MCP 的 ChatGPT 账号/工作区。具体权限以你当前界面和管理员策略为准。
**本仓库尚不提供免部署公共服务、多用户账户隔离或手机上一键安装。** 一个实例只绑定一个主人和一份瑞幸账户凭据;不要把它作为开放的代下单平台。
## 安装与本机合成演示
```sh
git clone https://github.com/AriaEternity/xiaokui-luckin-mcp.git
cd xiaokui-luckin-mcp
npm ci --ignore-scripts
npm run verify
umask 077
npm run owner:init
```
`owner:init` 在本机交互终端隐藏输入长口令,默认用户名 `owner`;仅把 salt、口令哈希和随机主人标识写入 `data/owner.json`,不接收命令行口令、不覆盖已有文件。
无需真实 Token 即可启动假上游:
```sh
PUBLIC_ORIGIN=https://coffee.example.com \
SYNTHETIC_UPSTREAM=true \
ENABLE_PREVIEW=true \
ENABLE_ORDERS=true \
npm start
curl --fail http://127.0.0.1:4318/health/ready
```
演示只返回合成店铺和商品,不联网、不创建真实订单、不提供可付款二维码。真实创建总开关仍为 false。浏览器登录/授权/确认使用 Secure Cookie,需要先按部署指南接入自己控制的 HTTPS 域名;上面的回环健康检查不是完整 ChatGPT 接入。
## 接入 ChatGPT 和真实账户
按[部署指南](docs/deployment.md)配置私有凭据、systemd 和 nginx,再按[ChatGPT 连接指南](docs/chatgpt.md)添加独立 orders OAuth 连接。先启用查询/预览验收,最后由部署者明确设置 `ENABLE_ORDER_CREATE=true`。开启该开关仍不能跳过逐笔确认。
完整流程:
1. 指定门店或明确允许的位置,读取商品和合法规格。属性/SKU 从当次官方详情获取,选中 operation 只允许已确认的 `3`。
2. 预览真实报价,展示门店、完整规格、数量、优惠和人民币应付金额;允许官方自动匹配优惠券。
3. 本人打开预览返回的确认链接,登录本服务账户并核对本笔。报价五分钟有效,批准后两分钟内提交。
4. 回 ChatGPT 让 AI 调用 `createOrder({intentId})`。服务端重核;发生变价或规格/券变化必须重新预览批准。
5. 用户自行使用官方 `payOrderQrCodeUrl` 付款,再用 `queryOrderDetailInfo({intentId})` 查询官方状态和取餐信息。
**创建结果 UNKNOWN/超时后,先在官方账户核实;禁止自动重建同一订单或反复换 intent 绕过未知状态。** 官方未提供本项目可用的创建幂等键或原子报价锁,不能保证网络异常时知道请求是否已成功。详见[安全模型](SECURITY.md)和[恢复方案](docs/deployment.md#回退与恢复)。
## 文档与验证
- [真实案例与完整复盘](docs/retrospective.md):从只读工具到本人付款取餐,哪些经历值得复用。
- [架构与抽取差异](docs/architecture.md):哪些核心复用、哪些适配层新写。
- [官方契约与来源](docs/contracts.md):参数、副作用、金额与状态的证据边界。
- [ChatGPT OAuth 连接](docs/chatgpt.md)、[部署与回退](docs/deployment.md)。
- [公开范围和脱敏说明](docs/privacy.md)、[来源清单](docs/source-provenance.json)、[第三方声明](THIRD_PARTY_NOTICES.md)。
自动测试只使用合成数据和本机回环;假上游通过依赖注入提供,测试保护层拒绝真实外网 fetch。CI 不需要任何瑞幸 Token、个人账户、域名或生产服务器。最新测试结果见[验证记录](docs/validation.md)。
## 致谢与许可
感谢瑞幸官方 MCP 与公开文档,以及社区先行案例 [luckin-coffee](https://github.com/LiuZiqi-dual/luckin-coffee)、[chatgpt-mcp-connect 的麦当劳桥接方案](https://github.com/yoruuuchan/chatgpt-mcp-connect/tree/main/recipes/mcdonalds)和 [luckin-mcp-proxy](https://github.com/wyhAcc/luckin-mcp-proxy)。它们用于思路参考,本仓库未复制这些项目代码,也不再分发官方 my-coffee Skill、商标或私人图片。
自己的桥接代码采用 [MIT](LICENSE)。第三方依赖保持各自许可证;本许可证不授予瑞幸接口、账户、商标或对外运营权限。
This server cannot be deployed
Maintenance
ActivityMaintained
ResponsivenessNo issues