Model Context Protocol server for BasketWatch — Irish grocery data for AI agents
Project description
BasketWatch MCP Server
A Model Context Protocol server that exposes the BasketWatch Irish grocery data API as tools your AI agent can call directly. Works with Claude Desktop, Continue.dev, Cursor, and any other MCP-compatible client.
~47,000 Irish supermarket SKUs across Aldi, Tesco, SuperValu and Dunnes Stores. Refreshed every Friday at 02:00 UTC. Now queryable by Claude.
What your agent can do
Once installed, your agent has 8 grocery-aware tools:
| Tool | What it does |
|---|---|
status |
Cross-retailer health snapshot — SKU counts, last-scrape dates, run status |
search_products |
Find products by name in one or all stores |
compare_price_across_stores |
One-call comparison across all 4 supermarkets |
get_promotions |
List products currently on offer at a given store |
recent_price_changes |
Week-over-week price movements |
newly_added_products |
New listings in a configurable lookback window |
removed_products |
Delistings / range cuts |
list_products |
Paginated catalogue dump for walking the full assortment |
Example questions your agent can answer:
- "Where can I buy Heinz Baked Beans cheapest this week?"
- "Build me a €40 weekly grocery list across the 4 supermarkets."
- "Which products got cheaper at Tesco this week?"
- "What promotions are running on chocolate at Dunnes right now?"
- "Track the price of Brennans bread for the next 12 weeks."
Install
pip install basketwatch-mcp
Or from source:
git clone https://github.com/basketwatch/basketwatch-mcp.git
cd basketwatch-mcp
pip install -e .
Configuration
| Variable | Default | Purpose |
|---|---|---|
BASKETWATCH_API_BASE |
(required) | Origin of the BasketWatch API (e.g. https://basketwatch.fly.dev) |
BASKETWATCH_API_KEY |
(none) | API key for higher-tier usage. Free-tier limits apply without one |
BASKETWATCH_MCP_DAILY_LIMIT |
100 |
Free-tier cap — requests per UTC day |
BASKETWATCH_MCP_RATE_PER_MIN |
20 |
Sliding-window rate limit — requests per 60 seconds |
The daily counter is persisted to ~/.basketwatch-mcp/usage.json so it
survives Claude Desktop restarts and resets at 00:00 UTC.
When either limit is hit, every tool returns:
{
"error": "Free-tier daily limit reached: 100 requests per day. Resets at 00:00 UTC...",
"limit_hit": true,
"hint": "Email basketwatchireland@gmail.com to get an API key with higher / unlimited usage."
}
The LLM surfacing this to the user is the lead funnel — heavy users self-identify and email for a paid subscription.
Get an API key: email basketwatchireland@gmail.com for a direct
subscription, or use BasketWatch on RapidAPI /
BasketWatch on Apify for usage-based billing.
Hook it up to Claude Desktop
Edit your Claude Desktop config file:
- macOS:
~/Library/Application Support/Claude/claude_desktop_config.json - Windows:
%APPDATA%\Claude\claude_desktop_config.json
Add a basketwatch entry under mcpServers:
{
"mcpServers": {
"basketwatch": {
"command": "basketwatch-mcp",
"env": {
"BASKETWATCH_API_BASE": "https://basketwatch.fly.dev",
"BASKETWATCH_API_KEY": "your-api-key-here"
}
}
}
}
Restart Claude Desktop. You'll see "basketwatch" listed as an available MCP server in Claude's MCP indicator. Ask Claude "What's the cheapest 1L of milk in Ireland?" — it'll use the tools automatically.
Hook it up to Continue.dev / Cursor
These clients use the same MCP protocol over stdio. Add a server block to
your ~/.continue/config.json (Continue) or equivalent Cursor config:
{
"mcpServers": {
"basketwatch": {
"command": "basketwatch-mcp",
"env": {
"BASKETWATCH_API_BASE": "https://basketwatch.fly.dev",
"BASKETWATCH_API_KEY": "your-api-key-here"
}
}
}
}
Local development
git clone https://github.com/basketwatch/basketwatch-mcp.git
cd basketwatch-mcp
python -m venv .venv && source .venv/bin/activate # or .venv\Scripts\activate on Windows
pip install -e .
export BASKETWATCH_API_BASE="https://basketwatch.fly.dev"
export BASKETWATCH_API_KEY="your-key"
# Run the server directly to test (it speaks MCP over stdio — type JSON-RPC
# requests at it or use `mcp dev` from the MCP SDK for interactive testing).
python basketwatch_mcp.py
Data freshness
- All four retailers are scraped every Friday at 02:00 UTC.
- Each tool response includes a
scrape_datefield per row so the agent knows exactly when each price was captured. - Higher-cadence pulls (daily / twice-weekly) are available with a direct
subscription — email
basketwatchireland@gmail.com.
Not affiliated
BasketWatch is not affiliated with Aldi Ireland, Tesco Ireland, Musgrave SuperValu or Dunnes Stores. Data is collected from publicly available sources for lawful market research and price comparison purposes.
License
MIT.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file basketwatch_mcp-0.1.0.tar.gz.
File metadata
- Download URL: basketwatch_mcp-0.1.0.tar.gz
- Upload date:
- Size: 8.4 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.14.5
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
8e87d1385d49fd63519ccca48d52e6bae46bd2d5f7b9b3d297aa2092c0db287e
|
|
| MD5 |
00050f07b76537b67246ee22817f03e7
|
|
| BLAKE2b-256 |
2aba3f94b98594eadd4a29c8e535be54de0a9d2206c13a0a095949a86b37a08e
|
File details
Details for the file basketwatch_mcp-0.1.0-py3-none-any.whl.
File metadata
- Download URL: basketwatch_mcp-0.1.0-py3-none-any.whl
- Upload date:
- Size: 8.8 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.14.5
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
3032592876704df389ffc042a2bd119a4d0d3fb163e01e60b634f4b43ed9a3a1
|
|
| MD5 |
b4627cf1c59afd9c1f144f3e6ff02d99
|
|
| BLAKE2b-256 |
e628a6efb070d428fed8048b0756ee3f6346feaecb9ee46c50f89375670de8f8
|