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 installnpm 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做什么)
set_store("ica", "1003577")--针对特定的ICA商店login("user@example.com", "password")--身份验证search_products("mjölk")--寻找乳制品add_to_cart("2000697", 2)— 加入 2×牛奶 3% 无乳糖get_cart()--验证购物车内容edit_cart("2000697", 1)--减少到1edit_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)