农产品交易MCP服务器

一个自动获取并分析Big Watermelon每日农产品交易的MCP服务器,通过AI解析交易图片数据并提供给AI代理使用。

  • by hebra
  • Go
  • 本地部署
  • 更新于
在 GitHub 查看 hebra/daily-deals-mcp-server

使用说明

大西瓜每日特惠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用于容器化部署

安装

本地设置

  1. 克隆存储库:

    git clone https://github.com/hebra/ahemseepee/daily-deals-mcp-server.git
    cd daily-deals-mcp-server
    
  2. 设置环境变量:

    export REQUESTY_API_KEY=your-requesty-api-key-here
    
  3. 安装依赖项:

    make deps
    
  4. 构建并运行:

    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(服务器发送事件) 运输。您可以:

  1. 在本地运行服务器(请参阅 安装)
  2. 在以下位置使用托管实例 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

  1. 导航到“设置”→ MCP服务器
  2. 使用以下命令添加新服务器:
    • 名字: 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

运作原理

  1. 调度:服务器等待澳大利亚/墨尔本时间上午7点才能获取交易
  2. 缓存检查:检查今天的交易是否已缓存
  3. Web剪贴:如果没有缓存,则从Big Watermelon特价页面中抓取图像URL
  4. 图像处理:
    • 下载与图案匹配的图像 SPECIALS*.jpg 不区分大小写
    • 将图像编码为具有适当MIME类型检测的base64数据URL
    • 发送到Requesty.ai API进行分析
  5. 数据提取:AI从图像中提取产品名称、价格和尺寸
  6. 缓存:将结果存储在本地缓存文件中24小时
  7. 响应:向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=600s

API错误

问题:Requesty.ai API错误

解决方案:检查您的API密钥并确保您有足够的信用。服务器记录来自API的结构化错误消息:

requesty API error [error_type]: error message

许可证

此项目根据GNU通用公共许可证v3.0获得许可-请参阅 许可证 文件以获取详细信息。

贡献

欢迎投稿!请随时提交拉取请求。

致谢