大西瓜每日特惠MCP服务器
MCP(模型上下文协议)服务器,自动从以下位置获取和分析每日农产品交易 大西瓜,澳大利亚墨尔本的一家水果和蔬菜批发店。服务器使用Requesty.ai从图像中提取交易信息,并通过MCP协议将其提供给ai代理。
特性
- 自动每日提取:澳大利亚/墨尔本时间上午7点后每天检索一次交易
- 人工智能驱动的提取:使用Requesty.ai分析交易图像并提取结构化数据
- 智能高速缓存:24小时缓存,最大限度地减少API调用并提高性能
- 生产准备就绪:包括速率限制、优雅关机、全面日志记录和错误处理
- 高度可配置性:所有设置均可通过环境变量进行配置
- 性能优化:具有指数退避重试逻辑的并发处理
- 苏格兰和南方能源公司运输:服务器发送实时MCP通信事件
建筑
graph TB
subgraph "MCP Clients"
A[Cline/Roo Code]
B[Claude Desktop]
C[AnythingLLM]
end
subgraph "MCP Server"
D[SSE Transport]
E[Rate Limiter]
F[MCP Handler]
end
subgraph "Core Logic"
G[Deals Fetcher]
H[Cache Manager]
I[Image Processor]
end
subgraph "External Services"
J[Big Watermelon Website]
K[Requesty.ai API]
end
A --> D
B --> D
C --> D
D --> E
E --> F
F --> G
G --> H
H --> I
I --> J
I --> K
style D fill:#e1f5ff
style G fill:#fff4e1
style K fill:#ffe1e1需求
- 去:1.24.3或更高版本
- Requesty.ai API密钥:图像分析所需
- 可选的:Docker用于容器化部署
安装
本地设置
- 克隆存储库:
git clone https://github.com/hebra/ahemseepee/daily-deals-mcp-server.git
cd daily-deals-mcp-server- 设置环境变量:
export REQUESTY_API_KEY=your-requesty-api-key-here- 安装依赖项:
make deps- 构建并运行:
make build
make run服务器将于启动 http://localhost:8080 具有以下端点:
GET /sse-MCP客户端的SSE连接端点POST /message-MCP消息端点GET /health-健康检查端点GET /ready-准备就绪检查端点
Docker设置
# Build Docker image
make docker-build
# Run Docker container
make docker-run配置
所有配置都是通过具有合理默认值的环境变量完成的:
所需配置
| 变量 | 描述 | 默认值 |
|---|---|---|
REQUESTY_API_KEY | 用于图像分析的Requesty.ai API密钥 | (必填) |
Requesty.ai配置
| 变量 | 描述 | 默认值 |
|---|---|---|
REQUESTY_BASE_URL | 安魂曲API基础URL | https://router.requesty.ai/v1 |
REQUESTY_MODEL | 要使用的AI模型 | google/gemini-2.5-flash |
REQUESTY_MAX_TOKENS | 响应中的最大令牌数 | 4096 |
REQUESTY_TEMPERATURE | 模型温度(0.0-1.0) | 0.0 |
服务器配置
| 变量 | 描述 | 默认值 |
|---|---|---|
PORT | HTTP服务器端口 | 8080 |
RATE_LIMIT_REQUESTS | 每个窗口的最大请求数 | 100 |
RATE_LIMIT_WINDOW | 速率限制时间窗口 | 1m |
正在获取配置
| 变量 | 描述 | 默认值 |
|---|---|---|
FETCH_HOUR | 获取优惠的时间(墨尔本时间0-23) | 7 |
CACHE_FILE | 缓存文件的路径 | bigwatermelon-dailydeals.cached.json |
SPECIALS_URL | 用于抓取交易的URL | https://www.bigwatermelon.com.au/category/specials/ |
TIMEZONE | 日程安排的时区 | Australia/Melbourne |
商业信息
| 变量 | 描述 | 默认值 |
|---|---|---|
BUSINESS_NAME | 回复中的企业名称 | Big Watermelon Bushy Park |
LOCATION_LATITUDE | 业务纬度 | -37.8748714 |
LOCATION_LONGITUDE | 业务经度 | 145.2053244 |
LOCATION_ADDRESS | 街道地址 | 1161 High St Rd |
LOCATION_CITY 城市 Wantirna South | ||
LOCATION_STATE | 国家 | VIC |
LOCATION_ZIP | 邮政编码 | 3152 |
LOCATION_COUNTRY | 国家 | Australia |
性能配置
| 变量 | 描述 | 默认值 |
|---|---|---|
HTTP_TIMEOUT | HTTP客户端超时 | 30s |
REQUESTY_TIMEOUT | API超时 | 60s |
OVERALL_TIMEOUT | 整体操作超时 | 300s |
MAX_RETRIES | 最大重试次数 | 3 |
RETRY_BASE_DELAY | 重试之间的基本延迟 | 1s |
发展
可用的生成命令
make help # Show all available commands
make build # Build the application
make run # Build and run the application
make dev # Start development server with hot reload (requires air)
make test # Run tests
make coverage # Generate test coverage report
make fmt # Format code
make lint # Run linter
make vet # Run go vet
make tidy # Tidy and verify dependencies
make clean # Clean build artifacts运行测试
# Run all tests
make test
# Run specific test
go test -v ./internal -run TestFunctionName
# Generate coverage report
make coverage代码质量
# Format code
make fmt
# Run linter
make lint
# Run static analysis
make vet配置MCP客户端
此服务器使用 SSE(服务器发送事件) 运输。您可以:
- 在本地运行服务器(请参阅 安装)
- 在以下位置使用托管实例
https://daily-deals-mcp-server-7ow81.kinsta.app/
Cline/Roo代码
添加到MCP设置文件(通常 ~/.roo/mcp_settings.json 或VSCode设置):
托管服务器:
{
"mcpServers": {
"bigwatermelon-deals": {
"type": "sse",
"url": "https://daily-deals-mcp-server-7ow81.kinsta.app/sse"
}
}
}本地服务器:
{
"mcpServers": {
"bigwatermelon-deals": {
"type": "sse",
"url": "http://localhost:8080/sse"
}
}
}Claude桌面版
添加到 ~/Library/Application Support/Claude/claude_desktop_config.json (macOS)或 %APPDATA%\Claude\claude_desktop_config.json (Windows):
托管服务器:
{
"mcpServers": {
"bigwatermelon-deals": {
"type": "sse",
"url": "https://daily-deals-mcp-server-7ow81.kinsta.app/sse"
}
}
}本地服务器:
{
"mcpServers": {
"bigwatermelon-deals": {
"type": "sse",
"url": "http://localhost:8080/sse"
}
}
}任何事情LLM
- 导航到“设置”→ MCP服务器
- 使用以下命令添加新服务器:
- 名字: bigwatermelon-deals - 运输: SSE - 统一资源定位符: https://daily-deals-mcp-server-7ow81.kinsta.app/sse (托管)或 http://localhost:8080/sse (本地)
通用MCP客户端
对于支持SSE传输的任何MCP兼容客户端:
托管服务器:
{
"transport": "sse",
"url": "https://daily-deals-mcp-server-7ow81.kinsta.app/sse"
}本地服务器:
{
"transport": "sse",
"url": "http://localhost:8080/sse"
}可用工具
get-big-watermelon-deals
从大西瓜中检索今天的水果和蔬菜交易。
参数: 无
退货:
{
"lastUpdated": "2025-01-23",
"business": "Big Watermelon Bushy Park",
"location": {
"latitude": -37.8748714,
"longitude": 145.2053244,
"address": "1161 High St Rd",
"city": "Wantirna South",
"state": "VIC",
"zip": "3152",
"country": "Australia"
},
"offers": [
{
"productName": "Bananas",
"price": 2.99,
"currency": "AUD",
"size": "kg"
}
]
}项目结构
.
├── main.go # Application entry point, MCP server setup
├── internal/
│ ├── config.go # Configuration management
│ ├── config_test.go # Configuration tests
│ ├── models.go # Data models
│ ├── requesty-client.go # Requesty.ai API client
│ ├── big-watermelon-deals-fetcher.go # Core fetching logic
│ └── big-watermelon-deals-fetcher_test.go # Fetcher tests
├── .roo/ # Roo Code AI assistant rules
│ └── rules-code/
│ └── AGENTS.md # Code mode specific rules
├── AGENTS.md # General project guidance
├── Makefile # Build and development commands
├── go.mod # Go module definition
├── go.sum # Go module checksums
├── LICENSE # GPL-3.0 license
└── README.md # This file运作原理
- 调度:服务器等待澳大利亚/墨尔本时间上午7点才能获取交易
- 缓存检查:检查今天的交易是否已缓存
- Web剪贴:如果没有缓存,则从Big Watermelon特价页面中抓取图像URL
- 图像处理:
- 下载与图案匹配的图像 SPECIALS*.jpg 不区分大小写 - 将图像编码为具有适当MIME类型检测的base64数据URL - 发送到Requesty.ai API进行分析
- 数据提取:AI从图像中提取产品名称、价格和尺寸
- 缓存:将结果存储在本地缓存文件中24小时
- 响应:向MCP客户端返回结构化JSON数据
性能和可靠性特征
- 并发处理:具有互斥保护操作的并发映像下载
- 指数退避:对于失败的操作,使用指数回退重试逻辑
- 超时管理:支持上下文取消的可配置超时
- 速率限制:保护服务器免受滥用(默认值:100个请求/分钟)
- 优雅地关闭:端接时正确关闭连接
- 结构化日志记录:使用请求ID进行跟踪的全面日志记录
- 错误处理:通过结构化错误解析进行稳健的错误处理
- 种族状况保护:互斥保护的并发操作
- 快速缓存:用于高效使用API的短暂缓存控制
故障排除
服务器无法启动
问题:未设置API密钥
Configuration validation failed: validation error for REQUESTY_API_KEY: API key is required解决方案:设置环境变量:
export REQUESTY_API_KEY=your-api-key-here没有交易返回
问题:服务器尚未达到墨尔本时间上午7点
解决方案:服务器仅在澳大利亚/墨尔本时间上午7点后获取交易。检查日志以了解:
Too early to fetch deals, waiting for configured hour您可以通过设置来覆盖此设置 FETCH_HOUR=0 立即取回。
速率限制错误
问题:请求太多
Rate limit exceeded: Too many requests. Please try again later.解决方案:等待速率限制窗口重置(默认值:1分钟)或增加限制:
export RATE_LIMIT_REQUESTS=200
export RATE_LIMIT_WINDOW=1m超时错误
问题:操作超时
解决方案:增加超时值:
export HTTP_TIMEOUT=60s
export REQUESTY_TIMEOUT=120s
export OVERALL_TIMEOUT=600sAPI错误
问题:Requesty.ai API错误
解决方案:检查您的API密钥并确保您有足够的信用。服务器记录来自API的结构化错误消息:
requesty API error [error_type]: error message许可证
此项目根据GNU通用公共许可证v3.0获得许可-请参阅 许可证 文件以获取详细信息。
贡献
欢迎投稿!请随时提交拉取请求。
致谢
- 大西瓜 提供每日交易
- Requesty.ai 用于基于人工智能的图像分析基础设施
- MCP协议 用于模型上下文协议实现
