OurGroceries API: an official-key MCP alternative
The reviewed OurGroceries user guide and FAQ do not document an official public developer API. The community MCP server takes an email and password, then stores an authentication cookie and team ID.
| Route | Status | Login |
|---|---|---|
| Python wrapper | Unofficial | Username and password |
| OurGroceries MCP | Community server | Email and password; saved cookie and team ID |
| LystBot REST, CLI and MCP | Official interfaces; MCP has 26 tools | LystBot API key |
The official user guide and FAQ used for this comparison do not document a public developer API. That does not erase the community projects. It means the programmatic routes described here should be evaluated as unofficial integrations with their own credential requirements.
LystBot offers an official API-key route instead. Its agent setup covers REST, a CLI and a local MCP server using the same key. You can test one list without committing your whole household to a move.
Start with what already works
OurGroceries documents access through Alexa, Siri, a computer, Apple Watch and Wear OS. Its overview also lists Alexa for updating lists. Those are practical reasons to keep an existing routine if it already suits the people who shop.
The user guide describes adding items by voice with Google Assistant on a phone. Its FAQ also reports Siri difficulties after changes in iOS 16.4 and watchOS 9.4. Read the instructions for the route you use rather than assuming every assistant behaves identically.
There is also a Home Assistant Core integration. Home Assistant describes it as Cloud Polling and says it adds a to-do entity for each shopping list. That's a Home Assistant integration, not proof of an official vendor developer API or an MCP connection. If you already run Home Assistant, it is still worth considering on its own terms.
For pricing, the FAQ establishes that a purchased upgrade applies to devices on the same account. We aren't quoting a specific price because the evidence used for this article doesn't establish one. A fair integration comparison doesn't need a guessed subscription figure.
What the community connection requires
The Python wrapper calls itself unofficial. The OurGroceries MCP project documents an interactive login with the account email and password; its saved cookie and team ID are part of the resulting setup. Read that authentication flow before handing it to an assistant environment.
Ask where the login happens and where the saved cookie will live. A cookie is still a credential. Moving from a password prompt to a cached session doesn't remove the need to trust the machine and the code handling it. This is a question about the documented authentication model, not a claim that the community projects have a security defect.
If you searched for "our groceries api" and found several projects, compare their actual login instructions before comparing their tool names. A connector that can add an item may be convenient, but convenience alone doesn't tell you whether its credential model fits your setup.
Try the official-key route with a small list
In the LystBot app, open Settings, then AI Agents, and copy your API key. The developer docs explain that the CLI and server use this key. It remains sensitive: don't paste it into a public issue or a shared chat transcript.
Run the documented login and read commands in your terminal:
npx lystbot login YOUR_API_KEY
npx lystbot lists
Replace the placeholder with your own key. The CLI stores it in ~/.lystbot/config.json. Check that the returned lists match what you see in the app. If they don't, investigate before you add or check off anything.
Next, make a small grocery trial. Use the following creation command only if this is a new list; otherwise read the existing one first:
npx lystbot create "Groceries" --type shopping --emoji "🛒"
npx lystbot add "Groceries" "Milk, Eggs, Bread"
npx lystbot show "Groceries"
Read the result on your phone. Check the list name and all three items. This catches the common mistake of proving that a command ran while never checking where it saved its changes. The CLI walkthrough explains the same terminal workflow without an assistant in the middle.
Connect Claude to the list you checked
For Claude Code, register LystBot with the command from the agent documentation:
claude mcp add lystbot -- npx lystbot mcp
The process runs locally over stdio. It is not a hosted URL, so a client that accepts only remote MCP endpoints needs another route. LystBot's REST API is the documented option for HTTP integrations.
Ask Claude to read the available lists before changing anything. Then ask for the contents of the grocery list you just checked. A first write should be small enough to inspect immediately: one new item, with the target list named explicitly. Verify it in the app before asking for a whole recipe's ingredients.
The server has 26 tools, including list_lists, get_list, add_items and check_item. The list also includes categories and reminders. Tool availability doesn't mean you should request every operation at once. Reading first gives you a chance to catch an ambiguous list name. Our Claude grocery article has more examples of that day-to-day use.
Keep deterministic jobs in scripts
If the job is "read my lists at the start of a script," use the REST interface directly:
curl https://lystbot.com/api/v1/lists \
-H "Authorization: Bearer YOUR_API_KEY"
That exact read example is in the API documentation. New-record writes have further requirements, including client-generated UUIDs. Read the endpoint reference before turning a read-only test into a recurring write job. Repeating a successful add operation can create unwanted extra items; check the current list before rerunning an uncertain request.
A conversational assistant is useful when the input needs interpretation, such as a rough dinner plan. A fixed command is easier to inspect when the input and desired operation are already known. You can use both against the same LystBot lists.
Run the apps side by side honestly
This setup does not create a bridge to your old lists. There is no cross-app import or synchronization step in the documented trial. Manually copy a few current items and agree which list everyone will shop from for that trip. Keep the old data available until you have checked the new routine.
Avoid editing the same shopping plan independently in two apps. If one person checks off eggs in one place while another adds eggs elsewhere, you've created a coordination problem that no successful MCP connection will fix. A one-week trial with a clearly named active list is easier to evaluate.
For related comparisons, read the AnyList access guide and Google Keep access guide. The credential requirements differ, and the choice should follow the workflow you actually need.
FAQ
Is the Python wrapper an official vendor API?
The wrapper's own repository describes it as unofficial. The official sources reviewed here don't establish a public developer API.
Does the community MCP server avoid account login?
Its documented login flow asks for email and password, then stores an authentication cookie and team ID. Evaluate that flow before using it.
Should I replace a working Home Assistant setup?
The Home Assistant integration already exposes shopping lists as to-do entities. If that meets your need, a second connection may add little. Test a different route only for a concrete missing workflow.
Does LystBot move my lists automatically?
This guide establishes a manual trial, not automatic migration. Copy a small list, inspect it, and finish a real shopping trip before deciding whether to move more.
For HTTP workflows, see the shared grocery API examples.