mcpField
F
French Grocery

French Grocery

本地服务
github.com商业与营销03 天前更新

关于 French Grocery

French Grocery 是供 Agent 操作法国 E.Leclerc Drive 和 Super U 在线杂货服务的本地 MCP 服务。它可搜索商品、管理购物车并比较价格和配送条件,但不会下单;预约时段和付款由用户在零售商网站完成。

主要功能

  1. 01搜索商品及促销信息
  2. 02查看配料、过敏原和产地
  3. 03添加、调整或移除购物车商品
  4. 04读取订单最低金额和可用时段
  5. 05比较不同零售商的购物车
  6. 06选择门店(E.Leclerc Drive)

适用场景

  1. 01为一份食谱搜索并整理所需商品
  2. 02比较 E.Leclerc Drive 与 Super U 的购物车总价
  3. 03核对商品成分、过敏原及配送时段

MCP 相关

这是通过 stdio 在本地运行的 MCP 服务,向 Agent 提供 E.Leclerc Drive 和 Super U 的商品、购物车、门店及订单条件工具。它不会提交订单,预订时段和付款仍由用户在网站上完成。

配置

本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。

mcp.json · 通用配置
{
"mcpServers": {
"maxime-desmarchelier-fr-grocery": {
"command": "npx",
"args": [
"-y",
"fr-grocery-mcp"
],
"env": {
"FR_GROCERY_CONFIG": "<FR_GROCERY_CONFIG>",
"FR_GROCERY_CHROME_PORT": "<FR_GROCERY_CHROME_PORT>",
"FR_GROCERY_STATE_DIR": "<FR_GROCERY_STATE_DIR>"
}
}
}
}
启动命令npx -y fr-grocery-mcp
需要配置的环境变量
FR_GROCERY_CONFIGPath to the optional JSON configuration file. Without it, only Super U is enabled.
FR_GROCERY_CHROME_PORTChrome DevTools Protocol port; overrides the configuration file.
FR_GROCERY_STATE_DIRDirectory for retailer state such as the selected Leclerc store.

本地服务需要在你的电脑上安装运行环境(如 Node.js 18+)。各客户端的配置文件位置不同,请参考客户端文档。

安装包
npmfr-grocery-mcp0.1.1

工具

11

收录的工具列表 · 更新于 3 天前

参数类型必填说明
checkboolean否查询每个网站(只读)

详细介绍

fr-grocery-mcp

一个 MCP 服务,为 Agent 提供访问法国零售商在线杂货服务(“drive”)的领域级权限:目前支持 E.Leclerc Drive 和 Super U(coursesu.com),其他零售商可通过新增适配器接入。搜索商品、查看成分、管理购物车、查看时段和最低订单金额、比较购物车。仅此而已。

推理工作(食谱、食材、人数对应的用量、商品选择、价格与促销取舍)由 Agent 完成。例如:

购买制作 4 人份意式肉酱面和四种奶酪披萨所需的食材,选择 Leclerc 和 Super U 中最便宜的商店。

Agent 会整理清单,在每家零售商处搜索各项食材、填充购物车,然后进行比较。 绝不会下单:预约时段和付款由用户在网站上完成。

警告

本项目与 E.Leclerc、Système U 或任何零售商均无关联,未获其认可或支持。它会以人工操作的速度,使用你自己的已登录浏览器会话,仅供个人使用。零售商网站可能会随时变更,其使用条款同样适用:使用风险自负。

工具

每个零售商工具都接受 store(leclerc、superu:根据配置生成的枚举)。

工具效果注释
list_stores(check=false)已接入的零售商及其功能;启用 check 时,返回各会话的状态和当前活动门店只读
search_products(store, query, limit=20)商品:id、标签、price_eur、unit_price(€/kg、€/l、€/piece)、available、类型化的 promotions、best_offer(净成本,包含组合优惠和会员优惠)只读
get_product(store, product_id)商品页面:ingredients(过敏原以大写字母标示;原始商品为 null)、申报的 allergens、origin只读
get_cart(store)商品行(product_id、name、quantity、line_total_eur、unit_price)和 total_eur只读
get_order_conditions(store?)门店、已预订时段、购物车关联的时段、带日期的后续时段(ISO start)、最低要求;省略 store 表示所有零售商只读
add_to_cart(store, product_id, quantity=1)在已有数量上增加
set_quantity(store, product_id, quantity)设置数量(0 = 移除)幂等
remove_from_cart(store, product_id)移除商品破坏性操作、幂等
find_stores(store, query)查找邮政编码或城镇附近的门店(如果零售商支持)只读
set_store(store, store_id)选择并记住当前活动门店幂等
compare_carts(mode="drive")各零售商的购物车:总额、商品行、最低金额和差额、后续时段;按价格从低到高排序只读

每次更改后都会重新读取购物车,并返回 confirmed:如果网站保留了目标数量,则为 true。 结果为类型化数据(outputSchema + structuredContent),服务器还会向 Agent 发送描述操作流程的 instructions。每种商品最多 50 件,以避免单位错误。

错误(isError、error 字段):ValidationError(修正调用)、NotSupportedError(零售商不支持此操作)、SessionExpiredError(在 Chrome 中重新登录)、SiteBlockedError(反机器人拦截:停止操作)、TransientError(自动重试,然后报告)。

商品标签、促销文本和搜索词均保留法语,与网站上的内容一致。

各零售商的功能
功能E.Leclerc DriveSuper U
搜索、购物车、促销是(即时、多件优惠、Ticket)是(即时、多件优惠、Carte U)
商品页面配料、过敏原、产地配料、产地
从 Agent 选择门店find_stores / set_store否:在网站上选择
最低订单金额未登录时不显示是
时段下一个时段、购物车日期下一个时段、已预约时段

要求

  • Node ≥ 26(原生运行 TypeScript:无需构建步骤)。使用 mise:mise install --locked 会安装 mise.lock 中记录的版本。
  • 启动时带有 --remote-debugging-port=9222 参数并已登录相关网站的 Chrome(mise run chrome 会在 ~/.fr-grocery-mcp/chrome 中启动专用配置文件)。程序会按域名查找或打开每个网站对应的标签页。

请求通过浏览器会话逐一发送,并在请求之间留出间隔:服务会重放网站在点击操作时执行的行为(参见 docs/retailers/)。不会绕过任何保护机制:遇到反机器人拦截时,服务会停止,不会重试。

配置

FR_GROCERY_CONFIG 指向一个 JSON 文件。如果未提供文件,则只会接入 Super U。

{
  "chrome": { "port": 9222, "timeoutMs": 30000 },
  "stores": [
    {
      "retailer": "leclerc",
      "store": {
        "storeId": "123456",
        "retrievalPointId": "123456",
        "host": "fd7-courses.leclercdrive.fr",
        "name": "My Leclerc Drive"
      }
    },
    { "retailer": "superu", "minIntervalMs": 300 }
  ]
}

零售商的顺序即为优先级顺序。minIntervalMs 用于设置请求之间的间隔(默认值:Leclerc 为 1000 ms,Super U 为 300 ms)。Leclerc 门店的相关值可通过 find_stores / set_store 获取:通过 set_store 选定的门店会保存在 $FR_GROCERY_STATE_DIR/leclerc-store.json 中 (默认目录为 ~/.fr-grocery-mcp),并优先于配置文件中的设置。FR_GROCERY_CHROME_PORT 可覆盖 文件中的端口。Super U 门店需在 coursesu.com 上选择。

使用方法

该服务以 fr-grocery-mcp npm 包的形式发布,并在本地通过 stdio 运行。Claude Code(.mcp.json):

{
  "mcpServers": {
    "fr-grocery-mcp": {
      "command": "npx",
      "args": ["-y", "fr-grocery-mcp@latest"],
      "env": { "FR_GROCERY_CONFIG": "/path/to/fr-grocery-mcp.json" }
    }
  }
}

为确保设置可复现,请指定精确版本(例如 [email protected]),而不是 @latest。同一软件包也列于官方 MCP Registry 中,标识符为 io.github.maxime-desmarchelier/fr-grocery-mcp。每个版本都会发布到 npm、GitHub Releases 和 MCP Registry;参见 docs/releasing.md。

从源码检出目录运行时,改用 "command": "node" 和 "args": ["/path/to/fr-grocery-mcp/src/main.ts"]。手动检查:npm run inspect(MCP Inspector)。

开发

npm ci
npm run check                      # typecheck + lint + tests with coverage thresholds
mise run lint                      # the git hook's ruleset on the whole repository (what CI runs)
npm test                           # unit, adapter contract, integration (no access to the sites)
npm run doctor                     # real sites, read-only: session, search, product page, cart per retailer
npm run test:live                  # real sites: changes then removes an item that is not in the cart
LIVE_STORES=leclerc npm run test:live
npm run fixtures -- leclerc        # captures a retailer's reference pages again
npm run format                     # Biome

架构和技术选择:docs/architecture.md。 添加零售商:docs/adding-a-retailer.md。发布: docs/releasing.md。

贡献

欢迎提交问题和拉取请求:设置方法、代码规范以及拉取请求提交前 npm run check 必须通过的检查,请参见 CONTRIBUTING.md。main 分支受保护,CI 必须通过。

安全

请通过仓库的 Security 选项卡私下报告漏洞,切勿在公开问题中披露:参见 SECURITY.md。

许可证

MIT。E.Leclerc Drive 适配器基于 mcp-leclerc-drive(MIT)所提供的知识构建:参见 NOTICE。

评论

支持 Markdown

第一次接触 MCP?

从协议是什么,到在客户端里装上第一个服务,这几条回答覆盖了大多数入门问题。

一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。