Priceminder MCP Server — AI-powered Shopee competitor price monitoring. Wraps the Priceminder REST API as MCP Tools, allowing AI agents to interact with Shopee price monitoring capabilities via natural language.
Sentinel MCP has solid naming conventions (all tools start with action verbs: get_, add_, update_, mark_, search_) and comprehensive descriptions (100-250 chars, well above the 34-char minimum). All 10 tools have input schemas with type definitions and parameter descriptions. However, output schemas are not documented, responses are returned as plain strings rather than structured JSON objects. Error handling is minimal; no recovery guidance or error classification. Tool descriptions include example user queries (good for discovery) but lack explicit state-change warnings for write operations. Parameters are well-described but lack enum constraints where applicable (e.g., 'status' should be constrained to 'active'|'paused'). No tool annotations (readOnlyHint, destructiveHint) despite clear read/write distinction in the Risk field.
Add a new product to the monitor list. The user provides a Shopee product URL. Example user queries: - "Track this product https://shopee.sg/..." - "Add this to my monitor list" - "I want to watch this competitor's price" Requires product_url (required). Optional alert_threshold (price drop %, default 5).
Get price drop alerts — shows all alerts triggered by the system. Supports unread filter and site filter. Example user queries: - "Any new price drop alerts?" - "Which products dropped in price recently?" - "How many unread alerts do I have?" - "Show me the last price drop notification" Optional parameters: - unread_only: return only unread alerts (default false) - site: filter by site - limit: max results (default 10, max 50)
Check the crawler engine status — total crawls, success rate, per-site stats. Example user queries: - "Is the crawler system running normally?" - "How many crawls today?" - "What's the success rate for each site?" No parameters required. Returns a health report.
Get the list of products the user is currently monitoring. Example user queries: - "What products am I tracking?" - "How many items on SG site?" - "Show my monitor list" - "How many paused monitors?" Returns an array of monitor items with product name, shop, site, base price, current price, change percentage, and status.
Output schemas not documented. All tools return plain strings; no structured response schema defined. LLMs cannot infer what fields to expect or plan downstream tool calls.
No tool annotations (readOnlyHint, destructiveHint, idempotentHint). Risk field in metadata shows clear read/write distinction, but tools lack MCP annotations to signal this to clients.
Enum constraints missing for constrained parameters. 'status' in update_monitor_status and get_monitor_list should declare enum ['active', 'paused']. 'limit' in get_alerts lacks min/max bounds (stated as 'default 10, max 50' in description but not in schema).
Inferred effective spec: <=2025-11-25.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | C | 61 | <=2025-11-25 | v2 |
Get a dashboard overview of all monitors — active count, today's crawls/alerts, per-site distribution. Example user queries: - "Give me a monitor overview" - "How are all my monitors doing?" - "Show me the dashboard" No parameters required. Returns a dashboard summary.
Get time-series price data for a specific product, useful for trend analysis or charting. Example user queries: - "Show me the price trend for this product over the last 7 days" - "Price change history for the iPhone monitor" - "Draw a price line chart" - "What are today's prices for my MY site monitors?" Requires monitor_id. Optional days (default 7, max 90).
Get price summary for a specific product or all active monitors, including current price, base price, high/low/average, and trend direction. Example user queries: - "How are my competitors' prices recently?" - "Show me SG site price summary for the last 2 days" - "Any products with price drops?" If monitor_id is omitted, returns summary for all active monitors. Optional parameters: site (filter by site), days (default 3).
Mark an alert as read to keep the alerts list clean. Example user queries: - "Mark this alert as read" - "Mark all alerts as read" - "I've already seen that price drop notification" Requires alert_id.
Search the user's monitor list by keyword (matches product name or shop name). Example user queries: - "Search for AirPods in my monitors" - "How many Samsung products am I tracking?" - "What's the name of that earphone shop?" Requires keyword (search term).
Pause or resume a monitored product. Example user queries: - "Pause the iPhone monitor" - "Resume monitoring Samsung" - "Stop tracking AirPods" Requires monitor_id and status ("paused" | "active").
Error handling lacks recovery guidance. No indication of what the LLM should do if a tool call fails (retry, ask user, try alternative tool). No error classification (retryable vs user-fixable vs fatal).
No pagination support documented. get_monitor_list, get_alerts, and search_my_products could return large result sets but lack offset/limit or cursor parameters to prevent context window exhaustion.