关于 myhotlunchbox-mcp
myhotlunchbox-mcp 是面向家长的 My Hot Lunchbox MCP 服务,可查询校餐日历、管理学生与订单,并跟踪配送和付款。写入操作须确认,结账使用账户中已保存的卡。
主要功能
- 01查询校餐日历、菜单和订单
- 02管理学生资料与餐食订单
- 03查看交易、订阅和礼品卡
- 04结账并生成日历及订单 PDF
- 05写入操作提供确认预览
适用场景
- 01查看某日可订餐食及价格
- 02为学生创建或修改校餐订单
- 03核对账户付款与订阅
- 04确认结账内容后使用已保存卡付款
MCP 相关
作为 MCP 服务,它向客户端提供 My Hot Lunchbox 家长账户的查询和写入工具。修改订单、付款等写入操作会先请求确认。
配置
本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。
npx -y myhotlunchbox-mcpMYHOTLUNCHBOX_USERNAMEEmail address you sign in to ordernow.myhotlunchbox.com withMYHOTLUNCHBOX_PASSWORD密钥Password for that My Hot Lunchbox accountMYHOTLUNCHBOX_BASE_URLOverride the app origin (defaults to https://ordernow.myhotlunchbox.com)MYHOTLUNCHBOX_OUTPUT_DIRDirectory the print tools write PDFs into (defaults to the working directory)MYHOTLUNCHBOX_TOKEN_CACHE密钥Set to false to disable the on-disk token cache and re-authenticate on every process start. Defaults to enabled.MYHOTLUNCHBOX_TOKEN_FILE密钥Absolute path for the token cache file. Defaults to $MCP_DATA_DIR/.myhotlunchbox-mcp/token.json.本地服务需要在你的电脑上安装运行环境(如 Node.js 18+)。各客户端的配置文件位置不同,请参考客户端文档。
工具
35收录的工具列表 · 更新于 1 周前
此工具无需参数。
详细介绍
myhotlunchbox-mcp
用于 My Hot Lunchbox 的 MCP 服务 — 读取学校午餐日历、管理学生、下单和修改订单,并在家长账户中跟踪配送和付款。
由 AI(Claude Code)开发和维护。请自行斟酌使用。
安装
npx myhotlunchbox-mcp
也可以作为 Claude Code 插件安装:
/plugin marketplace add chrischall/myhotlunchbox-mcp
/plugin install myhotlunchbox-mcp
配置
[email protected]
MYHOTLUNCHBOX_PASSWORD=…
全部设置就是这些。该服务会在服务端直接登录 ordernow.myhotlunchbox.com(OAuth2 密码授权),并使用收到的刷新令牌续期会话——无需浏览器扩展、无需已登录的标签页,也无需捕获 Cookie。不会向磁盘写入任何内容。
如果应用源地址发生变更,可通过 MYHOTLUNCHBOX_BASE_URL 覆盖。它必须使用 https://(仅 localhost 接受普通的 http://),且令牌缓存与该地址绑定,因此更改地址后需要重新登录。
该服务无需凭据即可启动,因此主机在安装时执行的 tools/list 探测仍可正常工作;配置错误会在首次调用工具时显示。
工具
共 35 个工具,名称均以 mhlb_ 为前缀。所有 20 个读取工具都已通过真实家长账户进行实时验证(node scripts/verify-reads.mjs);14 个写入工具尚未验证 — 详见下文。
读取工具的验证说明附带日期,因为即使没有触碰任何工具文件,这一状态也可能过时:SDK 或 zod 大版本升级都会从底层重新连接所有读取路径。上次验证时间为 2026-09-19,版本为 1.0.0 — 在 MCP SDK v2 迁移和被迫升级到 zod 4.6.2 后,全部 20 个测试均通过。
账户 — mhlb_whoami、mhlb_session_reset
健康检查 — mhlb_healthcheck(连接器是否正常工作?报告凭据是否已解析、My Hot Lunchbox 是否接受了凭据,以及需要修复的内容 — 与 mhlb_whoami 不同,后者会直接抛出错误,而不是返回说明)
学生 — mhlb_list_students、mhlb_get_student_form、
mhlb_new_student_form、mhlb_create_student、mhlb_update_student、
mhlb_delete_student
日历 — mhlb_get_calendar、mhlb_get_day
订餐 — mhlb_get_cart、mhlb_get_cart_tabs、mhlb_get_menu、
mhlb_get_order_form、mhlb_get_order、mhlb_create_order、
mhlb_update_order、mhlb_delete_order
账单 — mhlb_list_transactions、mhlb_get_transaction、
mhlb_list_subscriptions、mhlb_get_subscription_settings、
mhlb_set_subscription_enabled、mhlb_unsubscribe_order、
mhlb_list_gift_cards、mhlb_apply_gift_card、mhlb_get_coupon、
mhlb_apply_coupon、mhlb_remove_coupon。mhlb_list_gift_cards 会将每个卡号隐藏,仅显示末 4 位(卡号可用于兑换金额);如需查看完整卡号,请传入 revealCodes: true。
结账 — mhlb_init_checkout、mhlb_checkout
报告 — mhlb_print_calendar、mhlb_print_orders、
mhlb_print_transaction。这些工具会生成真实的 PDF;每个工具都会写入文件并返回其路径,或在设置 inline: true 时直接返回字节数据。设置 MYHOTLUNCHBOX_OUTPUT_DIR(.mcpb 中的“Report folder”设置)可选择文件保存位置;默认情况下,如果主机设置了 MCP_DATA_DIR,文件会保存到该目录下的 reports/,否则保存到 ~/Downloads。绝不会覆盖现有文件。
确认
每个会产生更改的工具都会在发送任何内容前要求你确认。对于能显示确认提示的客户端(Claude Code),你会看到提示,其中包含工具将发送的确切请求。对于无法显示确认提示的客户端(claude.ai、Claude Desktop),首次调用不会进行任何网络请求:它会返回将要发送内容的预览以及一个 confirmToken,只有使用相同参数和该令牌再次调用时,请求才会发送。令牌只能使用一次,在两次调用之间更改任何参数都会被拒绝(DRAFT_CHANGED)。
| 变量 | 默认值 | |
|---|---|---|
MCP_CONFIRM_MODE | ask-user | 在无法显示确认提示的客户端(claude.ai、Claude Desktop)上,写入操作的处理方式。ask-user:分两步进行——首次调用不执行任何操作,只返回预览和令牌;模型必须先在聊天中获得你的批准,才能使用该令牌再次调用。auto:同样分两步进行,但模型查看预览后可自行使用令牌。refuse:此类客户端上的写入操作会被拒绝。能显示提示的客户端(Claude Code)始终会显示实际提示,除非 MCP_CONFIRM_ELICITATION=off。无法识别的值会按 refuse 处理。 |
MCP_CONFIRM_ELICITATION | on | off 表示绝不发送确认提示,因此所有客户端都会走 MCP_CONFIRM_MODE 指定的流程。如果某个客户端声明自己能显示提示,却从不显示(受门控的调用会挂起——opencode 2.0.x),请为该客户端设置此值。其他任何值都会保持为 on,并发出 stderr 警告。 |
MCP_CONFIRM_TTL_SECONDS | 600 | 令牌的有效时长。 |
MCP_CONFIRM_SECRET | 每个进程随机生成 | 签名密钥;只有在令牌必须在服务重启后继续有效时才设置。 |
mhlb_checkout 会从真实的支付方式扣款。服务端根据 orderIds 计算扣款金额,因此客户端无法绑定金额——请求中没有可供核对的总金额。expectedTotal 因此用于归因,而非保护:你可以声明预期金额,它会显示在确认预览中(并绑定到令牌中),也会在结果中返回,以便将意外扣款追溯到发起该操作的调用。该工具会直接拒绝的情况,是在没有 orderIds 时支付非零金额。
写入:已捕获请求结构,尚未验证是否接受
npm run capture:writes 会通过本地代理运行所有会产生更改的工具。代理会将读取请求转发到真实服务,但自行响应写入请求,因此请求负载基于真实的服务端模型构建,且不会对上游产生任何影响。它还证明,全部 13 个工具在收到 confirmToken 确认前都不会发送任何内容。
已确认并修正的内容:mhlb_delete_order 和 mhlb_unsubscribe_order 接受 {orderId, eventDate, studentId, isRepeated, isSubscribed},而非订单模型;结账操作接受 {orderIds, checkoutType, couponCode, giftCardCode, schoolDonations}。
仍未验证的是服务端是否接受这些请求体。 请求结构正确不代表服务端会接受;只有实际写入才能证明,而目前还没有进行任何写入。批准前请检查确认预览,操作后请重新读取——200 响应并不能证明写入已持久化。
mhlb_checkout 有两个特别需要注意的限制:
- 它只能使用账户上已保存的卡付款。使用新卡付款需要由浏览器中的 Stripe.js 生成 Stripe 令牌,任何服务端客户端都无法生成该令牌。
- 它会生成幂等键(除非你自行传入),并在结果和任何错误中返回该键。如果结账失败的情况不明确,请使用相同的
idempotencyKey重试,而不要重新调用——这能防止重试导致重复扣款。若由你自行传入密钥,两次确认调用必须使用相同的密钥。
排序采用读取-修改-写回模式
没有“添加项目 X”调用。获取模型、编辑模型,然后整体发送回去:
mhlb_get_menu— 查询某个日期学生可订购的内容mhlb_get_order_form— 获取要填写的订单模型(其data字段)mhlb_create_order— 发送该data(并确认预览)mhlb_init_checkout→mhlb_checkout— 先获取价格,再付款
负载中省略的字段会被清除,而不是保留。
包含学校、供应商或菜单编写文本的读取操作(日历、菜单、购物车、
订单、学生、交易、订阅、优惠券)会返回
{"untrusted_content":true,"note":…,"data":…}:负载位于 data 下,
而 note 会告知模型将这些文本视为数据,绝不能视为指令。
Shell 技能
skills/myhotlunchbox 可通过 curl 在 Shell 中访问同一账户,无需 MCP
进程。适用于脚本,或未安装此服务的机器。
备注
/deliveryInfo/*和/calendar/viewMatchedVendors在编译后的客户端中看似面向家长,但对家长账户会返回403— 它们属于学校/供应商仪表板。没有工具封装它们。- 目前只接入了家长角色。同一 API 也服务于学校管理员和供应商角色;这些端点会返回
403,客户端会将其报告为角色不匹配,而不是会话故障。 docs/MYHOTLUNCHBOX-API.md记录了 API 的映射方式以及已验证的具体内容。docs/api-surface.txt是完整的 359 个端点提取结果。
许可证
MIT
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。