杂货购物MCP服务器

一个MCP服务器,允许LLM搜索产品、管理购物车并与瑞典杂货店互动。目前通过Playwright浏览器自动化支持ICA。

  • by JMrtzsn
  • TypeScript
  • 本地部署
  • 1 星标
  • 更新于
在 GitHub 查看 JMrtzsn/Matkorgen

使用说明

Matkorgen--杂货购物MCP服务器

MCP(模型上下文协议)服务器,允许LLM搜索产品, 管理购物车,并与瑞典杂货店互动。目前 支持 独立成分分析 通过Playwright浏览器自动化。

先决条件

  • Node.js ≥ 18
  • npm

设置

# 1. Clone the repository
git clone https://github.com/JMrtzsn/Matkorgen.git
cd Matkorgen

# 2. Install dependencies (also builds dist/server.js and downloads Chromium)
npm install

# 3. (Optional) Add ICA credentials for cart operations
echo "ICA_USERNAME=your-ica-username" > .env
echo "ICA_PASSWORD=your-ica-password" >> .env

匿名模式: 如果跳过步骤3,服务器仍然可以工作 浏览和搜索产品--购物车操作需要身份验证 通过 login 工具在运行时。

用法

作为MCP服务器(stdio)

npm start
# or
node dist/server.js

服务器使用MCP JSON-RPC协议通过stdin/stdout进行通信。 配置您的MCP客户端,使其作为子进程生成。

MCP客户端配置

A. .mcp.json 包含在支持它的IDE的项目根中( JetBrains、VS代码、游标):

{
    "servers": {
        "ica-shopping": {
            "type": "stdio",
            "command": "node",
            "args": [
                "dist/server.js"
            ],
            "env": {}
        }
    }
}

您还可以通过环境变量设置默认存储:

{
    "servers": {
        "ica-shopping": {
            "type": "stdio",
            "command": "node",
            "args": [
                "dist/server.js"
            ],
            "env": {
                "ICA_STORE_ID": "1003577"
            }
        }
    }
}

与MCP检查员一起进行测试

npx @modelcontextprotocol/inspector node dist/server.js

这将打开一个web UI,您可以在其中交互式地调用工具。

Gemini扩展

这个项目也是 Gemini扩展 --Gemini Pro用户可以安装它 无需设置本地MCP客户端。

从GitHub安装

gemini extensions install https://github.com/JMrtzsn/Matkorgen

# Build the bundle and install Playwright (Gemini CLI does not run npm install automatically)
cd ~/.gemini/extensions/matkorgen && npm install

npm install 运行一个 postinstall 捆绑TypeScript源代码的脚本 使用esbuild并下载登录流的Chromium二进制文件。

从本地克隆安装

cd matkorgen
npm install
gemini extensions link .

验证

启动Gemini CLI并确认扩展已注册:

gemini
> /mcp list
# Should show "ica-shopping" with its tools

配置

首次使用时,Gemini会提示您输入中声明的设置 gemini-extension.json:

设置 环境变量 描述
ICA_STORE_ID ICA_STORE_ID 默认存储ID(可选-也可以使用 set_store 运行时)
ICA_USERNAME ICA_USERNAME ICA帐户电子邮件(购物车操作所需)
ICA_PASSWORD ICA_PASSWORD ICA帐户密码(敏感,购物车操作需要)

用法

安装后,自然地问Gemini:

“在ICA商店1003577搜索牛奶,并将2添加到我的购物车中”

双子座会打电话来 set_store, login, search_products,以及 add_to_cart 自动。

工具

工具 描述 输入
set_store 初始化杂货店会话。 chain (字符串,例如“ica”), storeId (字符串)
login 使用活动商店进行身份验证。 username (字符串), password (字符串)
search_products 按名称或成分搜索产品。 query (字符串)
get_favourites 检索星级/最喜欢的产品。 —
get_purchase_history 检索经常购买的产品(常客)。 —
add_to_cart 将产品添加到购物车。 productId (字符串), quantity (int)
get_cart 检索当前购物车内容。 —
edit_cart 在购物车中设置产品数量。使用0删除。 productId (字符串), quantity (int≥0)

示例流程(LLM做什么)

  1. set_store("ica", "1003577") --针对特定的ICA商店
  2. login("user@example.com", "password") --身份验证
  3. search_products("mjölk") --寻找乳制品
  4. add_to_cart("2000697", 2) — 加入 2×牛奶 3% 无乳糖
  5. get_cart() --验证购物车内容
  6. edit_cart("2000697", 1) --减少到1
  7. edit_cart("2000697", 0) --从购物车中删除

测试

# Build & run unit tests
npm test

# Build & run end-to-end tests (requires ICA_USERNAME / ICA_PASSWORD in .env)
npm run test:e2e

项目结构

src/
  server.ts                  — MCP server entry point (stdio transport, tool registration)
  stores/
    types.ts                 — Shared domain types & GroceryStore adapter interface
    ica/
      ica.ts                 — ICA adapter (session, HTTP API, Playwright auth)
      login-flow.ts          — Shared Playwright login helpers (used by ica.ts)
tests/
  e2e/
    e2e.test.ts              — End-to-end MCP server test (Client + StdioClientTransport)
specs/                       — Feature specifications
.mcp.json                    — MCP server registration for IDEs
gemini-extension.json        — Gemini Extension manifest
.auth/                       — Session state (gitignored)