
Price Tracker
io.github.theluckystrike由 GitHub 帳號 theluckystrike 發布v0.1.1更新於 Oct 25, 2026
Check a shop page price now, keep a watch list, see history and target alerts. All data stays local.
發布方自己的服務:PriceWin
概覽
一個本機 MCP 伺服器,可從商品頁面讀取價格、維護含價格歷史的追蹤清單,並回報降價與目標價達標情況。
- 可以做什麼
- 查詢商品頁面的目前價格、幣別、標題與擷取信心度,並與該網址上次儲存的紀錄比較變化,不必先加入追蹤。新增、列出與移除追蹤項目,可附上標籤、目標價與幣別。重新整理單一或全部追蹤項目,附加新紀錄並回傳目前價、前次價、最低價、最高價、變化百分比與目標達標旗標。讀取某個追蹤項目已儲存的價格歷史,或為阻擋自動請求的商店手動記錄你自己看到的價格。列出最新價格達到或低於目標價、或較前次下降 5% 以上的追蹤項目,並查詢或啟用 Pro 授權。
- 適用情境
- 適合在對話中追蹤特定商品頁面的價格並保留本機歷史,不需要擷取服務或帳號。較適合偶爾手動重新整理,而非持續監控,因為沒有任何背景工作在执行。
- 執行需求
- 以 stdio 程序在本機執行;從原始碼建置需要 Node.js 18 或更新版本,Claude Desktop 可使用 .mcpb 安裝包。npm 套件尚未發布,npx 安裝可能失敗。需要能連線到你加入的商品頁面。Pro 功能可選用 MCP_LICENSE_KEY,授權為離線驗證。
安裝
在 SourceWeft 中
- 開啟 儀表板中的 Price Tracker,將其新增到工作區。
- 為需要使用其工具的對話啟用該服務。
Desktop only,透過 STDIO。 STDIO 服務會啟動本機處理程序,因此需要 SourceWeft 桌面主機。
其他 MCP 客戶端
參照 儲存庫 中的啟動說明。
README
mcp-price-tracker
Featured on Awesome MCP Servers - directory listing | live hosted endpoint, free tier, no signup.
Ask your assistant what something costs right now. Point it at any product page and it reads the price off the page, remembers it, and tells you next time whether the price moved, how far, and whether it reached the number you were waiting for. It works on ordinary shop pages by reading the structured data most stores already publish (JSON-LD, Open Graph, microdata) and falling back to the visible price when they do not. When a large retailer blocks automated requests it says so plainly and lets you record the price yourself so the history stays intact. Everything is stored in a JSON file on your own machine.
Built by theluckystrike.
In the official MCP Registry (io.github.theluckystrike/price-tracker-drop-alert-watch).
Watch any product page for price drops from chat, no scraping service, no account, all local.
60-second install
npm publish for @theluckystrike/mcp-price-tracker is pending. Until then, the .mcpb one-click bundle or a clone+build
is the working path, both are verified below.
One-click (.mcpb): download price-tracker.mcpb from the latest release and double-click it in Claude Desktop:
https://github.com/theluckystrike/mcp-servers/releases/latest
(claude_desktop_config.json):
Claude Code:
(.cursor/mcp.json):
The npx form above starts working the moment the package is published. Until then, use the .mcpb bundle above, or
build from source with exactly these three commands:
Then point your client's command at node with one arg: the absolute path to servers/price-tracker/dist/index.js.
To run in Pro mode set MCP_LICENSE_KEY in the same config block, or call license_activate once with your key.
Tools
Resource: prices://watches - JSON of every watch with its latest price.
Prompt: check_prices - refreshes every watch and summarises the drops and target hits in one command.
What you can say
Worked example
A real run against books.toscrape.com, from docs/USER_VALUE_R2.md, with WebFetch/WebSearch
disallowed so the price-tracker's own tools had to answer:
The confidence label is not decoration: books.toscrape.com carries no JSON-LD or microdata, so this is
the one case in testing where the regex fallback was the only path to a number, and the model relayed the
"low" label to the user unprompted rather than stating 51.77 as a fact.
Alerts: nothing runs in the background
There is no scheduler and no daemon. A watch is a stored history, not a subscription: prices are re-read only when watch_refresh runs, and alerts_pending reports on what is already stored. The working pattern is to say "refresh my watches" at the start of a session (or run the check_prices prompt), then ask what dropped.
Free vs Pro
Get Pro - $19 for this server, $39 for every server, lifetime.
How prices are read
In order: JSON-LD Product/Offer (price, priceCurrency, lowPrice), microdata itemprop="price", Open Graph og:price:amount / product:price:amount, meta itemprop, data-price attributes, common price class and id hints (including Amazon's a-offscreen), and finally a regex over the visible text of the first 200 KB. European and US separators are both understood, so 1.299,00 EUR and 1,299.00 USD both become 1299.00.
Prices are stored as decimal strings in the major unit with a . decimal separator and no grouping, for example "1299.00". Timestamps are ISO 8601 UTC.
Every reading carries a confidence: high for JSON-LD, microdata, meta itemprop and Open Graph; medium for data-price attributes and price class or id hints; low for the regex fallback. A low reading on a page with no product title is reported but never stored.
Where a page describes several products in JSON-LD (recommendations, "customers also bought"), the offers of one product are never pooled with another's: the product whose name matches the page title wins, otherwise the first product carrying offers. Crossed-out and previous prices (<s>, <del>, <strike>, and classes such as old-price, was, compare-at-price, list-price, rrp) are skipped, so a struck 199 next to a live 99 reports 99. An ISO code written next to the number ("$10 USD") wins over the currency guessed from the domain, and twitter:data1 - free text such as "Free shipping over $50" - is not read as a price.
Pages are fetched with a desktop browser User-Agent, a 12 second timeout, redirects followed, and a 2 MB body cap. After the fetch the final URL is compared with the one you asked for: if the shop redirected off the product path - a different path depth, a category or home page, or a generic title such as "Products", "Home", the shop name alone, or "not found" - you get the shop redirected to <finalUrl>, which is not a product page instead of the cheapest item on the listing it landed on. A redirect that only inserts a canonical slug in front of the same product id or path (Newegg, Amazon /dp/, Zalando-style URLs) is accepted, not refused.
How it stores data
Watches and their price history live in one JSON file:
${XDG_DATA_HOME:-~/.local/share}/mcp-servers/price-tracker/watches.json. Every mutation (watch_add,
watch_remove, watch_refresh, price_add_manual) happens under an advisory lock file,
.../price-tracker/.lock, held across the load-mutate-save cycle so two refreshes running at once cannot
interleave. price_check and read-only tools do not need the lock. Saves write to a temporary file and
rename it into place, so an interrupted write cannot leave a half-written file. To back up your watch
history, copy watches.json.
Only a missing file counts as "no watches yet". If watches.json exists but cannot be read or parsed, the
server never treats it as empty: the unreadable bytes are moved to watches.json.corrupt-<timestamp>, the
fault is written to stderr, and every tool answers with an error naming that file until the server is
restarted. A damaged database can therefore never be silently overwritten by the next price you record.
Limits and honest caveats
- Real-world extraction success is roughly 5 of 12 on a mixed sample of major retailers: five sites
returned an outright bot-wall 403 (H&M, Allegro, MediaMarkt, Home Depot, Etsy), one timed out (Best
Buy), and the rest split between correct prices and one intentionally refused reading (a redirect off
the product page). This is a property of the open web, not a bug the server can fix, there is no
headless browser or CAPTCHA solver here, by design (no native deps, no paid API).
price_add_manualis the working answer for a blocked shop. - There is no background job. Nothing checks prices unless you (or your client, via a scheduled
script you run yourself) call
watch_refresh. This is not a missing feature; a local stdio server has no business running a daemon on your machine. - Free tier caps watches at 3 and history at the last 30 observations per watch;
price_checkandalerts_pendingare unlimited on free. - A
low-confidence regex reading is still reported, but never silently treated as certain, pass it on to the user as an estimate, not a fact.
Troubleshooting
npxhangs or fails to find the package: npm publish for this package is pending. Use the.mcpbbundle or the clone-and-build path above until it lands.- Using the
.mcpbbundle: it installs into Claude Desktop directly; there is no separate config step. - Using the clone path: the server binary is
servers/price-tracker/dist/index.jsafternpm run build. Point your client'scommandatnodewith that absolute path as the only argument. - Node version: requires Node >= 18. Check with
node -v. - A watch always errors "not a product page": the shop redirected you off the URL you gave it (a
category page, home page, or a generic title). Fetch the exact product URL again from the shop and
re-add the watch, or use
price_add_manualif the shop keeps redirecting. - A shop returns 403 every time: it is blocking automated requests. This is expected for a subset of
large retailers (see Limits above); use
price_add_manual. - Nothing shows up / silent failures: logs go to stderr only, never stdout. In Claude Desktop check
Settings -> Developer -> the server's log file; in Claude Code check the terminal or
--mcp-debug.
Privacy
All data stays local, in ${XDG_DATA_HOME:-~/.local/share}/mcp-servers/price-tracker/watches.json. The only network requests are to the product pages you name. License keys verify offline; nothing is sent anywhere.
Pairs with
- mcp-invoice, bill a client for something you bought after tracking its price.
- mcp-spreadsheet, export
price_historyand analyze it as a sheet. - mcp-time-tracker, track the hours you spend shopping around, if that is somehow billable.
- office-suite, every sibling server behind one install, one config entry.
- Guide: Watch a product price with Claude and get told when it drops
FAQ
There is no scheduler in this server. Prices are only re-read when watch_refresh runs, which happens
when you ask for it (or when a cron/launchd job you set up yourself calls it).
Either the shop returned a bot-wall response (403) or the request redirected off the product page onto a
listing, category or home page. Both are reported honestly instead of returning a wrong number; use
price_add_manual to keep the history going by hand.
The price came from a text-pattern fallback rather than the page's own structured data (JSON-LD, microdata, Open Graph). It is usually right but has not been verified against a machine-readable field.
watch_add and price_add_manual accept an explicit currency, but the number you store should match
what you actually read, the server does not convert currencies.
No. The only outbound requests are to the product URLs you add, to fetch their pages. There is no telemetry and no account.
MIT licensed.
Use these docs as an MCP server
Any MCP client (Claude, Cursor, Windsurf, VS Code) can read this repository's documentation directly via GitMCP - no install:
- Docs MCP URL: https://gitmcp.io/theluckystrike/mcp-price-tracker
來源:servers/price-tracker/README.md,提交 1bd9d69
工具
0版本歷史
1- v0.1.1最新Sep 16, 2026
評分
已滿足適用檢查項的 50%
該評分衡量此收錄條目的完整程度,依據註冊中心條目、端點與公開來源計算得出。它不是對伺服器本身的評價,也不表示伺服器安全或目前可用:可連通性是帶日期的檢查結果,評分也不包含安裝量或使用者評價。
- 近 30 天內可連通25 分
請保持端點能夠回應 MCP 握手;SourceWeft 每 30 天探測一次。
- 已宣告認證方式10 分
請在註冊中心條目中宣告憑證請求標頭,或保持端點能夠回應探測,以便判定其認證方式。
- 已列出工具15 分
請讓伺服器在無憑證時回應 tools/list,或發布可在沙箱中無憑證啟動的軟體包。
- 描述必需15 分
- 圖示10 分
- 文件15 分
- 授權條款10 分
其他 Price 整合
PriceWin
win.price官方發布者
遠端 MCP 伺服器,可即時比較 Booking.com、Agoda、Trip.com、Traveloka 等平台的飯店與機票價格,並向合作飯店送出訂房請求。

Mcp Amazon Product Price Stock Tracker
com.mambabuilt
透過 Apify actor 依 ASIN 或商品連結讀取 Amazon 價格、庫存、賣家與評分,並在多次執行之間提供變動列。

Postage Stamp Price MCP
由 GitHub 帳號 theluckystrike 發布
遠端 MCP 伺服器,讓助理在呼叫時從 USPS Notice 123 讀取目前美國郵政零售郵資價格,並計算信件郵資。

Silver Price Per Gram MCP
由 GitHub 帳號 theluckystrike 發布
按純度和貨幣檢視每克白銀即時價格、舊銀幣價值以及金銀比。AI 翻譯

Emalls Price Comparison
由 GitHub 帳號 sepehr071 發布
非官方、唯讀的 Emalls(emalls.ir)比價 MCP 伺服器,可搜尋伊朗商家商品、報價、價格歷史與店家資料。