ametller-origen-skill
This server provides a comprehensive integration with Ametller Origen's grocery platform, covering catalog browsing, cart management, order history, and purchase insights — without checkout or payment capabilities.
Shopping Guide – Retrieve the Ametller Origen shopping playbook (presentation rules, cart review workflow, reorder instructions) to follow before any task.
Authentication – Check session status and trigger a browser-based login flow when needed.
Product Search – Search the live catalog by keyword (Catalan works best) and retrieve product IDs, prices, and match details.
Product Details – Fetch full details (images, price, units, availability) for a single product by ID.
Cart Management – View the current cart, add items, set exact quantities, and remove items.
Online Order History – List past online orders with pagination or full history, and inspect individual order line items.
Reorder Past Orders – Add all items from a previous order back to the cart in one step.
Offline Ticket Ingestion (Gmail) – Store normalized offline store receipts sourced from a connected Gmail account, with an optional local CLI sync fallback.
Read Offline Tickets – Browse cached offline shop receipts with optional date filtering and item details.
Purchase Insights & Smart Basket – Analyze combined online and offline purchase history for spending trends by month/category and frequent products; get repeat-purchase suggestions, including an experimental protein-rotation meal planning mode.
Allows fetching and syncing offline store tickets from Gmail.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@ametller-origen-skillsearch for fresh fruit"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
Ametller Origen skill and MCP
Open Claude integration for Ametller Origen's live catalog, online orders, real cart, optional offline Gmail tickets, purchase analytics, and smart basket suggestions. It intentionally has no checkout, payment, delivery-slot, or order-placement tool. Chrome is used only to establish authorization; all catalog, order, analytics, and cart operations use APIs and never drive or scrape the shopping website.
Version 0.5.3 makes raw receipt inspection safely paginated and turns buy-again into a preview-and-approve workflow. It keeps Claude's existing Gmail connection as the primary offline-ticket path and retains local gws only as an optional automation fallback.
Install in Claude Code
Requires current Claude Code, Node.js 20 or newer, and installed Google Chrome.
claude plugin marketplace add denya/ametller-origen-skill
claude plugin install ametller-origen@denya-groceryStart or reload Claude Code, then ask for Ametller Origen or invoke /ametller-origen:ametller-origen. The MCP server starts automatically. On the first account action Claude opens the official Ametller login in Chrome; enter credentials and 2FA only in that browser. After the login response is captured, Chrome closes and normal operations use the direct API.
Claude Code stores the browser-created session in its persistent private plugin-data directory, not in the versioned plugin cache. Uninstall with --keep-data if you want to preserve that authorization.
For offline shop tickets, connect Gmail in Claude's Connectors settings. The integration uses that normal Gmail connection first; no separate Google CLI is needed.
Related MCP server: frisco-mcp
Install in Claude Desktop
Download the v0.5.3 installer:
Download Ametller Origen v0.5.3 for Claude Desktop (.mcpb)
Download the
.mcpbfile from the link above.Open Claude Desktop on macOS.
Go to Settings → Extensions → Advanced settings → Install Extension….
Select
ametller-origen-0.5.3.mcpband approve the installation.Ask Claude to use Ametller Origen. Chrome opens only when account authorization is needed.

This release targets Claude Desktop on macOS. The bundle is self-contained; Node.js and Chrome are required. Desktop state is kept in ~/.ametller/session.json with mode 0600.
To build the same bundle from source instead:
git clone https://github.com/denya/ametller-origen-skill.git
cd ametller-origen-skill
npm ci
npm run pack:mcpbWhat you can ask
Think of the integration as two honest lanes: repeat prediction uses only products already present in your history, while discovery searches the live catalog for something new. Useful requests include:
“Browse Ametller for kefir, show official images and links, and compare the exact pack sizes.”
“Show my previous online orders and the latest offline shop tickets.”
“Prepare a new basket, but let me review every item before anything is added.”
“Suggest what I should buy today based on my previous online and offline orders.”
“Show me something local or new.”
“Find a sausage I have never tried.”
“Suggest Spanish fruits I may not know as a Russian newcomer.”
“Show my most frequent products and spending by month and category.”
The local/new, untried-sausage, and unfamiliar-fruit examples use live catalog/content exploration; a repeat-purchase model cannot infer a genuinely unseen product from one household's receipts. The optional protein-rotation mode is a separate experimental meal-planning objective: it improves protein-family coverage in the research audit but slightly reduces exact-product ranking accuracy.
Test the local MCP
Build and verify the new server without touching a real account:
git clone https://github.com/denya/ametller-origen-skill.git
cd ametller-origen-skill
npm ci
npm run verifynpm run verify is the one-command checkout-free gate: unit/contract tests, isolated MCP smoke, no-browser login wiring, strict Claude plugin validation, MCPB validation, and dependency audit. It never invokes login or opens a browser. Secret/history scanning remains a separate release-maintainer gate using the repo's existing gitleaks configuration.
Run it as a local Claude Code plugin:
claude --plugin-dir "$(pwd)"Then ask: “Suggest what I should buy today from my full online and offline Ametller history.” The first account read opens Chrome for sign-in if the saved session is missing or expired.
Automated packaging and E2E tests never open or navigate Chrome. ametller_login opens the official login only after a real user-initiated authorization request; an already saved session is used directly by API tests.
For Claude Desktop, build the one-click local extension:
npm run pack:mcpbInstall dist/ametller-origen-0.5.3.mcpb through Settings → Extensions → Advanced settings → Install Extension…. This bundle contains the interactive analytics view and offline-ticket ingestion. Anthropic MCP Apps support is required for the interactive view; other MCP clients still receive the structured text result.
Offline tickets and CLI
For local development or direct use:
npm ci
npm run build
npm run login
npm run cli -- search 'quefir natural'
npm run cli -- cart
npm run cli -- orders all
npm run cli -- insights 12
npm run cli -- suggestions 12
npm run cli -- suggestions 12 protein-rotationOffline store tickets are separate from SCAPI online orders. The recommended customer workflow uses Claude's connected Gmail integration:
“Refresh my Ametller offline tickets from Gmail and update my purchase insights.”
Claude searches the exact digital-ticket subject, reads the messages through Gmail, and sends only normalized receipt fields to ametller_ingest_offline_tickets. Raw email bodies are not stored, and Gmail messages are not modified. See Anthropic's Gmail integration documentation for connection and privacy behavior.
As a second option, advanced local users can use Python 3 plus an authenticated gws on PATH:
npm run tickets:sync -- --overwrite
npm run cli -- tickets 50Tickets default to ~/.ametller/tickets with private directory/file modes. ametller_get_offline_tickets reads tickets ingested by either method: use summary=true for aggregates, or follow raw 5-ticket pages via next_offset for receipt inspection. The gws sync remains optional and offline tickets are not part of Ametller's commerce API.
Capabilities and boundaries
Search products and return official links, all image variants, prices, units, and safe availability flags.
Read complete paginated online order history and individual order lines.
Sync and read offline digital tickets from Gmail without browser scraping.
Group purchases, show monthly/category spend, and rank frequent products.
Clean placeholders/service lines, remove exact duplicate receipts, merge same-day receipts for prediction, and rank repeat products with the validated 10/30/120-day recency model.
Exclude the current API cart and resolve exact product/pack/price against the live catalog by id or a conservative name+price match.
Add, set, or remove cart items after explicit approval. Buy-again first previews and revalidates historical lines, then adds only the exact approved subset with failure restoration; there is no checkout tool.
See the predictor research for the chronological evaluation and the reusable shop-integration harness for the release workflow.
Current limitations: offline category grouping is a transparent name-based estimate; receipt discounts are not allocated across categories; uncertain ticket-to-catalog matches are shown but cannot be selected; repeat prediction cannot score unseen products; a reorder apply refuses absent or complex baskets that cannot be losslessly restored. Category browsing, search refinements, dedicated promotions, wishlists, and coupons are good future API candidates. Shipping, delivery, payment, and order placement are intentionally out of scope.
Verify a checkout-free build
npm run verifyRelease maintainers can separately run npm run test:mcp:live and npm run e2e:readonly for sanitized direct-API checks. The real-cart E2E additionally requires the explicit AMETLLER_E2E_MUTATE=1 gate and refuses an originally absent or complex basket.
The committed dist/server.mjs is deterministic and lets Claude Code install without relying on npm install inside its plugin cache. Normal Chrome login is supported; Playwright's optional WebDriver-BiDi bridge is not bundled. Custom MCPB installation is supported, but this project has not been reviewed for Anthropic's public extension directory.
Live single-product cart restoration is release-tested. The two-phase reorder path is failure-injection tested and revalidates current catalog/orderability/pack data, but this release does not perform a large real historical-order mutation merely for testing. Unresolved, unavailable, promotion/bonus, and incompatible-quantity lines remain excluded and visible for review.
Maintained by Denis Moskalets. The main contact is X/Twitter @denyamsk; you can also reach Denis on Telegram @denyamsk.
MIT licensed. Based on Igor Safonov's MIT-licensed Ametller Origen MCP extension. Independent project; not affiliated with, endorsed by, or sponsored by Ametller Origen.
Available Tools
15 toolsametller_add_to_cartAdd to cartA
Add a product to the real cart by id (get the id from ametller_search_products first). If already present, increases the quantity. Returns the updated cart with its total.
| Name | Required | Description | Default |
|---|---|---|---|
| quantity | No | How many to add (default 1) | |
| product_id | Yes | Product id from ametller_search_products, e.g. '1251' |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Discloses mutation (add to cart), idempotency (increases quantity if present), and return value (updated cart with total). No annotations provided, so description carries full burden; it does well.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, no wasted words, front-loaded with action. Efficient and clear.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Complete for a simple 2-param tool with no output schema: covers purpose, preconditions, side effects, and return value. Lacks mention of authentication, but sibling login tool suggests context.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, baseline 3. Description adds little beyond schema: only mentions product_id source and quantity default, which are already in schema descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clearly states 'Add a product to the real cart by id', distinguishes from sibling tools like remove_from_cart and set_quantity, and specifies source of id (ametller_search_products).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly instructs to get product id from ametller_search_products first, and describes behavior if product already present. Lacks explicit when-not-to-use but adequate for context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ametller_auth_statusAuth statusB
Check whether the Ametller Origen session is valid.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description does not disclose any behavioral traits beyond the minimal purpose. No annotations exist, so the description should cover safety, required authentication, or return format. It only says 'check whether valid', omitting important details like that it is a read-only operation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, efficient sentence that conveys the purpose without extraneous words. Every part is essential.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no output schema and no annotations, the description should at least hint at the return type (e.g., boolean) or side effects. It does not, leaving the agent uncertain about what to expect.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
No parameters exist, so the description is not required to add parameter meaning. With 100% schema coverage and zero params, a baseline of 4 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool checks session validity, using a specific verb ('Check') and resource ('Ametller Origen session'). It distinguishes itself from sibling auth tools like ametller_login by focusing on status verification.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this tool versus alternatives such as ametller_login or when a session is already known. The description only states what it does, with no context or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ametller_get_cartGet cartA
Show the current real shopping cart (items, quantities, total).
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It discloses that the tool returns 'current real' cart data, implying live state. However, it does not mention authentication requirements, empty cart behavior, or response format, which is acceptable for a simple read-only tool with no parameters.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence that front-loads the purpose. Every word earns its place, with no redundancy or filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no parameters, no output schema, and no annotations, the description is minimal. It conveys the basic function but omits details like potential empty cart or response structure, which would help an agent build correct expectations.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
No parameters exist; the schema is empty with 100% coverage. The description adds nothing beyond the schema, which is fine. Baseline for 0 parameters is 4.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'show' and the resource 'current real shopping cart', specifying that it returns items, quantities, and total. This uniquely identifies the tool among siblings like ametller_add_to_cart and ametller_get_order_items.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for viewing the cart but provides no explicit guidance on when to use it versus alternatives (e.g., get_order_items for past orders). No exclusions or context are given, leaving the agent to infer.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ametller_get_offline_ticketsGet offline shop ticketsARead-only
Read privately cached offline Ametller shop tickets in bounded pages of at most 5, or set summary=true for compact frequent-product and category-leader analytics without returning raw receipts. Refresh with connected Gmail plus ametller_ingest_offline_tickets, or use the optional gws sync.
| Name | Required | Description | Default |
|---|---|---|---|
| to | No | End date YYYY-MM-DD | |
| from | No | Start date YYYY-MM-DD | |
| limit | No | Requested tickets (raw responses are capped at 5 per page; summary default 500) | |
| offset | No | Raw-page offset returned as next_offset by the previous call | |
| summary | No | Return compact offline-only frequency/category analytics instead of raw tickets; scans up to 500 tickets | |
| include_items | No | Include item lines (default true) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Discloses pagination (bounded pages of at most 5), summary mode behavior (scans up to 500 tickets), and refresh methods. No contradiction with annotations (readOnlyHint: true). Adds significant context beyond annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences that front-load purpose and pack key details efficiently. Slight room for improvement in structure, but overall concise.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Covers two modes (raw vs summary), pagination, and refresh options. Missing details like explicit return format (next_offset) but schema covers offset. Adequate for a read tool with no output schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with detailed descriptions. The description adds overarching context (e.g., 'bounded pages of at most 5' for limit) but does not significantly enhance individual parameter semantics beyond what schema already provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool reads privately cached offline Ametller shop tickets with pagination and optional summary mode. It distinguishes from sibling tools like ametller_ingest_offline_tickets and ametller_sync_offline_tickets by mentioning refresh mechanisms.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides context for using summary vs raw tickets and mentions how to refresh data (Gmail + ingest or gws sync). However, it does not explicitly state when not to use this tool or contrast with alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ametller_get_order_itemsOrder itemsA
List the products in a past order (without adding anything). Defaults to the most recent order if order_id is omitted.
| Name | Required | Description | Default |
|---|---|---|---|
| order_id | No | Order id from ametller_get_purchase_history; default = latest order |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Without annotations, description partially covers behavior: read-only (without adding), default behavior. But does not disclose auth requirements, rate limits, or pagination. Adequate but not comprehensive.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Single sentence with no unnecessary words. Front-loaded key information: action, resource, and default behavior.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple list tool with one optional parameter and no output schema, description is fairly complete. It covers purpose, default, and non-destructive nature. Could mention expected output format or auth, but not critical.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, with description for order_id already provided. Tool description adds no extra meaning beyond schema; baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description uses specific verb 'List' and resource 'the products in a past order'. It distinguishes from siblings by stating 'without adding anything', implying read-only, contrasting with reorder and add-to-cart tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Description implies usage context: for viewing past order items, non-destructive, defaults to latest order. But lacks explicit when-to-use vs alternatives like get_cart or reorder_order, though sibling names make it inferable.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ametller_get_productGet productA
Get details for a single product by id.
| Name | Required | Description | Default |
|---|---|---|---|
| product_id | Yes | Product id, e.g. '1251' |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the burden. It states it gets details but does not mention permissions, side effects, or return format. For a simple read operation, this is adequate but minimal.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Single sentence, front-loaded with verb and resource, no extraneous words. Extremely concise and effective.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the simplicity of the tool (one parameter, no output schema), the description is complete enough to understand its purpose. It could mention that it returns product details, but the name implies that.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema provides full coverage with a description and example for the single parameter. The description adds no additional meaning beyond what the schema already provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The verb 'Get' and resource 'details for a single product by id' clearly state what the tool does. It distinguishes itself from sibling tool 'ametller_search_products' which is for searching multiple products.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage when a specific product_id is known, but does not explicitly state when to use this tool versus alternatives like search_products. No exclusion or alternative guidance provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ametller_get_purchase_historyPurchase historyA
List past online orders (date, total, status, item count), by page or as the full bounded history.
| Name | Required | Description | Default |
|---|---|---|---|
| all | No | Fetch every page, up to the safety limit | |
| page | No | Page is 1-based; default 1 |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided; description mentions a safety limit for 'all' but does not elaborate on read-only nature, error handling, or auth requirements. Adequate but lacks depth.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Single sentence, no redundancy, front-loaded with purpose. Every word earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Covers key aspects given no output schema, but lacks details on the safety limit value and return format structure.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema descriptions cover 100% of parameters; description adds context about pagination and safety limit for 'all', adding value beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states it lists past online orders with specific fields (date, total, status, item count), and distinguishes from siblings like get_order_items and get_cart.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Describes pagination options (by page or full bounded history) but does not explicitly state when to use this tool versus alternatives or provide exclusion criteria.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ametller_get_shopping_guideShopping guide (read first)A
Return the Ametller Origen shopping playbook: how to present products (ALWAYS as a photo-grid artifact), fill and review the real cart, and reorder past shops. Call this once at the start of any Ametller task — before searching or adding to the cart — and follow it.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description states it 'returns the shopping playbook' but does not disclose potential side effects, permissions needed, or whether it's a live fetch. This is adequate but not detailed.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is three sentences, efficient and to the point. It front-loads the key action and usage instruction. Slightly verbose due to listing contents, but acceptable.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with no parameters and no output schema, the description provides sufficient context: what the guide contains and when to use it. It does not describe the output format but is otherwise complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
There are no parameters; schema coverage is 100% trivially. Per the scoring guidelines for 0 parameters, baseline is 4. No additional parameter info is needed.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly specifies the tool returns the 'Ametller Origen shopping playbook' and outlines its contents (product presentation, cart management, reordering). It contrasts well with sibling tools that perform distinct actions like adding to cart or searching.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly instructs to call this tool 'once at the start of any Ametller task' and before other actions like searching or adding to cart. However, it does not mention when not to use it or alternative tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ametller_ingest_offline_ticketsIngest tickets from connected GmailAIdempotent
Store normalized Ametller receipts already read through Claude's connected Gmail integration. Pass only receipt fields, never the raw email body. This is the primary offline-ticket path; it does not modify Gmail.
| Name | Required | Description | Default |
|---|---|---|---|
| tickets | Yes | Normalized receipts; use repeated batches for larger histories | |
| overwrite | No | Replace an already ingested ticket with the same id (default false) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations indicate idempotent and non-destructive behavior. The description adds that it does not modify Gmail and that only receipt fields should be passed, not raw email bodies, which provides useful behavioral context beyond the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three concise sentences, front-loaded with the core purpose. Every sentence adds value without redundancy. No wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No output schema is present, so the description could have mentioned what the tool returns (e.g., confirmation or error details). However, given the simplicity of the tool and the annotations, the description is adequate but not fully complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline is 3. The description adds extra semantic guidance: pass only receipt fields, use repeated batches for larger histories, and explains the overwrite parameter's purpose ('Replace an already ingested ticket with the same id'). This raises the score above baseline.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('store') and the resource ('normalized Ametller receipts'), and distinguishes it as the primary offline-ticket path that does not modify Gmail, setting it apart from siblings like ametller_sync_offline_tickets.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description clarifies that this is the primary offline-ticket path and that it does not modify Gmail, but it does not explicitly list when not to use it or name alternatives like syncing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ametller_loginLog in to Ametller OrigenA
Open a browser window to sign in to Ametller Origen. The user logs in (and handles any 2FA); the session is then saved so all other tools work. Call this when not signed in, or when a tool reports the session expired.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Discloses opening a browser, user handling of 2FA, and session persistence. Without annotations, this provides adequate behavioral context for a login tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, no fluff. Front-loaded with purpose, then usage guidance. Every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Covers purpose, when to use, and key side effects. No output schema, but login tools typically don't need extensive return value docs. Could mention error handling, but acceptable for this complexity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
No parameters exist, so per guidelines baseline is 4. No additional meaning needed.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clearly states the tool logs into Ametller Origen, with a specific verb 'sign in' and resource. Sibling tools like ametller_auth_status are distinct, making the function unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly says to call when not signed in or after session expiry. Does not explicitly list alternatives but the context is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ametller_purchase_insightsPurchase insights and smart basketARead-only
Analyze full online order history plus optional cached offline tickets: frequent products, spend by month/category, official product images, and backtested repeat-purchase suggestions. In Claude Desktop, renders an interactive view; nothing is added unless the user checks products and presses the real-basket approval button.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Max products and suggestions (default 12) | |
| include_offline | No | Include locally cached offline Gmail tickets (default true) | |
| suggestion_mode | No | repeat is the validated default; protein-rotation is an experimental meal-planning objective |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare readOnlyHint=true. The description adds important context: it renders an interactive view and does not add anything to cart without explicit user approval. This clarifies it is non-destructive and reveals the interactive behavior beyond the annotation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences: the first states the core analysis capabilities, the second explains interactive behavior and safety. No redundant information, front-loaded with purpose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description lists key output sections (frequent products, spend by month/category, images, suggestions) and mentions interactive rendering. While no output schema exists, this gives a solid understanding of returns. Lacks detail on error handling or edge cases, but sufficient for the tool's complexity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with existing parameter descriptions. The description adds context for include_offline ('optional cached offline tickets') and suggestion_mode ('backtested repeat-purchase suggestions') but does not significantly enhance meaning beyond the schema. Baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it analyzes full online order history and offline tickets to provide frequent products, spend breakdowns, images, and purchase suggestions. This distinguishes it from sibling tools like get_purchase_history or add_to_cart, which focus on raw data or cart actions.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No explicit guidance on when to use this tool versus alternatives such as get_purchase_history for raw data or get_shopping_guide for recommendations. The description implies it is for aggregated insights but lacks when-not-to-use or alternative tool references.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ametller_remove_from_cartRemove from cartA
Remove a product from the cart entirely. Returns the updated cart.
| Name | Required | Description | Default |
|---|---|---|---|
| product_id | Yes | Product id |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided. Description states mutation effect and return value but does not mention prerequisites or behavior for invalid product_id.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Single sentence, no unnecessary words. Front-loaded with purpose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Adequate for a simple 1-param tool without output schema. Could mention error handling but not critical.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with 'Product id' description. Tool description adds no further meaning beyond schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clear verb 'Remove' and resource 'product from the cart'. Distinguishes from sibling tools like 'set_quantity' and 'get_cart'.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No explicit when-to-use or when-not-to-use. Implies removal when product should be gone entirely, but lacks guidance vs alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ametller_search_productsSearch productsA
Find a product and its id (needed before ametller_add_to_cart). Use a short term; Catalan works best (e.g. 'llet', 'pa'). Returns matches with ids and prices.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Max results (default 24) | |
| query | Yes | Search text, e.g. 'llet semidesnatada' or 'olive oil' |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the burden. It discloses the return of matches with ids and prices, and hints at language behavior (Catalan works best). However, it does not discuss edge cases (e.g., empty results), pagination, or sorting. Adequate but not exhaustive.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Description is two sentences, no waste. The first sentence states purpose and dependency, the second adds usage guidance. All content earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no output schema, the description explains return values (ids and prices) and dependency (needed for add_to_cart). For a simple two-parameter search tool, this is nearly complete. Missing details like sorting or scope of search, but not critical.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so parameters are already documented. The description adds extra meaning: advice on query length and language ('short term; Catalan works best'), which is not in the schema. This helps the agent formulate better queries.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states the tool finds a product and its id, which is needed before adding to cart. The verb 'find' and resource 'product' are specific, and it distinguishes itself from sibling tools like ametller_get_product (which retrieves by id) and ametller_add_to_cart (which uses the id).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Description indicates when to use the tool (before ametller_add_to_cart) and provides practical tips: use short terms, Catalan works best, examples given. While it doesn't explicitly state when not to use it, the context is clear within the sibling set.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ametller_set_quantitySet quantityA
Set the exact quantity of a product in the cart. Quantity 0 removes it. Returns the updated cart.
| Name | Required | Description | Default |
|---|---|---|---|
| quantity | Yes | Exact quantity (0 removes) | |
| product_id | Yes | Product id |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full burden. It only states the basic behavior (set quantity, return cart) and the zero-removes detail, but lacks information about side effects, authorization, error handling, or behavior when product not in cart.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Extremely concise: two sentences with no filler. The purpose is front-loaded and every word earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple tool with 2 parameters and no output schema, the description covers the core functionality and the special case of zero. It returns the updated cart, which is sufficient. Minor gaps in behavioral context are noted.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline is 3. The description adds no new meaning beyond the schema; it merely paraphrases the quantity parameter's description ('exact quantity', '0 removes').
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly specifies the action (set exact quantity) and resource (product in cart), and distinguishes from siblings like add_to_cart and remove_from_cart by focusing on exact quantity setting, including the removal behavior at zero.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies when to use (to set exact quantity) and mentions the zero-removes behavior, but does not explicitly state when not to use or name alternatives, though the sibling context makes it clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ametller_sync_offline_ticketsSync tickets with gws CLI (optional)AIdempotent
Optional local automation fallback: refresh the private ticket cache with Python 3 and an authenticated gws CLI. Prefer connected Gmail plus ametller_ingest_offline_tickets for normal users.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Optional maximum Gmail messages to inspect | |
| overwrite | No | Reparse receipts already cached (default false) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate idempotent and non-destructive nature. The description adds valuable context: requires Python 3 and authenticated gws CLI, and that it refreshes a private cache. This is beyond what annotations provide, though no additional behavioral traits like rate limits or failure modes are mentioned.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences with no wasted words. The main purpose and usage guidance are front-loaded, making it easy to scan.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Despite no output schema, the tool is simple with two optional parameters. The description covers prerequisites, use case, and alternatives, making it complete for informed decision-making.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with descriptions for both parameters ('limit' and 'overwrite'). The description does not add any extra meaning beyond the schema, so baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool refreshes the private ticket cache using Python 3 and authenticated gws CLI, with a specific verb ('refresh') and resource ('private ticket cache'). It distinguishes from sibling 'ametller_ingest_offline_tickets' by advising preference for normal users, leaving this as a fallback.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly states when to use ('optional local automation fallback') and when not to ('prefer connected Gmail plus ametller_ingest_offline_tickets for normal users'), providing clear context and alternatives.
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.
2 tool updates
v0.5.3- Changed
ametller_get_offline_tickets3 fields changed- changed
Input schema / properties / limit / descriptionPrevious value: -"Max tickets (default 100)"New value: +"Requested tickets (raw responses are capped at 5 per page; summary default 500)" - added
Input schema / properties / offsetAdded value: +{ + "description": "Raw-page offset returned as next_offset by the previous call", + "maximum": 9007199254740991, + "minimum": 0, + "type": "integer" +} - added
Input schema / properties / summaryAdded value: +{ + "description": "Return compact offline-only frequency/category analytics instead of raw tickets; scans up to 500 tickets", + "type": "boolean" +}
- Removed
ametller_reorder_order
4 tool updates
v0.5.1- Added
ametller_get_offline_tickets - Added
ametller_ingest_offline_tickets - Added
ametller_purchase_insights - Added
ametller_sync_offline_tickets
12 tool updates
v0.2.0- First observed
ametller_add_to_cart - First observed
ametller_auth_status - First observed
ametller_get_cart - First observed
ametller_get_order_items - First observed
ametller_get_product - First observed
ametller_get_purchase_history - First observed
ametller_get_shopping_guide - First observed
ametller_login - First observed
ametller_remove_from_cart - First observed
ametller_reorder_order - First observed
ametller_search_products - First observed
ametller_set_quantity
TDQS
Scored across 15 tools
Most tools target distinct actions (auth, search, cart, history, offline tickets, insights), and descriptions clearly separate them. Minor overlap exists between remove_from_cart and set_quantity with quantity 0, and between ingest/sync_offline_tickets, but the descriptions resolve the intended use.
All tools share the ametller_ prefix and snake_case convention, and most use a clear verb_noun form such as search_products or add_to_cart. A few names omit the verb (auth_status, purchase_insights) and login is verb-only, so the pattern is not perfectly uniform.
Fifteen tools is at the top of the typical range but each maps to a distinct step in the shopping workflow: auth, discover, cart, history, offline tickets, and insights. It feels slightly heavy due to the meta shopping-guide tool and the fallback sync tool, but not bloated.
The surface covers auth, product lookup, full cart manipulation, order history and item retrieval, offline ticket ingest/reading, and analytics. Reordering is supported indirectly through get_order_items plus add_to_cart, and checkout appears intentionally left to the user's real-basket approval.
Maintenance
Related MCP Connectors
Claude makes real phone calls for you — in many languages, with transcript and outcome back in chat.
Build and manage AI-native customer support agents from Claude or any MCP client.
Create instxnt.xyz storefronts through Claude: add products, connect Stripe, go live.
Run your ecommerce ads from Claude & ChatGPT: Meta, Google, Amazon, Shopify (150 tools)
Related MCP Servers
- AlicenseAqualityDmaintenanceEnables Claude to browse stores, search products, manage the cart, and open checkout on Rappi Chile through natural language, automating grocery and delivery purchases.121MIT
- AlicenseNot gradedqualityDmaintenanceMCP server for Frisco.pl — lets Claude add groceries to your cart, search products, get nutritional info, and manage recipes, all via natural language.7MIT
- AlicenseCqualityDmaintenanceAutomated grocery shopping assistant with intelligent unit pricing and automatic coupon clipping, enabling AI to search products, manage carts, and plan grocery runs via Claude Desktop or CLI.181-
- FlicenseNot gradedqualityDmaintenanceEnables shopping at Tiv Taam grocery store through Claude, including recipe parsing and cart population.-