offerhopper.ai — AI Supermarket & Drugstore Shopping Assistant for Germany

Live prices, deals & optimal multi-stop shopping routes for German grocery & drug stores.

我該用這個嗎

品質與安全性

A
說明品質
100%
結構描述完整度
94%
命名品質
80%
汙染風險
100%
權限相符程度
100%
協定合規性
100%

根據工具定義與協定合規性的自動化分析。

上下文成本

~983Token(工具定義)
~2.8 KB典型回應大小
中等的注意力影響(128k 上下文的 0.77%)

這是每次將伺服器的工具載入模型上下文時所消耗的約略 token 數量。數量越高,可用於其他工作的注意力就越少。

安裝

一鍵安裝

將以下內容加入你的 `claude_desktop_config.json` 檔案:

{
  "mcpServers": {
    "german-grocery-assistant": {
      "url": "https://mcp.offerhopper.ai/mcp"
    }
  }
}

遠端端點

https://mcp.offerhopper.ai/mcpstreamable-http

它能做什麼

工具清單

工具(2)

🟢 唯讀🟡 寫入🔴 刪除⚪ 未知
🟢plan_optimal_shopping_route(items, location, end_location, max_stores, max_radius_km, ...)

Plans the optimal shopping trip for a given list and starting location in Germany. Answers 'where should I go to buy this list, and is the trip worth it?' — not 'what's on offer near me'. Matches each item on the list to the best current offer across German supermarkets and drug stores (REWE, Aldi, Lidl, Penny, Netto, Norma, Edeka, DM, Rossmann, Mueller, Globus), then computes the cheapest realistic route by weighing product prices against travel distance and shopping time. Returns the chosen store(s), the per-item picks with live prices, the trip's savings and a worth-it Supports car, bicycle, and pedestrian travel modes. For corridor trips (A-to-B), supply 'end_location' to route stores along the way. Pricing note: 'price' is the standard shelf price available to all shoppers (do NOT say discounts require an app). 'app_credit' is optional wallet cashback (e.g. REWE Bonus: plus €0.50 into wallet). 'app_price' is an app-exclusive checkout price (e.g. Lidl Plus).

輸入結構描述

{
  "type": "object",
  "properties": {
    "items": {
      "description": "The shopping list in natural language (e.g. '3x milk, eggs, bread')",
      "type": "string"
    },
    "location": {
      "description": "Starting location (ZIP code, city, or address in Germany)",
      "type": "string"
    },
    "end_location": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "Optional destination location if not a round trip"
    },
    "max_stores": {
      "default": 100,
      "description": "Maximum number of candidate stores to evaluate for the route (default: 100)",
      "type": "integer"
    },
    "max_radius_km": {
      "anyOf": [
        {
          "type": "number"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "Maximum search radius in kilometers (defaults: car=15km, bicycle=5km, pedestrian=2km)"
    },
    "km_cost": {
      "anyOf": [
        {
          "type": "number"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "Travel cost penalty per kilometer (forced to 0.0 for bicycle/pedestrian)"
    },
    "hour_cost": {
      "anyOf": [
        {
          "type": "number"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "Time cost penalty in EUR per hour (defaults to 12.0)"
    },
    "shopping_time_per_store": {
      "anyOf": [
        {
          "type": "integer"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "Base shopping minutes spent per store (defaults to 10)"
    },
    "travel_mode": {
      "default": "car",
      "description": "Travel mode to use",
      "enum": [
        "car",
        "bicycle",
        "pedestrian"
      ],
      "type": "string"
    }
  },
  "required": [
    "items",
    "location"
  ],
  "additionalProperties": false
}

輸出結構描述

{
  "type": "object",
  "additionalProperties": true
}
⚪swap_route_item(share, offer_id, alt_id)

Swaps one item's chosen offer on an existing shopping route (from a prior plan_optimal_shopping_route result) for one of its alternatives, then returns the RECOMPUTED route with corrected costs and the honest worth-it verdict. Use this to correct a poor pick (e.g. the engine matched a soup hen instead of a roasting chicken) or to take a cheaper/better option the agent spotted in the item's 'alternatives'. The alternative may be at the SAME store or at ANOTHER store ALREADY ON THE ROUTE — it must be the same item category, and its store must already be a stop (no new stores; for that, call plan_optimal_shopping_route again). Keys on stable offer ids: pass the current item's offer_id and the target alternative's offer_id (both taken verbatim from the prior response's products_to_buy / alternatives). The shared route (share_url) is updated in place so the interactive map reflects the swap.

輸入結構描述

{
  "type": "object",
  "properties": {
    "share": {
      "description": "The share_url (or its 8-char id) returned by plan_optimal_shopping_route",
      "type": "string"
    },
    "offer_id": {
      "description": "offer_id of the item currently on the route (from products_to_buy)",
      "type": "string"
    },
    "alt_id": {
      "description": "offer_id of the alternative to swap in (from that item's 'alternatives')",
      "type": "string"
    }
  },
  "required": [
    "share",
    "offer_id",
    "alt_id"
  ],
  "additionalProperties": false
}

輸出結構描述

{
  "type": "object",
  "additionalProperties": true
}

社群

為此伺服器評分

證據

近期觀測

已驗證未記錄版本2 個工具
已驗證未記錄版本2 個工具