Skip to main content
Glama

watchcharts-mcp

CI License: MIT

MCP server for watchcharts.com — luxury watch market prices and trends, exposed as tools for Claude and other MCP clients.

How it works

WatchCharts is protected by a Cloudflare JS challenge that blocks plain HTTP clients and vanilla headless browsers. This server uses patchright (stealth-patched Playwright) driving your system Google Chrome in headful mode, with the window parked off-screen. API calls run inside the page via fetch(), reusing the browser's cookies, TLS fingerprint and CSRF token.

The private REST API was reverse-engineered from HAR captures of the /market screener and the marketplace:

Endpoint

Purpose

GET watchcharts.com/rest/screener_count

Count of watches matching filters

GET watchcharts.com/rest/market_results

Paginated screener results (DataTables format, HTML fragments parsed into JSON)

GET watchcharts.com/suggest/analytics/0.json?q=…

Model/brand autocomplete (pure JSON)

GET watchcharts.com/watch_model/{id}/overview

Model page: full specs, market/retail price (parsed)

GET watchcharts.com/charts/watch/{id}.json?type=trend|sales|listings

Price series, auction sales, historical listings (pure JSON)

GET watchcharts.com/charts/brand.json / charts/brand/{id}.json

Overall / per-brand market index since 2017 (pure JSON)

GET watchcharts.com/watches?filters=<b64>&page=&sort=

Full catalog browse with spec filters (server-rendered, parsed)

GET marketplace.watchcharts.com/rest/ebay

Live eBay listings aggregation

GET marketplace.watchcharts.com/listings?q=…

Marketplace listing search (server-rendered, parsed)

GET marketplace.watchcharts.com/listing/{id}?html=true

Listing detail with value assessment

filters is base64-encoded JSON: key -1 = price cap, keys -100-105 = time period (1m…5y) with minimum trend %. Brand filtering uses the brandId query param. Each subdomain has its own CSRF token (read from #csrfToken[data-token]), but the Chrome context/cookies are shared.

Related MCP server: mcp-financex

Requirements

  • macOS/Linux/Windows with Google Chrome installed

  • Python ≥ 3.12, uv

Tools

Tool

Description

search_watches(price_max, period, min_trend_pct, brand_id, start, limit)

Screener results: name, collection, watch_id, url, image, market price (EUR), trend %

count_watches(query, brand_id, price_max, period, min_trend_pct)

Count matching watches

list_brands()

All brands with WatchCharts brand ids

search_models(query)

Resolve free text ("daytona 116503") to watch_id, uuid, brand, collection, price

get_watch_info(watch_id)

Full specs (references, complications, case, dial), market + retail price, per-variation prices

get_watch_sales(watch_id)

Auction sale records (Sotheby's, Christie's...) with hammer price

get_listings_history(watch_id)

Historical sold/unsold listings across eBay, dealers, forums

get_price_history(watch_id)

Daily market price series (~1y on free tier) + retail price

get_market_index(brand_id)

Overall or per-brand market index, daily since 2017

browse_watches(filters, page, sort)

Filter the 29k+ catalog by specs (dial, diameter, movement, complications...)

search_ebay(query, fallback_query, watch_id, country)

Live eBay listings: title, seller, price, URL

search_listings(query, page)

Marketplace listings (dealers, Reddit, forums): price, Fair/Good/High rating, country

get_listing(listing_id)

Listing detail: price, value assessment vs estimate, source, external URL

appraise_watch(query, condition, accessory, region)

Instant appraisal: estimated value adjusted for condition, box/papers, region

watch_id from search_watches composes with get_price_history and search_ebay. variation_id from get_watch_info narrows get_price_history, get_watch_sales, and get_listings_history to a single reference/dial.

Appraisal (captcha-gated, driven via the real form)

appraise_watch is the equivalent of the paid API's appraisal.

Usage:

appraise_watch(
    query="Rolex Daytona 116503",   # name or reference
    condition="Pre-owned",          # or "New" / "Unworn"
    accessory="box and papers",     # or "box only" / "watch only"
    region="Europe",                # or "North America" / "Asia"
)
# → {"watch": "Rolex Cosmograph Daytona 116503",
#    "estimated_value": "€17,671",
#    "condition": "Pre-owned", "accessory": "Watch with original box and papers",
#    "region": "Europe", "summary": "..."}

condition / accessory / region are matched by substring against the form's dropdown labels, so partial words work. The response echoes back the label actually matched. The inputs move the number — e.g. new + watch-only + North America → €18,058.

Why it's different from the other tools. Its submit endpoint is protected by a per-request captcha token that only the page's own JS can mint. There is no token stored anywhere in this code — each call drives the real /appraisal form (type reference → pick the match → set the dropdowns → submit), and the browser mints a fresh token at submit time. That's why "will it still work tomorrow?" is a yes: nothing is cached that can expire. The only prerequisites are the same as every other tool — Chrome installed and Cloudflare passing.

What can break it. Because it's UI-driven, it depends on the form's DOM structure. If WatchCharts redesigns the /appraisal form, update APPRAISAL_SELECTORS in client.py — that dict is the single place all the selectors live. The parsing of the rendered result is separate (_parse_appraisal_report) and covered by an offline fixture test, so a wording change in the report surfaces as a test failure. It's ~10-15s per call (a real browser flow) and more fragile than the JSON-backed tools — use it for one-off valuations, not bulk lookups.

Install

git clone https://github.com/NiccoloSalvini/watchcharts-mcp
cd watchcharts-mcp
uv sync

Claude Code

claude mcp add watchcharts -- uv run --directory /path/to/watchcharts-mcp watchcharts-mcp

Claude Desktop

{
  "mcpServers": {
    "watchcharts": {
      "command": "uv",
      "args": ["run", "--directory", "/path/to/watchcharts-mcp", "watchcharts-mcp"]
    }
  }
}

Development

uv run pytest        # offline parser tests against fixtures in tests/fixtures

Parsers are pinned by fixture tests: if WatchCharts redesigns its markup, tests fail instead of tools returning silently empty data.

Notes

  • First tool call launches Chrome and solves the Cloudflare challenge (~15–30 s); later calls are fast. The Chrome profile is cached in ~/.cache/watchcharts-mcp/chrome-profile so subsequent launches reuse cf_clearance.

  • Free-tier data: results are capped by WatchCharts (2000 rows) and some columns require a Professional subscription.

  • For personal/research use. Respect WatchCharts' terms of service.

Available Tools

15 tools
appraise_watchA

Instant appraisal — estimated market value for a watch given its condition, delivery contents, and region.

This is the equivalent of the paid API's appraisal. It drives the real appraisal form (the submit is captcha-protected and can't be called directly), so it takes ~10-15s. Returns the estimated value plus the condition/accessory/region actually matched.

ParametersJSON Schema
NameRequiredDescriptionDefault
queryYesWatch to appraise, by name or reference (e.g. 'Rolex Daytona 116503')
regionNoMarket region: 'Europe', 'North America', 'Asia'Europe
accessoryNoDelivery contents: 'box and papers', 'box only', 'watch only'box and papers
conditionNoCondition label: 'Pre-owned', 'New', 'Unworn'Pre-owned

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.2/5.0
Behavior4/5

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

With no annotations, the description carries full burden. It discloses that the tool is a free option equivalent to a paid API, takes 10-15 seconds, and is captcha-protected via the form. It also states what it returns. No contradictions.

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

Conciseness5/5

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

Three concise sentences: purpose, context+timing, return result. No superfluous text. Front-loaded with key information.

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

Completeness4/5

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

Covers the main behavioral aspects (time, return value, relationship to paid API) well. With output schema present, the return structure is implied. Minor gap: no mention of error cases or data range, but acceptable.

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

Parameters3/5

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

Input schema has 100% coverage with descriptions for all 4 parameters. The description adds context (e.g., 'query' by name or reference) but does not significantly enhance individual parameter meaning beyond the 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 tool's purpose: 'Instant appraisal — estimated market value for a watch given its condition, delivery contents, and region.' This is specific and distinguishes it from siblings like evaluate_deal, get_price_history, and get_market_index.

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

Usage Guidelines4/5

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

The description provides context on when to use the tool: 'This is the equivalent of the paid API's appraisal. It drives the real appraisal form...' and mentions the ~10-15s delay. However, it does not explicitly exclude usage in favor of sibling tools.

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

browse_watchesA

Browse the full 29k+ watch catalog with spec filters.

Returns watch_id, name, collection, production status, key attributes, retail + market price, URL, image.

ParametersJSON Schema
NameRequiredDescriptionDefault
pageNoPage (25 results each)
sortNoSort key: '' (default), price_asc, price_desc, random
filtersNoCatalog filter dict. Option-id lists: '1' dial color (6=Black, 41=Champagne), '2' style, '3' bezel material (240=Yellow gold), '5' crystal, '6' dial numerals, '7' movement (8=Automatic), '17' complications (87=Chronograph, 99=Tachymeter), '18' features, '19' case material (216=Gold/steel). Ranges ['min','max']: '4' case diameter mm, '11' power reserve h, '13' water resistance (10m units), '15' lug width mm. Example: {'1': [6], '4': ['40','44']}

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.8/5.0
Behavior3/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 lists return fields but does not disclose behavioral traits like permission requirements, rate limits, or side effects. It is adequate but not rich.

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

Conciseness5/5

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

Two sentences, no wasted words. First sentence states purpose, second lists return fields. Front-loaded and efficient.

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

Completeness4/5

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

The description provides a clear overview of tool functionality and return fields. With an output schema present, return value explanation is sufficient. Could include an example or more context on filter usage, but overall complete.

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

Parameters3/5

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

Schema coverage is 100%, so the description adds little beyond the schema. It does not elaborate on parameter usage beyond the schema's existing descriptions. Baseline 3 appropriate.

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's purpose: browsing a 29k+ watch catalog with spec filters. It differentiates from siblings like search_watches (search) and get_watch_info (single watch) by emphasizing broad catalog browsing and listing return fields.

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 implies usage for broad catalog browsing but provides no explicit guidance on when to use this tool versus siblings like search_watches or get_watch_info. No when-not-to-use or alternatives are mentioned.

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

count_watchesA

Count watches matching the screener filters.

ParametersJSON Schema
NameRequiredDescriptionDefault
queryNoFree-text search query
periodNo1y
brand_idNoBrand id from list_brands (0 = all)
price_maxNoMax market price in EUR
min_trend_pctNoMin trend % over period

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4/5.0
Behavior4/5

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

No annotations are provided, so the description carries the full burden. It accurately describes the tool's function (returning a count) without misleading. For a simple count tool, this is sufficient, though it does not elaborate on performance or rate limits.

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

Conciseness5/5

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

The description is a single, concise sentence that communicates the tool's purpose with no unnecessary words or redundant information.

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

Completeness4/5

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

Given the low complexity of the tool (counting with filters) and the presence of an output schema (though not shown), the description is mostly complete. It would benefit from a brief note about the return type (e.g., integer) but is adequate.

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

Parameters3/5

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

Schema description coverage is 80%, meaning 4 of 5 parameters have descriptions in the input schema. The tool description does not add any additional meaning beyond what the schema already provides, so the baseline of 3 is appropriate.

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 ('count') and the resource ('watches') with context ('matching screener filters'). It distinguishes the tool from siblings like 'search_watches' (which returns full results) and 'browse_watches'.

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 implies usage for counting filtered results but provides no explicit guidance on when to use this vs alternatives like 'search_watches' or 'browse_watches'. No when-not-to-use or alternative hints are given.

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

evaluate_dealA

Evaluate whether an asking price is a good deal for a watch.

Gathers, in one call, the appraisal estimate, current market price, recent price trend (90d / 1y), and comparable listings — plus the computed gap between the asking price and the reference value, and where the asking price sits among comparable listings. Use these figures to give the user a buy / negotiate / pass recommendation with reasoning: a negative vs_reference_pct and a low asking_price_percentile mean the price is attractive; weigh it against the trend direction.

ParametersJSON Schema
NameRequiredDescriptionDefault
queryYesWatch being offered, by name or reference (e.g. 'Rolex Daytona 116503')
regionNoMarket region: 'Europe', 'North America', 'Asia'Europe
accessoryNoDelivery contents: 'box and papers', 'box only', 'watch only'box and papers
conditionNoCondition for the appraisal: 'Pre-owned', 'New', 'Unworn'Pre-owned
asking_priceYesThe asking price to evaluate, in the account currency (EUR)
include_appraisalNoRun the (slower, ~15s) appraisal; if false, uses current market price

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.2/5.0
Behavior4/5

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

No annotations are provided, so the description carries the full burden. It discloses the slower appraisal option (~15s when include_appraisal is true) and describes the output components (gap, percentile, trends). However, it does not mention authentication needs or potential 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.

Conciseness4/5

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

The description is a single compact paragraph that starts with the core purpose and then details the returned data. Every sentence adds value; there is no redundancy or fluff. It is slightly longer than necessary but remains efficient.

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

Completeness5/5

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

Given the tool's complexity (6 parameters, computed metrics), the description covers all essential aspects: what it gathers, what it computes, and how to interpret results. The presence of an output schema complements the description, making it fully complete for the agent to understand the tool's behavior.

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

Parameters3/5

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

Schema coverage is 100%, so the schema already documents all parameters. The description adds context by explaining how the parameters influence the recommendation (e.g., trend direction, condition), but does not repeat parameter-level details. A score of 3 is appropriate given high schema coverage.

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 opens with a clear verb-resource pair ('Evaluate whether an asking price is a good deal for a watch') and enumerates exactly what data it gathers and computes. It differentiates from siblings like appraise_watch by focusing on deal evaluation rather than just appraisal.

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

Usage Guidelines4/5

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

It explicitly states the tool's purpose for giving a buy/negotiate/pass recommendation and explains how to interpret the computed metrics. While it does not list when not to use it, the context and sibling tool names imply alternatives (e.g., appraise_watch for standalone appraisal).

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

get_listingA

Details for one marketplace listing: price, value assessment vs WatchCharts estimate, source site, posting date, external URL.

ParametersJSON Schema
NameRequiredDescriptionDefault
listing_idYesMarketplace listing id (from search_listings)

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 does not disclose that the tool is read-only, any authentication requirements, rate limits, or potential side effects. The description only outlines return fields, not 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.

Conciseness5/5

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

The description is a single sentence that is concise and front-loaded with the core purpose ('Details for one marketplace listing'). No unnecessary words or repetition.

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

Completeness4/5

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

For a simple retrieval tool with one parameter and an existing output schema, the description is adequately complete. It lists the key return fields. However, it could mention error conditions (e.g., invalid listing_id) or additional context, but given the low complexity, a score of 4 is appropriate.

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

Parameters3/5

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

Schema coverage is 100% and the schema already describes the parameter (listing_id from search_listings). The description does not add additional meaning or context for the parameter beyond what the schema provides, meeting the baseline of 3.

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?

Description clearly states it returns details for one marketplace listing and lists the specific data fields (price, value assessment vs WatchCharts estimate, source site, posting date, external URL). It distinguishes from siblings like search_listings (which returns multiple listings) and get_listings_history (historical data).

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 implies usage for retrieving details of a single listing but does not explicitly state when to use it over alternatives (e.g., search_listings for finding listings, get_watch_info for watch details). No when-not-to-use or alternative guidance is provided.

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

get_listings_historyA

Historical marketplace listings (sold and unsold) for a watch model, newest first: price, date, source (eBay, dealers, forums), URL.

ParametersJSON Schema
NameRequiredDescriptionDefault
watch_idYesWatchCharts watch model id
variation_idNoNarrow to one reference/dial (from get_watch_info variations); 0 = whole model

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.8/5.0
Behavior3/5

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

With no annotations provided, the description must disclose behavioral traits. It mentions ordering (newest first), data fields, and that both sold and unsold listings are included. However, it omits details about pagination, authentication, or data range limits, which would be helpful.

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

Conciseness5/5

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

The description is a single sentence that front-loads the key information (purpose, scope, ordering, fields). No wasted words; every part provides value.

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

Completeness4/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 (so return structure is covered) and two well-documented parameters, the description adequately covers the tool's purpose, scope, and output fields. It could explicitly mention the variation_id parameter's role, but the schema already does that.

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

Parameters3/5

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

Schema description coverage is 100%, so the input schema already explains both parameters. The tool description adds no additional parameter semantics beyond mentioning output fields, so a baseline score of 3 is appropriate.

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 it returns historical marketplace listings for a watch model, including sold and unsold, with specific fields (price, date, source, URL) and ordering (newest first). This effectively distinguishes it from siblings like get_price_history or search_listings.

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 implies usage for historical listings but does not explicitly state when to use this tool versus alternatives such as get_price_history or search_listings. No exclusions or prerequisites are mentioned.

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

get_market_indexA

Market index time series (overall or per brand), from 2017 to today.

Values are index points in EUR. Much deeper history than per-watch price charts.

ParametersJSON Schema
NameRequiredDescriptionDefault
brand_idNoBrand id from list_brands, or 0 for the Overall Market Index

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.3/5.0
Behavior4/5

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

With no annotations, the description adequately discloses key behaviors: time range, currency (EUR), and the ability to filter by brand. It mentions the data is 'much deeper history' than per-watch charts, adding behavioral context. The absence of side effects or auth notes is acceptable for a read-only tool.

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

Conciseness5/5

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

Two concise sentences cover purpose, scope, data range, currency, and differentiation. No redundant words; each sentence adds value.

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

Completeness5/5

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

Given the tool's simplicity (one optional parameter, output schema exists), the description is fully adequate. It covers what the tool does, when to use it, and key constraints (time range, currency), leaving no gaps for correct invocation.

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

Parameters3/5

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

Schema coverage for the single parameter is 100% as 'brand_id' is described in the schema. The description adds the phrase 'per brand' but does not significantly enhance the meaning beyond the schema. Baseline 3 is appropriate.

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 it returns market index time series from 2017 to today, either overall or per brand, with values in EUR. It also distinguishes itself from per-watch price charts by noting deeper history, making the purpose specific and unambiguous.

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

Usage Guidelines4/5

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

The description implies when to use this tool by contrasting it with per-watch price charts, indicating it's for broader market trends with longer history. However, it does not explicitly name sibling tools or state when not to use it, though the context is clear enough.

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

get_price_historyA

Historical market price series for a watch model.

Returns daily prices (date, price) plus retail price and model info. Free tier covers roughly the last year of data. Pass variation_id for the series of a single reference/dial.

ParametersJSON Schema
NameRequiredDescriptionDefault
watch_idYesWatchCharts watch model id (from search_watches results)
variation_idNoNarrow to one reference/dial (from get_watch_info variations); 0 = whole model

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.3/5.0
Behavior3/5

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

No annotations are provided, so the description carries the full burden. It discloses the free tier limitation and output contents, but lacks details on authentication, rate limits, or data freshness.

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

Conciseness5/5

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

Three sentences, no filler. Every sentence adds essential information: what it returns, the free tier constraint, and how to use variation_id.

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

Completeness5/5

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

Given the output schema exists, the description covers return values adequately. It mentions the free tier constraint and variation usage. No significant gaps for a simple 2-parameter tool.

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?

Schema coverage is 100%, so parameters are already documented. The description adds value by explaining that variation_id narrows to a single reference/dial and that 0 means whole model.

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 it returns historical market price series for a watch model, specifying daily prices, retail price, and model info. It distinguishes itself from siblings by focusing on price history, not general info or sales.

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

Usage Guidelines4/5

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

The description provides clear usage context: it mentions the free tier covers roughly the last year, and explains how to narrow by variation_id. It does not explicitly state when not to use it, but the purpose is well-scoped.

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

get_watch_infoA

Full specs and key figures for a watch model: references, complications, case/dial details, market price, retail price.

ParametersJSON Schema
NameRequiredDescriptionDefault
watch_idYesWatchCharts watch model id

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4/5.0
Behavior3/5

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

No annotations are provided, so the description carries the full burden. It lists the output contents but does not disclose behavioral traits such as read-only status, rate limits, or authorization requirements. It is adequate but lacks explicit transparency.

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

Conciseness5/5

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

A single, well-structured sentence that front-loads the key purpose ('Full specs and key figures') and efficiently lists the data categories. No superfluous words.

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

Completeness4/5

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

Given that an output schema exists, the description does not need to detail return values. For a simple one-parameter lookup tool, the description is complete enough to guide an agent, though it could mention that it returns info for a single model.

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?

Schema coverage is 100% with a clear description for watch_id. The description adds value by specifying what the returned data includes (specs, prices), which goes beyond the schema's parameter description alone.

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 'Full specs and key figures for a watch model' and lists specific data types (references, complications, case/dial details, market price, retail price). This distinguishes it from sibling tools like browse_watches (listing) or get_listing (specific 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 implies usage for getting detailed info on a specific watch model, but does not explicitly state when to use it versus alternatives like search_models or get_listing. No exclusions or context are provided.

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

get_watch_salesA

Auction sale records for a watch model (Sotheby's, Christie's...): hammer price, date, auction house, lot URL.

ParametersJSON Schema
NameRequiredDescriptionDefault
watch_idYesWatchCharts watch model id
variation_idNoNarrow to one reference/dial (from get_watch_info variations); 0 = whole model

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.8/5.0
Behavior3/5

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

No annotations provided. The description adds context by listing returned fields (hammer price, date, auction house, lot URL) and mentions specific auction houses, beyond the output schema. However, it omits details like pagination, ordering, or rate limits.

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

Conciseness5/5

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

Single sentence that is front-loaded and contains no fluff. Every word adds value, efficiently conveying the tool's purpose and typical output.

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

Completeness4/5

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

Given the existence of an output schema and simple parameters (two fields), the description is sufficient. It names the core data fields and auction houses, leaving little ambiguity. Could mention result ordering or lack of pagination, but overall complete for the tool's complexity.

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

Parameters3/5

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

Schema coverage is 100% with clear descriptions for both parameters. The description does not need to repeat parameter meaning, but it adds value by explaining how variation_id narrows results. Baseline score is appropriate.

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 retrieves auction sale records for a watch model, naming specific auction houses (Sotheby's, Christie's) and data fields (hammer price, date, etc.). This distinguishes it from sibling tools like get_price_history (market prices) and get_watch_info (watch details).

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?

No explicit guidance on when to use this tool versus alternatives, but the context of siblings makes its purpose clear. Implied usage for auction history, but lacks when-not-to-use or alternative recommendations.

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

list_brandsB

List all watch brands with their WatchCharts brand ids.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3.4/5.0
Behavior2/5

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

No annotations are provided, so the description must disclose behavioral traits. It fails to mention if the list is exhaustive, sorted, or has any limits (e.g., pagination). The tool's behavior is under-specified.

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 concise sentence that front-loads the key action and result. It could add minor details without becoming 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 an output schema, the description provides the minimal information to understand the tool's purpose. However, it lacks details about ordering or completeness, which could improve usability.

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?

With no parameters, schema coverage is 100%, so the description does not need to compensate. The baseline of 4 is appropriate.

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 lists all watch brands and includes their WatchCharts brand IDs, using a specific verb and resource. It distinguishes from sibling tools like search_models or browse_watches which have different purposes.

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 search_models or browse_watches. The description only states what it does, not the context or expected use case.

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

search_ebayA

Live eBay listings for a watch, as aggregated by WatchCharts marketplace.

Returns title, seller, price (site currency), listing URL, image.

ParametersJSON Schema
NameRequiredDescriptionDefault
queryYesSearch query, typically 'Brand Reference' (e.g. 'Rolex 116503')
countryNo2-letter country code for the eBay site (IT, US, GB, DE...)IT
watch_idNoWatchCharts watch id to anchor results (0 = none)
fallback_queryNoBroader fallback query (e.g. 'Rolex Daytona')

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.7/5.0
Behavior2/5

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

No annotations are provided, so the description must fully disclose behavioral traits. It only lists returned fields but does not mention pagination, rate limits, caching behavior, or any constraints on the live search. For a tool querying a live marketplace, this is a significant gap.

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

Conciseness5/5

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

The description is extremely concise: two short sentences in the first paragraph state purpose and scope, and a second paragraph lists returned fields. No wasted words. Every sentence adds value.

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 the presence of an output schema (context signal), the description does not need to detail return values. However, it lacks information on result ordering, maximum results, or pagination. For a search tool, this is a moderate omission. The tool has 4 well-documented parameters, but behavioral context like rate limits is absent.

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?

Schema coverage is 100% with descriptions for all 4 parameters. The description adds useful semantics beyond the schema, such as the typical query format 'Brand Reference' and explaining the fallback_query parameter. This extra context aids correct parameter usage.

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 retrieves 'Live eBay listings for a watch, as aggregated by WatchCharts marketplace.' It specifies the resource (eBay listings), the verb (search), and the context (watch aggregation). This distinguishes it from sibling tools like search_watches, which likely searches WatchCharts' own database.

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?

No explicit guidance on when to use this tool versus alternatives. The description implies it is for live eBay listings but does not compare with siblings like search_listings or search_watches. The agent could benefit from a statement like 'Use this for current market prices from eBay; use search_watches for WatchCharts catalog data.'

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

search_listingsA

Search/browse WatchCharts Marketplace listings (dealers, Reddit, forums, eBay).

Returns listing_id, title, price, price_rating (Fair/Good/High Price), country, external URL, image. Use get_listing for full details.

ParametersJSON Schema
NameRequiredDescriptionDefault
pageNoPage number
queryNoFree-text search (brand, model, reference)

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4/5.0
Behavior3/5

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

No annotations provided. Description implies read-only search behavior but does not explicitly state safety, auth needs, or rate limits. Action of returning a limited set of fields is disclosed.

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

Conciseness5/5

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

Two sentences, no waste. First sentence states purpose and sources, second lists key return fields and directs to sibling. Front-loaded and efficient.

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

Completeness4/5

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

With 2 parameters fully documented in schema, an output schema present, and a description that explains return fields and usage context, the tool is well-defined. Missing minor details like pagination ordering but sufficient for decision.

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

Parameters3/5

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

Schema description coverage is 100%, so baseline is 3. Description adds minimal extra context by specifying free-text search accepts brand/model/reference, but does not significantly enhance schema meaning.

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?

Clearly states the verb 'Search/browse' and the resource 'WatchCharts Marketplace listings' with explicit sources (dealers, Reddit, forums, eBay). Distinguished from sibling get_listing by noting it returns summary info.

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

Usage Guidelines4/5

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

Explicitly says returns summary fields and directs to use get_listing for full details, providing clear context for when to switch. However, lacks explicit comparison to other siblings like search_ebay.

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

search_modelsA

Search watch models by text (site autocomplete).

Best way to resolve a reference to a watch_id. Returns models with watch_id (id), uuid, brand, brand_id, collection, reference, current price, image.

ParametersJSON Schema
NameRequiredDescriptionDefault
queryYesFree text: brand, collection, reference (e.g. 'daytona 116503')

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4/5.0
Behavior3/5

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

Without annotations, the description lists returned fields (id, uuid, brand, etc.) which implies a non-destructive read operation. However, it does not explicitly state that it is read-only or disclose any potential 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.

Conciseness5/5

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

Two concise sentences that front-load the purpose and immediately provide usage guidance and output details. No extraneous information.

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

Completeness4/5

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

Given the presence of an output schema (not shown but noted), the description adds value by listing fields and specifying usage. It is complete for a simple search tool with one parameter.

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

Parameters3/5

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

Schema coverage is 100% with a well-described query parameter. The description adds no additional meaning beyond what the schema already provides, meeting the baseline expectation.

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 'Search watch models by text (site autocomplete)' and specifies it as the best way to resolve a watch_id, distinguishing it from sibling tools like search_watches and search_listings.

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

Usage Guidelines4/5

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

The description explicitly says 'Best way to resolve a reference to a watch_id', providing clear context for when to use this tool. It does not include exclusions or alternatives but gives a strong usage directive.

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

search_watchesA

Search the WatchCharts market screener (top performers).

Returns structured rows: name, collection, watch_id, url, image, market_price (EUR string), price_trend_pct over period.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoRows per page
startNoPagination offset
periodNoTime window for the price trend column/filter1y
brand_idNoRestrict to one brand id from list_brands (0 = all brands)
price_maxNoMax market price in EUR (e.g. 1000, 5000, 20000)
min_trend_pctNoOnly watches whose price trend over `period` is at least this %

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.8/5.0
Behavior3/5

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

No annotations are provided, so the description carries the burden. It explains the output format but does not disclose behavioral traits such as whether results are filtered to only top performers, data freshness, or any side effects. The mention of 'top performers' hints at filtering but is not explicit.

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

Conciseness5/5

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

Two concise sentences: first sentence states the purpose, second lists the return structure. No extraneous information; front-loaded and efficient.

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

Completeness4/5

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

Given the full schema coverage and presence of an output schema, the description is mostly complete. It lacks explicit mention of pagination behavior or clarification of 'top performers', but overall it provides sufficient context for an AI agent to use the tool.

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

Parameters3/5

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

Schema description coverage is 100%, so the schema fully documents each parameter. The description adds value by explaining the output fields (e.g., market_price as EUR string) but does not enhance parameter understanding beyond the 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 action 'Search' and the resource 'WatchCharts market screener (top performers)', which differentiates it from sibling tools like search_models or search_ebay. The returned fields are explicitly listed.

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 implies usage for searching top performers in the WatchCharts market screener but does not explicitly state when to use this tool versus alternatives (e.g., search_models for model-level data). No when-not guidance is provided.

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.

  1. 15 tool updatesv0.1.0
    • First observedappraise_watch
    • First observedbrowse_watches
    • First observedcount_watches
    • First observedevaluate_deal
    • First observedget_listing
    • First observedget_listings_history
    • First observedget_market_index
    • First observedget_price_history
    • First observedget_watch_info
    • First observedget_watch_sales
    • First observedlist_brands
    • First observedsearch_ebay
    • First observedsearch_listings
    • First observedsearch_models
    • First observedsearch_watches

TDQS

A4.1/5.0

Scored across 15 tools

Disambiguation5/5

Each tool targets a distinct operation or data facet (e.g., appraisal, catalog browsing, price history, marketplace listings, auction records, brand listing). Descriptions clearly differentiate their purposes, leaving no ambiguity.

Naming Consistency5/5

All tools use a consistent `verb_noun` pattern with underscores (e.g., `get_listing`, `search_models`, `list_brands`). Verbs are uniform (get, search, list, browse, count, evaluate, appraise) and no mixing of conventions occurs.

Tool Count5/5

With 15 tools, the surface is well-scoped for a watch data API. It covers catalog, pricing, marketplace, auctions, and deals without being excessive or too sparse.

Completeness5/5

The tool set provides comprehensive read coverage: catalog browsing, model search, price history, market index, appraisal, marketplace listings (general and eBay), auction records, and deal evaluation. There are no obvious missing operations for the domain.

Maintenance

ActivityStale
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    A
    quality
    F
    maintenance
    A comprehensive MCP server for stock analysis and trading insights, including stock screening, fundamental analysis, insider trading, options analysis, social media research, and news analysis.
    10
    75
    MIT
  • A
    license
    A
    quality
    B
    maintenance
    Comprehensive MCP server for real-time stock, cryptocurrency, options, and fundamental analysis, including SEC filings and insider trading data.
    26
    37 npm
    MIT
  • A
    license
    Not graded
    quality
    A
    maintenance
    MCP server providing market data for 15,000+ cryptocurrencies including prices, history, trends, and deep coin metadata via CoinGecko.
    45 npm
    1
    Apache 2.0
  • A
    license
    A
    quality
    B
    maintenance
    MCP server for Magic: The Gathering card prices, deck analysis, sealed product EV calculations, and investment insights, powered by live data from 5 vendors covering 99K+ cards.
    21
    MIT