杂货购物MCP服务器

Nemlig MCP Server是一个基于Kotlin实现的模型上下文协议服务器,用于与丹麦在线杂货服务Nemlig.com交互,支持产品搜索、购物车管理和订单查看等功能。

  • by CWeait
  • Kotlin
  • 本地部署
  • 更新于
在 GitHub 查看 CWeait/nemlig-mcp

使用说明

完全是MCP服务器

用Kotlin构建的Nemlig.com(丹麦在线杂货服务)的模型上下文协议(MCP)服务器实现。

概述

这个MCP服务器允许像Claude这样的人工智能助手与Nemlig.com进行交互,以帮助完成杂货购物任务,例如:

  • 🔍 搜索产品
  • 📦 查看产品详细信息和营养信息
  • 🛒 管理购物车
  • 📜 查看订单历史记录
  • 🚚 检查交货时间段

建筑

┌─────────────────┐
│  Claude Desktop │
│   (MCP Client)  │
└────────┬────────┘
         │ stdio
         │
┌────────▼────────┐
│  Nemlig MCP     │
│     Server      │
│   (Kotlin)      │
└────────┬────────┘
         │ HTTP
         │
┌────────▼────────┐
│  Nemlig.com     │
│   Internal API  │
└─────────────────┘

特性

当前工具

  1. 搜索产品 -搜索Nemlig产品目录
  2. get_product_details -获取详细的产品信息
  3. view_cart -查看购物车内容
  4. add_to_cart -将商品添加到购物车
  5. remove_from_cart -从购物车中删除商品
  6. 获取订单历史 -查看过去的订单
  7. get_delivery_slots -检查可用的交货时间

计划功能

  • []实际Nemlig API集成(目前使用占位符)
  • []完成MCP stdio传输实施
  • []购物清单管理
  • []基于食谱的购物
  • []价格比较和预算
  • []自动重新排序

先决条件

  • Java 17或更高版本
  • Gradle 8.x(包装内含)
  • Nemlig.com帐户(个人使用)
  • Claude Desktop或其他兼容MCP的客户端

安装

1.克隆存储库

git clone https://github.com/CWeait/nemlig-mcp.git
cd nemlig-mcp

2.配置环境

复制示例环境文件并添加您的凭据:

cp .env.example .env

编辑 .env 使用您的Nemlig.com凭据:

NEMLIG_USERNAME=your.email@example.com
NEMLIG_PASSWORD=your_password_here

3.建设项目

./gradlew build

4.运行服务器

./gradlew run

配置

环境变量

变量 描述 默认值
NEMLIG_USERNAME 您的nemlig.com电子邮件 --
NEMLIG_PASSWORD 您的Nemlig.com密码 -
NEMLIG_API_URL Nemlig API基础URL https://webapi.prod.knl.nemlig.it
NEMLIG_TIMEOUT 请求超时(ms) 30000
SERVER_NAME MCP服务器名称 nemlig-mcp
SERVER_VERSION MCP服务器版本 1.0.0
LOG_LEVEL 日志记录级别 INFO

Claude桌面配置

要将此服务器与Claude Desktop一起使用,请添加到您的 claude_desktop_config.json:

{
  "mcpServers": {
    "nemlig": {
      "command": "/path/to/nemlig-mcp/gradlew",
      "args": ["run"],
      "cwd": "/path/to/nemlig-mcp",
      "env": {
        "NEMLIG_USERNAME": "your.email@example.com",
        "NEMLIG_PASSWORD": "your_password_here"
      }
    }
  }
}

注: 为了安全起见,考虑使用更安全的方法来存储凭据。

用法示例

一旦配置了Claude Desktop,您可以要求Claude:

搜索产品

"Can you search for organic milk on Nemlig?"

将商品添加到购物车

"Add 2 liters of organic milk to my cart"

查看购物车

"What's in my Nemlig shopping cart?"

查看过去的订单

"Show me my recent Nemlig orders"

计划购物

"Help me plan this week's groceries on Nemlig. I need ingredients for pasta, salad, and breakfast items."

发展

项目结构

nemlig-mcp/
├── src/
│   ├── main/
│   │   ├── kotlin/com/nemlig/mcp/
│   │   │   ├── server/          # MCP server implementation
│   │   │   ├── client/          # Nemlig API client
│   │   │   ├── tools/           # MCP tool implementations
│   │   │   ├── models/          # Data models
│   │   │   └── config/          # Configuration
│   │   └── resources/
│   │       └── logback.xml      # Logging configuration
│   └── test/                    # Tests
├── build.gradle.kts             # Gradle build configuration
├── CLAUDE.md                    # AI assistant development guide
└── README.md                    # This file

建筑

# Build the project
./gradlew build

# Run tests
./gradlew test

# Run the server
./gradlew run

# Create distribution
./gradlew installDist

测试

# Run all tests
./gradlew test

# Run with coverage
./gradlew test jacocoTestReport

代码的风格

本项目遵循Kotlin编码规范:

  • 使用4个空格进行缩进
  • 最大行长:120个字符
  • 使用有意义的变量和函数名
  • 使用KDoc记录公共API

格式代码:

./gradlew ktlintFormat

逆向工程API

由于Nemli.com不提供公共的API,您需要反转其内部API:

步骤

  1. 打开浏览器工具

    • 导航到nemlig.com
    • 打开DevTools(F12)→ 网络选项卡
  2. 执行操作

    • 搜索产品
    • 将商品添加到购物车
    • 查看订单
    • 注意API端点、头和请求/响应格式
  3. 更新客户端

    • 修改 src/main/kotlin/com/nemlig/mcp/client/NemligClient.kt
    • 用实际的API调用替换占位符实现
    • 更新中的数据模型 models/Models.kt 以匹配API响应
  4. 彻底测试

    • 添加速率限制以尊重他们的服务器
    • 优雅地处理错误
    • 在适当的时候缓存响应

网络分析示例

查找XHR请求,例如:

POST https://webapi.prod.knl.nemlig.it/api/v1/auth/login
GET https://webapi.prod.knl.nemlig.it/api/v1/products/search?q=milk
POST https://webapi.prod.knl.nemlig.it/api/v1/cart/add

安全考虑

⚠️ 重要安全注意事项:

  1. 凭据存储

    • 永不承诺 .env 文件到版本控制
    • 考虑使用系统密钥链进行凭证存储
    • 使用环境变量或安全密钥管理
  2. 速率限制

    • 尊重Nemlig的基础设施
    • 内置速率限制(默认为5个要求/秒)
    • 增加请求之间的延迟
  3. 仅供个人使用

    • 这仅供个人使用
    • 不要分销或商业化
    • 尊重Nemlig的服务条款
  4. 数据隐私

    • 不要记录敏感信息
    • 负责任地处理个人数据
    • 遵循GDPR准则

故障排除

服务器无法启动

# Check Java version
java -version  # Should be 17+

# Check Gradle
./gradlew --version

# Clean and rebuild
./gradlew clean build

认证失败

  • 验证中的凭据 .env
  • 检查Nemlig.com是否可访问
  • 查看登录 logs/nemlig-mcp.log
  • 可能需要对身份验证流程进行逆向工程

工具不工作

  • 检查MCP服务器日志
  • 验证克劳德桌面配置
  • 手动测试API端点
  • 更新API客户端实现

贡献

这是一个个人项目,但欢迎提出建议:

  1. 分叉存储库
  2. 创建要素分支
  3. 进行更改
  4. 提交拉取请求

许可证

MIT许可证-有关详细信息,请参阅许可证文件

免责声明

本项目与Nemlig.com或其母公司没有附属关系、认可或关联。它是一个仅供个人使用的独立实现。

API的逆向工程可能违反服务条款。使用风险由您自行承担,并确保遵守适用的法律和服务条款。

资源

支持

对于问题、疑问或建议:

  • 在GitHub上打开一个问题
  • 查看CLAUDE.md文件以获取开发指导
  • 检查MCP文档

状态: 🚧 进行中

当前重点:

  • []完成Nemlig API逆向工程
  • []实现实际API客户端
  • []集成MCP Kotlin SDK标准传输
  • []添加综合测试
  • []改进错误处理