mcpField
M
myhotlunchbox-mcp

myhotlunchbox-mcp

本地服务
github.com/chrischall商业与营销04 天前更新

关于 myhotlunchbox-mcp

myhotlunchbox-mcp 是面向家长的 My Hot Lunchbox MCP 服务,可查询校餐日历、管理学生与订单,并跟踪配送和付款。写入操作须确认,结账使用账户中已保存的卡。

主要功能

  1. 01查询校餐日历、菜单和订单
  2. 02管理学生资料与餐食订单
  3. 03查看交易、订阅和礼品卡
  4. 04结账并生成日历及订单 PDF
  5. 05写入操作提供确认预览

适用场景

  1. 01查看某日可订餐食及价格
  2. 02为学生创建或修改校餐订单
  3. 03核对账户付款与订阅
  4. 04确认结账内容后使用已保存卡付款

MCP 相关

作为 MCP 服务,它向客户端提供 My Hot Lunchbox 家长账户的查询和写入工具。修改订单、付款等写入操作会先请求确认。

配置

本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。

mcp.json · 通用配置
{
"mcpServers": {
"chrischall-myhotlunchbox": {
"command": "npx",
"args": [
"-y",
"myhotlunchbox-mcp"
],
"env": {
"MYHOTLUNCHBOX_USERNAME": "<MYHOTLUNCHBOX_USERNAME>",
"MYHOTLUNCHBOX_PASSWORD": "<MYHOTLUNCHBOX_PASSWORD>",
"MYHOTLUNCHBOX_BASE_URL": "<MYHOTLUNCHBOX_BASE_URL>",
"MYHOTLUNCHBOX_OUTPUT_DIR": "<MYHOTLUNCHBOX_OUTPUT_DIR>",
"MYHOTLUNCHBOX_TOKEN_CACHE": "<MYHOTLUNCHBOX_TOKEN_CACHE>",
"MYHOTLUNCHBOX_TOKEN_FILE": "<MYHOTLUNCHBOX_TOKEN_FILE>"
}
}
}
}
启动命令npx -y myhotlunchbox-mcp
需要配置的环境变量
MYHOTLUNCHBOX_USERNAMEEmail address you sign in to ordernow.myhotlunchbox.com with
MYHOTLUNCHBOX_PASSWORD密钥Password for that My Hot Lunchbox account
MYHOTLUNCHBOX_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+)。各客户端的配置文件位置不同,请参考客户端文档。

安装包
npmmyhotlunchbox-mcp1.2.8

工具

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_MODEask-user在无法显示确认提示的客户端(claude.ai、Claude Desktop)上,写入操作的处理方式。ask-user:分两步进行——首次调用不执行任何操作,只返回预览和令牌;模型必须先在聊天中获得你的批准,才能使用该令牌再次调用。auto:同样分两步进行,但模型查看预览后可自行使用令牌。refuse:此类客户端上的写入操作会被拒绝。能显示提示的客户端(Claude Code)始终会显示实际提示,除非 MCP_CONFIRM_ELICITATION=off。无法识别的值会按 refuse 处理。
MCP_CONFIRM_ELICITATIONonoff 表示绝不发送确认提示,因此所有客户端都会走 MCP_CONFIRM_MODE 指定的流程。如果某个客户端声明自己能显示提示,却从不显示(受门控的调用会挂起——opencode 2.0.x),请为该客户端设置此值。其他任何值都会保持为 on,并发出 stderr 警告。
MCP_CONFIRM_TTL_SECONDS600令牌的有效时长。
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”调用。获取模型、编辑模型,然后整体发送回去:

  1. mhlb_get_menu — 查询某个日期学生可订购的内容
  2. mhlb_get_order_form — 获取要填写的订单模型(其 data 字段)
  3. mhlb_create_order — 发送该 data(并确认预览)
  4. 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

评论

支持 Markdown

第一次接触 MCP?

从协议是什么,到在客户端里装上第一个服务,这几条回答覆盖了大多数入门问题。

一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。