完全是MCP服务器
用Kotlin构建的Nemlig.com(丹麦在线杂货服务)的模型上下文协议(MCP)服务器实现。
概述
这个MCP服务器允许像Claude这样的人工智能助手与Nemlig.com进行交互,以帮助完成杂货购物任务,例如:
- 🔍 搜索产品
- 📦 查看产品详细信息和营养信息
- 🛒 管理购物车
- 📜 查看订单历史记录
- 🚚 检查交货时间段
建筑
┌─────────────────┐
│ Claude Desktop │
│ (MCP Client) │
└────────┬────────┘
│ stdio
│
┌────────▼────────┐
│ Nemlig MCP │
│ Server │
│ (Kotlin) │
└────────┬────────┘
│ HTTP
│
┌────────▼────────┐
│ Nemlig.com │
│ Internal API │
└─────────────────┘特性
当前工具
- 搜索产品 -搜索Nemlig产品目录
- get_product_details -获取详细的产品信息
- view_cart -查看购物车内容
- add_to_cart -将商品添加到购物车
- remove_from_cart -从购物车中删除商品
- 获取订单历史 -查看过去的订单
- 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-mcp2.配置环境
复制示例环境文件并添加您的凭据:
cp .env.example .env编辑 .env 使用您的Nemlig.com凭据:
NEMLIG_USERNAME=your.email@example.com
NEMLIG_PASSWORD=your_password_here3.建设项目
./gradlew build4.运行服务器
./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:
步骤
- 打开浏览器工具
- 导航到nemlig.com - 打开DevTools(F12)→ 网络选项卡
- 执行操作
- 搜索产品 - 将商品添加到购物车 - 查看订单 - 注意API端点、头和请求/响应格式
- 更新客户端
- 修改 src/main/kotlin/com/nemlig/mcp/client/NemligClient.kt - 用实际的API调用替换占位符实现 - 更新中的数据模型 models/Models.kt 以匹配API响应
- 彻底测试
- 添加速率限制以尊重他们的服务器 - 优雅地处理错误 - 在适当的时候缓存响应
网络分析示例
查找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安全考虑
⚠️ 重要安全注意事项:
- 凭据存储
- 永不承诺 .env 文件到版本控制 - 考虑使用系统密钥链进行凭证存储 - 使用环境变量或安全密钥管理
- 速率限制
- 尊重Nemlig的基础设施 - 内置速率限制(默认为5个要求/秒) - 增加请求之间的延迟
- 仅供个人使用
- 这仅供个人使用 - 不要分销或商业化 - 尊重Nemlig的服务条款
- 数据隐私
- 不要记录敏感信息 - 负责任地处理个人数据 - 遵循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客户端实现
贡献
这是一个个人项目,但欢迎提出建议:
- 分叉存储库
- 创建要素分支
- 进行更改
- 提交拉取请求
许可证
MIT许可证-有关详细信息,请参阅许可证文件
免责声明
本项目与Nemlig.com或其母公司没有附属关系、认可或关联。它是一个仅供个人使用的独立实现。
API的逆向工程可能违反服务条款。使用风险由您自行承担,并确保遵守适用的法律和服务条款。
资源
支持
对于问题、疑问或建议:
- 在GitHub上打开一个问题
- 查看CLAUDE.md文件以获取开发指导
- 检查MCP文档
______________________________________________________________________
状态: 🚧 进行中
当前重点:
- \[\]完成Nemlig API逆向工程
- \[\]实现实际API客户端
- \[\]集成MCP Kotlin SDK标准传输
- \[\]添加综合测试
- \[\]改进错误处理
