chrono24-mcp
Chrono24 watch-marketplace tools for any MCP-capable LLM client - Claude Code, Claude Desktop, Codex, Cursor, Windsurf and friends.
Search listings, shortlist by price/location/seller type, then pull full watch details (reference, movement, caliber, box & papers, dealer info, photos) without leaving your chat.
find_deals("Omega Speedmaster Professional")
-> market median $6,850, 7 listings at or below p25, best 31% under median
get_watch("48091925")
-> Rolex Submariner Date, ref 16610, $10,307, caliber 3135, box+papers, in stock, ships 1-3 days
get_dealer_rating_summary(dealerId)
-> 4.83 stars across 10,128 reviews (8,895 five-star / 64 one-star)
get_model_guide("Rolex", "Submariner")
-> history, price guidance and Chrono24's per-reference price table (6538 "James Bond" ~$148,000)
save_search("speedy-under-4k", { query: "Omega Speedmaster", priceTo: 4000 })
-> check_saved_searches later reports only listings that appeared since
How it works
Chrono24 has no public API and sits behind a Cloudflare managed challenge that blocks plain HTTP (403). This server drives a real Chrome via Playwright with a persistent profile, so the Cloudflare clearance cookie is earned once and reused across restarts. Requests are serialized with ~3.5s spacing plus jitter to stay polite; responses are cached (search 3 min, details 30 min), and brand/model taxonomy persists to disk so restarts stay warm. Long-running calls (get_watches, get_dealer_rating_summary, paged searches) emit MCP progress notifications - enable resetTimeoutOnProgress in clients that support it.
Setup
Requires Node >= 22 and Google Chrome (the fallback bundled Chromium needs a one-time npx playwright install chromium). First run may take ~15-30s to clear the Cloudflare challenge.
No repo clone needed - run straight from npm with npx.
Claude Code
claude mcp add chrono24 -- npx -y chrono24-mcp
or project scope via .mcp.json:
{
"mcpServers": {
"chrono24": {
"command": "npx",
"args": ["-y", "chrono24-mcp"]
}
}
}
Claude Desktop
~/Library/Application Support/Claude/claude_desktop_config.json (macOS):
{
"mcpServers": {
"chrono24": {
"command": "npx",
"args": ["-y", "chrono24-mcp"]
}
}
}
Codex CLI / ChatGPT desktop
Add to ~/.codex/config.toml (shared by Codex CLI, IDE extension and desktop app):
[mcp_servers.chrono24]
command = "npx"
args = ["-y", "chrono24-mcp"]
tool_timeout_sec = 120
Cursor
.cursor/mcp.json (project) or ~/.cursor/mcp.json (global):
{
"mcpServers": {
"chrono24": {
"command": "npx",
"args": ["-y", "chrono24-mcp"]
}
}
}
Global install alternative
npm i -g chrono24-mcp
# then use "chrono24-mcp" as the command in any client config
Run from source
git clone https://github.com/samiashi/chrono24-mcp.git
cd chrono24-mcp
npm install && npm run build && npm run smoke
Tools
Tools declare MCP annotations (readOnlyHint/openWorldHint; the saved-search tools declare their local writes), and every result is also returned as structuredContent with a matching output schema. get_price_stats accepts sample: "spread" for full-range percentile estimates (3 requests) instead of the default cheapest-60 sample. Three MCP prompts ship as guided recipes: appraise_watch, vet_dealer and find_deal.
Currency: Chrono24 assigns the session currency by server geolocation and ignores URL currency params (verified with fresh profiles) - it cannot be forced to e.g. AED. Every result's currency field reports the currency actually detected in the prices, so downstream conversion is at least unambiguous. Prices are pinned to the configured CURRENCY_ID (default USD) and echoed in each result's currency field; Chrono24 tracks currency per browser session, so there is no per-request override. Empty result sets are valid outcomes, not errors.
Environment variables
Troubleshooting
- Cloudflare challenge timeout: wait ~30s and retry once. If persistent, run the server once with
HEADLESS=false, complete any interactive challenge, then switch back. - Slow first call: the first request after a cold profile earns clearance; subsequent calls reuse it.
- Chromium fallback missing browser: run
npx playwright install chromium.
Roadmap
Ideas welcome - open an issue.
Disclaimer
Educational/research project. Not affiliated with, endorsed by, or associated with Chrono24 GmbH. Scraping may violate Chrono24's Terms of Service depending on jurisdiction and use; you are responsible for compliance. Rate limits are deliberately conservative - keep them that way.
License
MIT