Skip to main content
Glama
ArturLys

listonic-mcp

listonic-mcp

PyPI CI Python 3.10+ License: MIT

An MCP (Model Context Protocol) server that gives AI agents — Claude, Cursor, or any MCP client — hands on your real Listonic grocery list. Read it, add to it, check things off, across every device Listonic syncs to.

The obvious win: meal planning that ends in a shopping list. Ask your agent to plan the week's dinners, and the missing ingredients land straight on the list on your phone — quantities and all. Or paste a recipe and say "add what I don't have": the server tells the agent which items are checked (already at home) and which aren't.

You:   plan me 3 cheap high-protein dinners and put the ingredients on my list
Agent: [reads your list — sees you already have rice, eggs, frozen spinach]
       [adds: 1 kg chicken thighs, 400 g lentils, greek yogurt ×2, ...]

Unofficial. Not affiliated with Listonic. Built on their web app's API (reverse-engineered — fully documented in API.md). It may break if Listonic changes their API.

Install

Requires Python 3.10+ and a Listonic account (free):

pip install listonic-mcp

Related MCP server: Bring! Shopping MCP Server

Add to your agent

Point command at listonic-mcp and pass your Listonic login:

{
  "mcpServers": {
    "listonic": {
      "command": "listonic-mcp",
      "env": {
        "LISTONIC_EMAIL": "you@example.com",
        "LISTONIC_PASSWORD": "your-listonic-password"
      }
    }
  }
}

The same values can be passed as --email / --password args instead — whichever your client makes easier.

claude mcp add listonic -e LISTONIC_EMAIL=you@example.com -e LISTONIC_PASSWORD=your-password -- listonic-mcp

Cursor SettingsMCPNew MCP Server, paste the JSON config above.

Add the JSON config above to .gemini/antigravity/mcp_config.json.

Then just ask:

What's on my grocery list? Check off the milk, I just bought it.

Launch params

Param

Env var

Default

What it does

--email

LISTONIC_EMAIL

Listonic account email (required).

--password

LISTONIC_PASSWORD

Listonic account password (required).

--list-id

LISTONIC_LIST_ID

first list

Pin a default list; see get_lists for the ids.

Tools

Tool

What it does

get_lists

All your shopping lists with their ids.

get_items

Items on a list — checked (already have) vs unchecked (to buy).

add_items

Add one or many items in a single call (name, quantity, unit).

edit_items

Check/uncheck, rename, or re-quantity items — batched.

delete_items

Remove items entirely.

Every tool takes an optional list_id, so multiple lists ("weekend BBQ", "pharmacy") work naturally.

Good to know

  • Your password goes to Listonic only. The server logs in against api.listonic.com directly and talks to nothing else — no telemetry, nothing stored beyond an in-memory session token (auto-refreshed when it expires).

  • The client id/secret in the source are Listonic's own web-app credentials, embedded in their public JS bundle and shared by every web user — they are not personal secrets.

  • The full reverse-engineered API is documented in API.md — lists, items, categories, account endpoints — if you want to extend the server.

Make it yours

A single readable file with no framework magic. Fork it and edit anything — add price tracking, category sorting, a recipe parser. Run from source:

git clone https://github.com/ArturLys/listonic-mcp.git
cd listonic-mcp
pip install -e .
listonic-mcp --email you@example.com --password your-password

Credits

  • Listonic — the shopping list app this talks to. Go pay them for premium if you live off it.

License

MIT

Available Tools

5 tools
add_itemsA

Add one or MANY items in a single call — batch whole recipes, don't loop.

Args: items: the items to add. list_id: which list (from get_lists). Empty = the default list.

ParametersJSON Schema
NameRequiredDescriptionDefault
itemsYes
list_idNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.8/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries full burden for behavioral disclosure. It only states it adds items but does not mention any side effects, permissions, error handling, or behavior on duplicates. This lack of depth leaves the agent underinformed about potential consequences.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is extremely concise with two lines of text and a bulleted argument list. It front-loads the key point about batching and avoids any redundant or unnecessary sentences. Every word earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given that an output schema exists, the description does not need to explain return values. It covers the essential usage instructions, but lacks details on error conditions or constraints. For the simplicity of this tool, it is mostly complete, but could mention what happens if a list does not exist.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The description adds some context for the parameters: 'items: the items to add' and 'list_id: which list (from get_lists). Empty = the default list.' However, the input schema already provides descriptions for nested properties (name, unit, quantity). The description does not substantially exceed schema information, and schema coverage is 0% (meaning schema descriptions are not counted?), but the added context about list_id being from get_lists and default list behavior is helpful.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb ('Add') and resource ('items'), and clearly distinguishes from siblings like 'get_lists', 'get_items', 'edit_items', and 'delete_items'. It states the tool can add one or many items in a single call, which is a clear purpose.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description advises to batch whole recipes and not loop, providing clear when-to-use guidance. It also mentions that list_id comes from 'get_lists', but does not explicitly exclude cases when not to use it. Overall, it gives sufficient context for appropriate usage.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

delete_itemsA

Delete items entirely (not check off — that's edit_items with is_checked).

Args: item_ids: ItemIDs to delete (from get_items). list_id: which list (from get_lists). Empty = the default list.

ParametersJSON Schema
NameRequiredDescriptionDefault
list_idNo
item_idsYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.6/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations provided, so description carries full burden. Clearly states 'delete items entirely' indicating destructiveness, but lacks details on permanence or permissions.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two clear paragraphs with minimal waste, though could be slightly more structured. Efficient and user-friendly.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Covers key aspects for a simple delete tool: purpose, parameter sourcing, and sibling distinction. Output schema exists, so return values not needed. Minor gaps in behavioral details.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0%, but description adds full meaning: item_ids from get_items, list_id from get_lists, and default behavior when empty.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Clearly states the tool deletes items entirely and distinguishes from checking off, which is handled by edit_items. Verb and resource are specific.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly tells when not to use this tool (use edit_items for check off) and instructs on sourcing IDs from get_items and get_lists, with default behavior for list_id.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

edit_itemsA

Edit one or MANY items in a single call — most often to check/uncheck while shopping ("got the milk").

Args: items: edits to apply; only the fields you set are changed. list_id: which list (from get_lists). Empty = the default list.

ParametersJSON Schema
NameRequiredDescriptionDefault
itemsYes
list_idNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.6/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description must fully communicate behavioral traits. It states that the tool edits items and only changes specified fields, but it does not disclose any side effects, authentication requirements, rate limits, or what happens on failure. This is minimal information for a mutation tool.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is reasonably concise, with a clear front-loaded purpose followed by an Args section. It is well-structured and easy to read, though the Args section could be integrated more tightly into the prose.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description covers the essential parameters and provides a usage example, but it lacks information about return values (though an output schema exists), error handling, or prerequisites. Given the tool's complexity and the presence of sibling tools, it is adequate but not fully comprehensive.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The description adds meaningful context to both parameters: 'items: edits to apply; only the fields you set are changed' and 'list_id: which list (from get_lists). Empty = the default list.' Although the input schema contains descriptions for the nested fields, the description provides high-level guidance on how to use them, which compensates for the 0% schema coverage metric.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly identifies the tool as editing one or many items, with a specific usage example of checking/unchecking items while shopping. The phrase 'only the fields you set are changed' further clarifies the partial update behavior, distinguishing it from sibling tools like add_items, delete_items, and get_items.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides a typical use case ('most often to check/uncheck while shopping') and mentions the list_id parameter's source ('from get_lists'), but it does not explicitly state when to use this tool vs alternatives like add_items or delete_items, nor does it provide any exclusion criteria.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_itemsA

Fetch the grocery list. Call this FIRST before editing/deleting, to get ItemIDs.

Checked items ([x]) = the user most likely already HAS them at home. Unchecked items ([ ]) = still to buy.

Args: list_id: which list (from get_lists). Empty = the default list.

ParametersJSON Schema
NameRequiredDescriptionDefault
list_idNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Without annotations, the description carries full burden for behavioral disclosure. It explains the meaning of checked/unchecked items ('user most likely already HAS them at home') and the default behavior of list_id. It implies a read-only fetch, which is transparent.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is concise with two paragraphs, front-loading the main purpose and then adding context. Every sentence serves a purpose, though it could be slightly tighter without losing clarity.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the presence of an output schema (not shown but indicated) and the single parameter, the description covers the essential usage context: when to call, parameter meaning, and interpretation of checked state. It is complete for the tool's intended role.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema has 0% description coverage, so the description compensates by explaining that list_id refers to a list from get_lists and that an empty value means the default list. This adds significant meaning beyond the schema's type and default.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool 'fetch[es] the grocery list,' which is a specific verb-resource pair. It distinguishes itself from siblings like get_lists (lists vs items) and explains its role as a prerequisite for editing or deleting items by providing ItemIDs.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly says 'Call this FIRST before editing/deleting, to get ItemIDs,' providing clear when-to-use guidance. It does not mention alternatives or when not to use it, but the context is sufficient for the agent to decide.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_listsA

All shopping lists on the account, with their ListIDs.

Use when the user has several lists ("weekend BBQ", "pharmacy") — every other tool takes an optional list_id to target one; without it they use the default list (the pinned --list-id, or the account's first list).

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.7/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description adequately discloses it returns all account lists with IDs—a read-only operation. It doesn't mention potential pagination or performance, but for a parameterless list tool this is sufficient.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two concise sentences, front-loaded with purpose, no redundant information. Every word adds value.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's simplicity (0 params, no annotations, output schema present), the description fully covers what an agent needs: what it returns and when to use it relative to siblings.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

No parameters exist, so baseline 4 applies. The description adds value by clarifying the output includes ListIDs.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool returns 'all shopping lists on the account, with their ListIDs'. It distinguishes from sibling tools which operate on items, not lists.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly advises use when the user has several lists, and explains how other tools use list_id with default fallback, providing clear context for when to use this tool.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 5 tool updatesv0.1.0
    • First observedadd_items
    • First observeddelete_items
    • First observededit_items
    • First observedget_items
    • First observedget_lists

TDQS

A4.1/5.0

Scored across 5 tools

Disambiguation5/5

Each tool has a distinct purpose: get_lists retrieves all lists, get_items fetches items from a list, add_items adds items, edit_items modifies items, delete_items removes items. No overlapping functionality.

Naming Consistency5/5

All tools follow a consistent verb_noun pattern (get_lists, get_items, add_items, edit_items, delete_items) with no deviations.

Tool Count5/5

5 tools is appropriate for a grocery list management MCP server, covering the core operations without being too few or excessive.

Completeness3/5

The tool set covers item CRUD operations fully but lacks list management tools (create, update, delete lists). This is a notable gap that may hinder user workflows requiring new list creation or deletion.

Maintenance

ActivitySlowing
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • F
    license
    A
    quality
    D
    maintenance
    Enables AI assistants to manage shopping lists and items (create, edit, delete, mark as purchased) via integration with a backend API.
    8
    -
  • A
    license
    Not graded
    quality
    D
    maintenance
    Enables AI assistants to read and manage your Bring! shopping lists through natural language commands like adding items, marking purchases, and retrieving list contents.
    MIT