Skip to main content
Glama
bolin8017

retail-price-tracker-mcp

by bolin8017

retail-price-tracker-mcp

CI License: MIT

retail-price-tracker-mcp is an open-source Model Context Protocol (MCP) server for tracking retail product prices. It is designed to work well with Hermes Agent, Claude Desktop, Cursor, and any other MCP client.

The first adapter target is UNIQLO Taiwan. The project is intentionally adapter-based so future stores such as GU, MUJI, momo, or booksellers can be added without rewriting the tracking core.

Status: early scaffold / pre-alpha. The current UNIQLO adapter is conservative: it parses supported URLs and records products, but it does not fabricate live prices when a reliable public API is not available.

Features

  • MCP tools for adding, listing, checking, and removing tracked products.

  • SQLite persistence for products, price history, and detected events.

  • Store adapter architecture.

  • UNIQLO Taiwan adapter with search-based current price lookup and safe failure modes.

  • Generic static adapter for tests and local demonstrations.

  • Optional, local OCR-assisted resolution from a price-label image (PaddleOCR extra).

  • Hermes skill package with install/config/cron guidance.

  • Standard open-source project files: CI, issue templates, PR template, contributing guide, security policy, code of conduct.

Related MCP server: Taiwan Price Compare MCP

MCP tools

Tool

Purpose

add_product

Add a product URL with optional target price, sale notifications, sizes, and display name.

list_products

List tracked products.

check_product

Check one product and record price history/events when possible.

check_all

Check all active products; useful for cron jobs.

price_history

Read historical prices for a product.

remove_product

Deactivate tracking for a product.

resolve_product

Search adapters for candidate products from a name, OCR text, or product code.

resolve_product_from_image

Run optional OCR on a local image, then resolve product candidates from the extracted text.

Quick start for development

git clone https://github.com/bolin8017/retail-price-tracker-mcp.git
cd retail-price-tracker-mcp
uv sync --extra dev   # locked versions, same toolchain as CI
uv run pytest
uv run ruff check .

Run the MCP server over stdio:

PRICE_TRACKER_DB="$PWD/tracker.db" uv run retail-price-tracker-mcp

Use the small CLI helper for smoke tests:

uv run retail-price-tracker add 'https://www.uniqlo.com/tw/zh_TW/products/E123456-000' --name 'Demo shirt' --target-price 390
uv run retail-price-tracker list
uv run retail-price-tracker resolve 'AIRism 棉質寬版圓領T恤' --limit 3

Optional OCR-assisted resolution

OCR is shipped as an optional extra so the core install stays lightweight and no models are downloaded by default. Install it only when you need to resolve a product from a photo of a price label:

uv pip install -e '.[ocr]'   # pulls in PaddleOCR
uv run retail-price-tracker resolve-image /path/to/label.jpg --limit 5

The image is run through OCR locally, price/size-only lines are stripped, and the remaining text becomes a query for resolve_product. The project does not build a custom OCR model; PaddleOCR is the primary engine. Without the extra, the tool raises a clear error explaining how to install it.

Hermes configuration

Add this to ~/.hermes/config.yaml. The package is not published to PyPI yet, so uvx installs and runs it straight from GitHub:

mcp_servers:
  retail_price_tracker:
    command: "uvx"
    args: ["--from", "git+https://github.com/bolin8017/retail-price-tracker-mcp", "retail-price-tracker-mcp"]
    env:
      PRICE_TRACKER_DB: "/home/USER/Documents/Hermes/price-tracker/tracker.db"
    timeout: 120
    connect_timeout: 60

Running from a local clone (development / offline): if you already have the repo checked out, point Hermes at it so edits take effect immediately and no network fetch is needed — replace the command/args above with:

    command: "uv"
    args: ["run", "--directory", "/path/to/retail-price-tracker-mcp", "retail-price-tracker-mcp"]

After restarting Hermes, tools will be available with names like:

mcp_retail_price_tracker_add_product
mcp_retail_price_tracker_check_all
mcp_retail_price_tracker_price_history
mcp_retail_price_tracker_resolve_product

See docs/hermes.md and skills/retail-price-tracker/SKILL.md for a full Hermes workflow.

Example Hermes cron prompt

Use the retail price tracker MCP tools to run check_all. If there are price drops, below-target events, sale labels, restocks, or errors needing attention, summarize them for the user in concise Traditional Chinese. If nothing changed, stay silent.

Design principles

  1. MCP first: the core should work outside Hermes.

  2. Hermes friendly: ship a skill and cron templates for a polished Hermes experience.

  3. No fake prices: adapters must return explicit unsupported/unknown results instead of made-up data.

  4. Local by default: SQLite on the user's machine; no hosted service required.

  5. Adapter-based: stores are plugins around a stable tracking core.

Roadmap

  • Harden UNIQLO Taiwan live price fetching with more URL formats and stock detail support.

  • Size/color stock tracking.

  • Improve OCR resolution accuracy and add an EasyOCR fallback provider.

  • changedetection.io backend integration.

  • More adapters: GU, MUJI, momo, booksellers.

  • HTTP MCP transport and Docker image.

Security and privacy

Tracked URLs, prices, and shopping preferences are stored locally in SQLite by default. See docs/security.md.

Contributing

Please read CONTRIBUTING.md. Bug reports and adapter contributions are welcome.

License

MIT. See LICENSE.

Available Tools

7 tools
add_productC

Add a retail product URL to the tracker.

ParametersJSON Schema
NameRequiredDescriptionDefault
urlYes
target_priceNo
notify_on_saleNo
sizesNo
nameNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

C2.3/5.0
Behavior1/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, and the description does not disclose behavioral traits such as duplicate handling, authentication requirements, or side effects like triggering initial price checks. For a creation tool, this is a critical omission.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single sentence, making it concise but at the expense of necessary detail. It is front-loaded with the main action but lacks structure for completeness.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given 5 parameters, no annotations, and an output schema, the description is incomplete. It does not explain the purpose of each parameter, the return value, or post-add behavior. The agent would need to infer too much from parameter names alone.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters1/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0% and the description does not explain any parameters. While some parameter names are self-explanatory (e.g., url, notify_on_sale), the description adds no value beyond the schema, leaving agents without guidance on format or usage constraints.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

Description clearly states the action (add) and object (retail product URL) and destination (tracker), distinguishing it from siblings like remove_product or check_product. However, it does not specify the tracker's purpose (price tracking) or clarify that the tool adds a new product to monitor.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance on when to use this tool versus alternatives like check_product or list_products. The usage context is implied (adding new products), but there is no explicit when-not or mention of prerequisites.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

check_allA

Check all active products; useful for scheduled jobs.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.6/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries full burden. It only says 'check' without disclosing whether it is read-only, what side effects occur, or what happens on failure. Lacks detail on behavioral traits.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is very concise with one sentence, no wasted words. However, could be slightly more informative without being verbose.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given zero parameters and presence of output schema, the description is short but misses behavioral context. It names the resource and use case but doesn't explain what 'check' entails, which is a gap.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool has no parameters; description adds meaning by specifying 'active products', clarifying the scope beyond the empty schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the verb 'check' and the resource 'all active products', distinguishing it from sibling tools like check_product (individual) and list_products (listing).

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description mentions 'useful for scheduled jobs', implying a batch use case, but does not explicitly contrast with alternatives or provide when-not-to-use guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

check_productC

Check one product and record history/events.

ParametersJSON Schema
NameRequiredDescriptionDefault
product_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

C2.4/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations provided, so description must convey effects. 'Record history/events' implies mutation (writing history), but doesn't clarify whether this is a side effect or what exactly is recorded. No mention of permissions, rate limits, or reversibility.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Single sentence, no wasted words. However, it is arguably under-specified for a tool with an output schema and side effects. Concise but not sufficiently informative.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With one parameter and an output schema, the description should provide context on what 'check' entails and what the output looks like. It mentions 'record history/events' but leaves ambiguity about the return value and side effects.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters1/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema has one required parameter 'product_id' with no description (0% coverage). Description does not explain what product_id represents or how to obtain it, adding no meaning beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states 'Check one product' indicating a single-product operation, and 'record history/events' suggests additional logging. It distinguishes from sibling 'check_all' (checks multiple) but 'check' is vague compared to more specific verbs like 'resolve' or 'list'.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No explicit guidance on when to use this tool versus alternatives like 'list_products' or 'price_history'. The description implies use for a single product with history recording, but doesn't exclude other scenarios or mention when not to use it.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_productsC

List tracked products.

ParametersJSON Schema
NameRequiredDescriptionDefault
active_onlyNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

C2.7/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden. It only states 'List tracked products' without disclosing read-only nature, auth requirements, rate limits, or any side effects. Minimal transparency.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single short sentence, which is concise and front-loaded. No redundant information, but it is perhaps too brief at the expense of completeness.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Despite having an output schema, the description fails to provide enough context to use the tool effectively. It does not differentiate from sibling tools like check_all, and it omits behavior regarding the active_only parameter. Incomplete for a tool with one parameter.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The only parameter 'active_only' has 0% schema description coverage. The tool description does not explain its meaning or effect, though the name implies filtering active products. The agent receives no additional semantic help.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description 'List tracked products' clearly states the verb and resource, distinguishing it from sibling tools that perform actions like add, check, remove, or resolve. However, it lacks specific scope (e.g., all products or only active ones by default).

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance is provided on when to use this tool versus alternatives like check_all or price_history. The description does not mention appropriate contexts or exclusions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

price_historyC

Return price history for a product.

ParametersJSON Schema
NameRequiredDescriptionDefault
product_idYes
daysNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

C2.7/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries full burden but only states a bare purpose; does not disclose read-only nature, limits, or any side effects.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Single sentence is concise but too sparse; front-loads the main point but omits critical details.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Despite an output schema, the description lacks sufficient context for a tool with 2 parameters; missing behavior details like date range handling.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters1/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema has 0% parameter descriptions and the description does not explain product_id or days; no added value beyond the schema's names and types.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool returns price history for a product, which distinguishes it from sibling tools like add_product or list_products.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance on when to use this tool vs alternatives; does not mention prerequisites or exclusions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

remove_productC

Deactivate tracking for a product.

ParametersJSON Schema
NameRequiredDescriptionDefault
product_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

C2.6/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description only says 'Deactivate tracking,' which implies a state change but provides no details on permanence, reversibility, side effects, or required permissions. Without annotations, this is insufficient for a mutation tool.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single concise sentence, but it under-specifies the tool's behavior and context. It earns its place but could be more informative while remaining concise.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool has an output schema but no annotations, the description should cover return behavior, error conditions, or side effects. It does not, leaving the agent with minimal understanding of what happens after invocation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With 0% schema description coverage, the tool name and description are expected to clarify the parameter. The description only implies 'product_id' identifies the product to deactivate, but adds no constraints or format details.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action ('Deactivate tracking') and the target resource ('a product'), making it distinct from sibling tools like 'add_product' or 'check_product' which have different verbs.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance is provided on when to use this tool versus alternatives (e.g., when to deactivate vs. add or check a product). The description lacks context on prerequisites or scenarios.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

resolve_productC

Search store adapters for product candidates matching a query.

ParametersJSON Schema
NameRequiredDescriptionDefault
queryYes
limitNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

C2.7/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations exist, so the description carries full burden. It only states 'Search store adapters' without disclosing side effects, authentication needs, rate limits, or read-only nature. Schema parameters give no additional behavioral hints.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single, front-loaded sentence efficiently conveys the primary action. While very brief, it is not wasteful; however, it sacrifices necessary detail.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool has an output schema but no annotations, the description is insufficient. It lacks details about output format, error handling, pagination, or ordering of results, which an agent would need for proper invocation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, yet the description only adds minimal context: 'matching a query' clarifies the query parameter, but limit is unexplained. Neither parameter's format, constraints, or behavior is described.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb ('Search') and resource ('store adapters for product candidates'), making the core action clear. It is distinct from siblings like 'add_product' or 'check_product', which involve different operations.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance provided on when to use this tool versus alternatives such as 'list_products' or 'check_product'. There are no when-to-use or when-not-to-use examples.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections. Dates show when Glama detected each change.

  1. 7 tool updatesv0.1.0
    • First observedadd_product
    • First observedcheck_all
    • First observedcheck_product
    • First observedlist_products
    • First observedprice_history
    • First observedremove_product
    • First observedresolve_product

TDQS

B3.2/5.0
Disambiguation5/5

Each tool has a clear and distinct purpose: adding, checking (individual or all), listing, viewing history, removing, and searching products. No overlap.

Naming Consistency5/5

All tool names follow a consistent verb_noun pattern with underscores (e.g., add_product, check_all). The pattern is uniform and predictable.

Tool Count5/5

Seven tools provide a well-scoped set for retail price tracking, covering core operations without excess or deficiency.

Completeness4/5

The set covers add, remove, list, check, history, and search. Missing an update operation for product details, but core tracking workflow is complete.

Maintenance

ActivitySlowing
ResponsivenessSyncing

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Connectors

Related MCP Servers

  • A
    license
    C
    quality
    D
    maintenance
    Provides comprehensive Taiwan stock market data and analysis through MCP tools. Enables querying real-time stock prices, historical data, company information, technical analysis, and market overviews for TWSE and TPEx listed companies.
    8
    15
    MIT
  • A
    license
    Not graded
    quality
    B
    maintenance
    Real-time Shopee competitor price monitoring, powered by AI agents through the Model Context Protocol (MCP). Enables AI agents to track, analyze, and alert on price movements across Shopee Southeast Asia.
    1
    MIT

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/bolin8017/retail-price-tracker-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server