jouaaaaaa/mcd-self-butler

Productivity & Utilities

A McDonald's ordering assistant for people juggling price, nutrition and time, built on the chain's MCP server.

168
3
Python
MIT
1 day old

A contest entry rather than a polished product: it is worth a look if you use the McDonald's MCP in WorkBuddy or your own agent, and less useful if you just want a menu picker.

The problem

Deciding what to order at McDonald's usually means checking a price, guessing at calories, and picking whichever branch is nearest. Those checks live in different places, and a combo's nutrition is not shown as one number, so a lunch decision becomes three separate guesses. McButler takes the menu, combo and nutrition data from the McDonald's MCP and turns one request into a ranked result: a combo broken into items with summed calories, protein, fat and sodium, three branches compared on total cost including walking and queue time, or a 30-person group order split by dietary restrictions. What changes is that the constraints are combined in one pass instead of checked one at a time.

What's different

The interesting part is the health check. The nutrition interface returns single items only, so the tool calls meal detail, takes the default combo components, and looks each one up in the nutrition table before scoring out of 100 with itemized deductions. It labels every number as measured, official or estimated, and returns no score rather than a fabricated one when nothing matches — a deliberate stance given the contest setting. Branch comparison is also not just price: it adds 0.5 yuan per km round trip and 0.30 yuan per minute of walking and queuing, so the nearest store can lose on total cost.

The trade-off is that most numbers rest on inputs the MCP does not supply. Queue time has no interface and is an explicit parameter, and the demo files label it as a sample value. The branch comparison therefore reflects whatever waiting time the caller supplies. The "McCredit score" maps order history, coupons and points onto a six-dimension scorecard in the 300–950 range; it is a playful framing of behavioral data, not a credit product. The theater feature generates dialogue from the user's own coupons and scores, so its output depends on having that data on hand.

Who should try it

Good fit: someone already using the McDonald's MCP in WorkBuddy who wants a reusable recipe for combo decomposition, cost comparison and group orders, and who can supply their own data snapshots. Developers can also use the data-loading layer and demo snapshots offline. Poor fit: someone expecting a ready-made ordering app — the online demo is only the theater page, and a real recommendation needs a configured MCP connection and a token. The local CLI runs on demo data without a token, which is useful for judging output quality but will not answer questions about today's menu at a real branch.

Requirements and limitations

The recommended path needs WorkBuddy with the MCP configured and a bearer token. The CLI path needs only Python 3.8+ and has no third-party dependencies; it reads the snapshots in demo/, and results can be reproduced offline. Group dining filters "no beef" by item-name keywords, so items with unlisted ingredients are not guaranteed to be excluded. Promotions are reachable through the MCP but not applied on top of the bulk planner. The formulas and parameters are documented in the model spec if you want to check or adjust them.

HotRepo's take

HotRepo's only observation is a 168-star, #19 position on the NEW-REPOSITORY (新项目榜) board for Python on 2026-10-25, with one day of star coverage; that is a snapshot, not a growth rate, and there is not enough daily history to judge whether interest persists. Before relying on it, check whether your MCP client produces responses in the shape mcdata.py expects, since the project's own examples are built on saved snapshots.

Written by AI from the project's README, updated October 25, 2026. The project's own docs are the source of truth.