Skip to main content
Glama
skunkobi

mcp-leclerc-drive

by skunkobi

mcp-leclerc-drive

The first open-source MCP server for E.Leclerc Drive — let Claude search products, manage a cart, and prepare grocery orders natively, instead of clicking through the website.

🟢 v0.3 — working & DataDome-proof. All eight tools are validated end-to-end against the live site. Requests run inside a real Chrome driven over CDP, so they pass DataDome's bot protection (which blocks headless clients and cookie-replay). You log into Leclerc Drive once in the window that opens; the session persists. See docs/api-capture.md for the reverse-engineered API.

Why

E.Leclerc Drive has no public API. Today the only way to automate it is browser automation — slow (~3–5 s per item) and fragile (blind clicks). This project exposes the underlying operations as proper MCP tools so any MCP client (Claude Desktop, Claude Code) can drive it directly.

Related MCP server: mcp-carrefour-drive

Tools

Tool

Description

find_stores(query)

Find drives near a postal code or city → name, id, service type, distance, host.

set_store(store_id)

Select & remember the active store (resolves the right host automatically).

get_store()

Show the currently selected store.

search_product(query)

Search the catalogue → products with price, price/kg, Nutri-Score, availability, and an id.

add_to_cart(product_id, quantity?)

Add a product to the cart.

remove_from_cart(product_id)

Remove a line from the cart.

update_quantity(product_id, quantity)

Set a line's quantity (0 removes it).

get_cart()

Read the full cart with total.

Status

  • Reverse-engineer Leclerc Drive endpoints (search / cart / store locator — see docs/api-capture.md)

  • All 8 tools validated end-to-end against the live store

  • Runtime store selection with persistence (find_stores / set_store)

  • v0.3: DataDome-proof via real-Chrome CDP driving (beats active bot-challenge that killed cookie-replay) ✅

  • Published to npm + MCP registry

  • Checkout / delivery-slot booking

Requirements

  • Node.js ≥ 22 (uses the built-in WebSocket)

  • Google Chrome installed (the server drives it via CDP)

Install (development)

git clone https://github.com/skunkobi/mcp-leclerc-drive.git
cd mcp-leclerc-drive
npm install
npm run build

How auth works (real Chrome via CDP)

Leclerc Drive is protected by DataDome, which blocks non-browser traffic (headless clients, cookie-replay) with HTTP 403 once it escalates to active challenge mode. The only thing that reliably passes is a real browser that executes the challenge. So that's what the server uses:

  1. On first request it launches your installed Google Chrome with a dedicated, persistent profile (~/.mcp-leclerc-drive/chrome) and a debug port — no automation flags, so navigator.webdriver stays false.

  2. A Chrome window opens. Log into Leclerc Drive once in it. The persistent profile keeps you logged in across restarts.

  3. Every request runs inside that page via CDP, so it carries the browser's cookies, TLS fingerprint, and solved DataDome challenge — and passes.

No cookies are read or stored; there's no Keychain prompt. The server must run on the same machine as Chrome, and a window does open (headless is detectable by DataDome — don't enable it unless you know the risk).

Env var

Default

Description

LECLERC_STORE_ID

053701

Default store id (overridden at runtime by set_store).

LECLERC_HOST

fd9-courses.leclercdrive.fr

Default backend host (the fdN prefix varies by store).

LECLERC_CHROME_PATH

auto

Path to the Chrome binary, if not in the default location.

LECLERC_CHROME_PROFILE_DIR

~/.mcp-leclerc-drive/chrome

Persistent Chrome profile dir.

LECLERC_CHROME_PORT

9222

CDP remote-debugging port.

LECLERC_HEADLESS

false

Run Chrome headless (⚠️ DataDome-detectable — not recommended).

LECLERC_MIN_INTERVAL_MS

1000

Minimum delay between two requests (hygiene).

LECLERC_JITTER_MS

400

Extra random jitter added between requests.

LECLERC_MAX_RETRIES

3

Retries on a transient 403/429 before giving up.

LECLERC_BACKOFF_BASE_MS

1500

Base retry backoff (doubles each attempt).

The server still serializes and spaces out requests (single queue, ~1 s + jitter, retry with backoff) to stay polite — good hygiene even though the browser now handles DataDome.

Choosing your store (no env needed)

The easiest way: just ask, in the conversation. No env vars required.

> "trouve mon drive vers 44000"     → find_stores lists nearby drives
> "prends Rezé Atout Sud"           → set_store remembers it (correct host resolved)
> "cherche du lait"                  → runs on that store

set_store persists your choice to ~/.mcp-leclerc-drive/config.json, so it sticks across sessions, and it resolves the correct backend host for you (the fdN prefix genuinely varies per store — fd8, fd9, fd14…).

⚠️ One drive at a time. Leclerc binds your session to a single drive. The store you set_store to must be the one your Chrome session is logged into — which is the normal case (your own drive). Switching to an arbitrary other drive your browser isn't on will return a "session expired" error.

You can still hard-set the store via LECLERC_STORE_ID / LECLERC_HOST env vars if you prefer (e.g. for headless deploys). To find them manually: your Drive URL looks like https://fd9-courses.leclercdrive.fr/magasin-053701-053701-Your-Town/ — the 6-digit number is the store id, the fdN-courses.leclercdrive.fr part is the host.

Claude Desktop / Claude Code (mcp config)

Install straight from npm — no clone needed:

# Claude Code
claude mcp add leclerc-drive -- npx -y mcp-leclerc-drive

Or in a Claude Desktop config:

{
  "mcpServers": {
    "leclerc-drive": {
      "command": "npx",
      "args": ["-y", "mcp-leclerc-drive"]
    }
  }
}

No env needed — pick your store in-conversation with find_stores / set_store. On first use a Chrome window opens: log into Leclerc Drive once and you're set.

Development

npm run dev        # tsc --watch
npm run typecheck  # type-check without emitting
npm run inspect    # run under the MCP Inspector

Architecture

src/
  index.ts          # MCP server: registers the 8 tools over stdio
  config.ts         # env-based config (store, host, Chrome/CDP, throttle)
  types.ts          # Product / CartItem / Cart
  store.ts          # active store selection + persistence (~/.mcp-leclerc-drive)
  browser.ts        # ChromeSession: drives real Chrome via CDP → beats DataDome
  leclerc/
    client.ts       # Leclerc Drive backend client (search + cart)
    locator.ts      # store finder: postal code / city → nearby drives
    throttle.ts     # request serialization + spacing + retry (hygiene)
docs/
  api-capture.md    # the reverse-engineered Leclerc Drive API

Contributing

This is a community tool — contributions are very welcome, whether it's a bug fix, support for your store, or a whole new capability (checkout, delivery slots, saved lists…).

See CONTRIBUTING.md for dev setup, how to smoke-test against your own account (npm run smoke), and — most useful for this project — a short guide on how to reverse-engineer a new Leclerc Drive endpoint and wire it in. Good first issues are listed in the status checklist above.

Feedback & contact

Feedback, bug reports, and ideas are very welcome.

Disclaimer

Unofficial. Not affiliated with or endorsed by E.Leclerc. Use with your own account, at your own risk, in line with the site's terms of service. Intended for personal automation of your own grocery shopping.

License

MIT

Available Tools

8 tools
add_to_cartA

Ajoute un produit au panier. Utilise l'id retourné par search_product.

ParametersJSON Schema
NameRequiredDescriptionDefault
quantityNoQuantité à ajouter
product_idYesIdentifiant produit (champ id de search_product)

TDQS

A4/5.0
Behavior3/5

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

The description provides context beyond the tool name by explaining that the product ID comes from search_product. However, with no annotations, it doesn't disclose side effects like what happens if the product is already in the cart or whether a cart must exist, leaving the agent partially in the dark about behavioral outcomes.

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 short, front-loaded sentences communicate the purpose and a critical prerequisite with no filler. Perfectly concise.

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?

For a simple two-parameter tool with full schema coverage, the description is nearly complete. It names the action, the key parameter source, and with the sibling list, provides enough context for an agent to select and invoke the tool. The only gap is behavior on conflict, but this is a minor omission given the tool's simplicity.

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 schema already fully describes both parameters (product_id and quantity) with clear descriptions. The tool description merely restates the product_id source, adding no new parameter-specific information. According to the baseline for high schema coverage, this is a 3.

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 'Ajoute un produit au panier' (adds a product to the cart), which is a specific verb and resource. It also references 'search_product' to obtain the product ID, distinguishing it from cart-related siblings like remove_from_cart or update_quantity.

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?

It explicitly tells the agent to use the ID returned by search_product, implying a prerequisite search step. However, it doesn't explicitly state when not to use this tool (e.g., for quantity updates vs. adding new items), so it gets a 4 rather than 5.

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

find_storesA

Recherche les drives E.Leclerc proches d'un code postal ou d'une ville, triés par distance. Retourne pour chacun : nom, identifiant (à passer à set_store), type de service (drive/relais/livraison), distance et magasin.

ParametersJSON Schema
NameRequiredDescriptionDefault
queryYesCode postal ou ville, ex. '44000' ou 'Nantes'

TDQS

A4/5.0
Behavior3/5

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

With no annotations, the description carries the burden of transparency. It discloses sorting and return fields, but doesn't explicitly state this is a read-only search, mention result limits, or cover error cases. More explicit non-destructive language would improve it.

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 concise—two sentences, front-loaded with core purpose, then a structured list of return fields. No redundancy or unnecessary detail.

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?

For a simple search tool with one parameter and no output schema, the description covers the essential behavior: what it does, sorting, and return fields. It also links to set_store. Minor gaps like pagination limits don't significantly impact completeness for this low-complexity tool.

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 only parameter 'query' is fully described in the schema (postal code or city) and the description repeats that. No additional parameter-specific meaning is added beyond the schema, so it stays at the baseline for high schema coverage.

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 searches E.Leclerc drives by postal code or city, sorted by distance. It also lists exact return fields, including the identifier to pass to set_store, distinguishing it from siblings like search_product or cart tools.

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 implies a workflow by noting the identifier should be passed to set_store, suggesting use before store selection. However, it doesn't explicitly state when to use this tool vs alternatives or provide exclusions, so it stops short of full guidelines.

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

get_cartA

Affiche le contenu complet du panier avec le total.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A3.8/5.0
Behavior3/5

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

With no annotations, the description carries the full burden of behavioral disclosure. It implies a read-only operation via 'Affiche' (displays), but does not explicitly state that it has no side effects or authentication requirements. It also does not mention behavior for empty carts or error handling.

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 a single concise sentence that front-loads the purpose. It contains no filler or redundant information, making it highly efficient.

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?

For a no-parameter, read-only cart viewer, the description adequately explains that it returns the full contents and total. However, it lacks details on response structure, empty cart behavior, or item quantities, which could be useful but are not critical for such a simple tool.

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 input schema has zero parameters, so the description correctly adds no param information. With 0 parameters, the baseline is 4, and the description aligns with the schema's 100% coverage without inventing anything.

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 displays the full cart contents and total, using the specific verb 'Affiche' (displays) with a clear resource. It distinguishes itself from sibling tools like add_to_cart or remove_from_cart by focusing on viewing rather than modifying.

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

Usage Guidelines2/5

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

The description provides no guidance on when to use this tool versus alternatives, such as when checking out or verifying items. It does not mention scenarios, prerequisites, or exclusions, leaving the agent to infer usage from the sibling context.

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

get_storeA

Affiche le magasin actuellement sélectionné (id, host).

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.2/5.0
Behavior3/5

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

No annotations are provided, so the description must carry the behavioral disclosure burden. It correctly indicates a read operation and mentions output fields, but it does not describe what happens if no store is selected, authentication needs, or error behavior. These gaps are meaningful but not critical for such a simple getter.

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 a single, concise sentence that front-loads the action and output. Every word contributes to understanding.

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?

For a simple getter with no parameters, the description is nearly complete: it states the resource, scope, and output fields. It omits edge cases like 'no store selected' and does not explicitly declare read-only behavior, but sibling tool context and the nature of the tool make this acceptable.

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 tool has zero parameters, and the schema is trivially complete. The description adds no parameter-specific information, but none is needed. The baseline of 4 for zero-parameter tools applies.

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 'Affiche' and clearly identifies the resource ('le magasin actuellement sélectionné') and expected output ('id, host'). This distinguishes it from sibling tools like find_stores (searching stores) and set_store (changing the selected store).

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?

'actuellement sélectionné' provides clear context that this tool retrieves the current store selection, implicitly distinguishing it from find_stores and set_store. However, it does not explicitly state alternatives or when not to use it.

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

remove_from_cartA

Retire complètement un produit du panier.

ParametersJSON Schema
NameRequiredDescriptionDefault
product_idYesIdentifiant produit à retirer

TDQS

A3.5/5.0
Behavior3/5

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

The word 'complètement' discloses that the entire product is removed, but nothing is said about edge cases (product not in cart, cart doesn't exist) or side effects. With no annotations, the description carries the burden but only partially.

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?

A single concise sentence that is action-oriented and contains no unnecessary information.

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 tool is simple, but with no annotations or output schema, the description is minimal. It doesn't specify return value or error behavior, leaving some gaps.

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?

Schema coverage is 100% and product_id is already described. The description adds no additional meaning about the parameter, so baseline 3 applies.

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 ('Retire') and resource ('panier'), clearly distinguishing it from siblings like add_to_cart and update_quantity.

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

Usage Guidelines2/5

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

No guidance is given on when to use this tool versus alternatives. It doesn't mention cases like adjusting quantity with update_quantity when only a partial removal is needed.

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

search_productA

Recherche des produits dans le catalogue Leclerc Drive du magasin configuré. Retourne label, prix, prix au kilo/litre, Nutri-Score, disponibilité et l'id à utiliser pour add_to_cart.

ParametersJSON Schema
NameRequiredDescriptionDefault
queryYesTermes de recherche, ex. 'lait demi-écrémé bio'

TDQS

A4/5.0
Behavior3/5

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

With no annotations provided, the description carries the full burden. It discloses return fields (label, price, price per kilo/liter, Nutri-Score, availability, and id) and references the configured store, which implies a dependency on store configuration. However, it does not mention error behavior, pagination, or any rate limits, so it is only partially transparent.

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 a single, concise sentence that front-loads the main action and lists key return fields without unnecessary detail. It does not repeat what the schema already provides.

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?

For a simple search tool with one parameter and no output schema, the description is fairly complete. It lists the return fields and mentions the store context, which is sufficient for an agent to understand the tool's role and basic behavior. It lacks minor details like sorting or limits, but those are not critical for a simple search.

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 schema describes the 'query' parameter with an example, achieving 100% coverage. The description does not add meaning beyond the schema, so the baseline score of 3 is appropriate.

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's function: searching for products in the Leclerc Drive catalog of the configured store. It specifies the resource ('produits dans le catalogue Leclerc Drive') and verb ('Recherche'), and distinguishes itself from sibling tools by focusing on search rather than cart operations or store management.

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 implies usage context by noting the search returns an 'id à utiliser pour add_to_cart', guiding when to use this tool (before adding items). It does not explicitly state alternatives or exclusions, but the sibling tools and the described return fields make the use case clear.

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

set_storeA

Sélectionne le magasin actif (et le mémorise pour les prochaines sessions). Utilise l'id renvoyé par find_stores.

ParametersJSON Schema
NameRequiredDescriptionDefault
hostNoHost backend (optionnel) si le magasin n'a pas été trouvé via find_stores
store_idYesIdentifiant magasin (champ id de find_stores)

TDQS

A4.3/5.0
Behavior4/5

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

With no annotations provided, the description carries the burden of disclosing side effects. It explicitly states that the selection is remembered for future sessions ('le mémorise pour les prochaines sessions'), which is a key behavioral trait beyond the schema. It does not mention other details like error handling, but the essential persistence behavior is disclosed.

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 a single, well-structured sentence that front-loads the core purpose and then adds the key usage hint and persistence detail. Every part is informative with no redundant filler.

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?

For a simple state-setting tool with no output schema, the description is complete enough: it identifies the action, the target resource, the persistence side effect, and the correct parameter source. The optional host parameter is covered by the schema, so no additional description is required.

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?

Schema description coverage is 100%, so the parameters store_id and host are already well-documented in the schema. The description adds the meaningful relationship that store_id comes from find_stores, but otherwise does not add significant new semantic value beyond what the schema provides.

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's function: 'Sélectionne le magasin actif' (selects the active store). It also distinguishes it from the sibling get_store by emphasizing the state-changing and persistent nature of the operation, and references find_stores as the source for the ID.

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 gives explicit usage guidance by stating to use the ID returned by find_stores, which is a clear prerequisite and points to the correct sibling workflow. It does not explicitly describe when not to use the tool or compare with 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.

update_quantityA

Modifie la quantité d'un produit déjà présent dans le panier.

ParametersJSON Schema
NameRequiredDescriptionDefault
quantityYesNouvelle quantité (0 pour retirer)
product_idYesIdentifiant produit

TDQS

A4/5.0
Behavior3/5

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 key constraint that the product must already be in the cart, which is a behavioral trait. However, it does not mention that setting quantity to 0 removes the item (though the schema does), nor does it describe error behavior for a missing product ID. This is a clear gap.

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 a single, concise sentence in French. It front-loads the action and avoids unnecessary wording, making it easy to scan and understand.

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?

With only 2 parameters, both fully described in the schema, and no output schema, the description provides the essential purpose and a key constraint. It is adequate for an agent to invoke the tool correctly, though it could mention return values or failure modes. For a simple cart operation, a 4 is justified.

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 input schema provides descriptions for both required parameters (quantity and product_id) with 100% coverage. The description adds no extra parameter information beyond the schema, so the baseline score of 3 is appropriate.

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 action ('Modifie' = modifies) and the resource ('la quantité d'un produit déjà présent dans le panier' = the quantity of a product already in the cart). It explicitly distinguishes this tool from siblings like add_to_cart and remove_from_cart by noting the product must already be in the cart.

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 implies the tool is for updating an existing cart item's quantity, which gives clear usage context relative to add/remove siblings. However, it does not explicitly name alternative tools or state when not to use it, so it stops short of full guidance.

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

TDQS

A4.2/5.0
Disambiguation5/5

Each tool targets a distinct operation: product search, cart mutations (add, remove, update quantity, view), and store selection (find, get, set). No two tools overlap in purpose, and their descriptions make selection unambiguous.

Naming Consistency5/5

All tool names follow a consistent verb_noun pattern in snake_case (e.g., search_product, add_to_cart, set_store). The verb clearly indicates the action, and the noun indicates the resource, making the API predictable.

Tool Count5/5

With 8 tools, the set is well-scoped for the Leclerc Drive domain. Each tool covers a necessary step in the shopping workflow without redundancy or bloat, fitting the typical 3-15 tool range.

Completeness5/5

The tool surface covers the full shopping lifecycle: search products, manage cart items (add, remove, update quantity), view cart, and select the store. There are no obvious dead ends—search returns ids for adding, and store selection supports the entire flow.

Maintenance

ActivitySlowing
ResponsivenessNo issues

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    D
    maintenance
    MCP server that connects Carrefour Drive to Claude and other MCP clients, enabling product search with real prices, nutriscore, availability, and natural language cart management.
    MIT
  • A
    license
    Not graded
    quality
    C
    maintenance
    An MCP server for grocery shopping at Kroger-owned stores, enabling product search, store finder, cart management, and more through AI assistants.
    21
    MIT
  • A
    license
    Not graded
    quality
    B
    maintenance
    Unofficial MCP and CLI server to read a user's current E.Leclerc Drive catalog through a persistent Camoufox browser session, enabling product search, product and cart reading, and confirmed cart add/remove operations without placing orders or making payments.
    1
    MIT

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/skunkobi/mcp-leclerc-drive'

If you have feedback or need assistance with the MCP directory API, please join our Discord server