watchcharts-mcp
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@watchcharts-mcpWhat is the current market price of a Rolex Daytona 116503?"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
watchcharts-mcp
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 |
| Count of watches matching filters |
| Paginated screener results (DataTables format, HTML fragments parsed into JSON) |
| Model/brand autocomplete (pure JSON) |
| Model page: full specs, market/retail price (parsed) |
| Price series, auction sales, historical listings (pure JSON) |
| Overall / per-brand market index since 2017 (pure JSON) |
| Full catalog browse with spec filters (server-rendered, parsed) |
| Live eBay listings aggregation |
| Marketplace listing search (server-rendered, parsed) |
| 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 |
| Screener results: name, collection, watch_id, url, image, market price (EUR), trend % |
| Count matching watches |
| All brands with WatchCharts brand ids |
| Resolve free text ("daytona 116503") to watch_id, uuid, brand, collection, price |
| Full specs (references, complications, case, dial), market + retail price, per-variation prices |
| Auction sale records (Sotheby's, Christie's...) with hammer price |
| Historical sold/unsold listings across eBay, dealers, forums |
| Daily market price series (~1y on free tier) + retail price |
| Overall or per-brand market index, daily since 2017 |
| Filter the 29k+ catalog by specs (dial, diameter, movement, complications...) |
| Live eBay listings: title, seller, price, URL |
| Marketplace listings (dealers, Reddit, forums): price, Fair/Good/High rating, country |
| Listing detail: price, value assessment vs estimate, source, external URL |
| 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 syncClaude Code
claude mcp add watchcharts -- uv run --directory /path/to/watchcharts-mcp watchcharts-mcpClaude 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/fixturesParsers 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-profileso subsequent launches reusecf_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 toolsappraise_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.
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | Watch to appraise, by name or reference (e.g. 'Rolex Daytona 116503') | |
| region | No | Market region: 'Europe', 'North America', 'Asia' | Europe |
| accessory | No | Delivery contents: 'box and papers', 'box only', 'watch only' | box and papers |
| condition | No | Condition label: 'Pre-owned', 'New', 'Unworn' | Pre-owned |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | Page (25 results each) | |
| sort | No | Sort key: '' (default), price_asc, price_desc, random | |
| filters | No | Catalog 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
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| query | No | Free-text search query | |
| period | No | 1y | |
| brand_id | No | Brand id from list_brands (0 = all) | |
| price_max | No | Max market price in EUR | |
| min_trend_pct | No | Min trend % over period |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | Watch being offered, by name or reference (e.g. 'Rolex Daytona 116503') | |
| region | No | Market region: 'Europe', 'North America', 'Asia' | Europe |
| accessory | No | Delivery contents: 'box and papers', 'box only', 'watch only' | box and papers |
| condition | No | Condition for the appraisal: 'Pre-owned', 'New', 'Unworn' | Pre-owned |
| asking_price | Yes | The asking price to evaluate, in the account currency (EUR) | |
| include_appraisal | No | Run the (slower, ~15s) appraisal; if false, uses current market price |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| listing_id | Yes | Marketplace listing id (from search_listings) |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| watch_id | Yes | WatchCharts watch model id | |
| variation_id | No | Narrow to one reference/dial (from get_watch_info variations); 0 = whole model |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| brand_id | No | Brand id from list_brands, or 0 for the Overall Market Index |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| watch_id | Yes | WatchCharts watch model id (from search_watches results) | |
| variation_id | No | Narrow to one reference/dial (from get_watch_info variations); 0 = whole model |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| watch_id | Yes | WatchCharts watch model id |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| watch_id | Yes | WatchCharts watch model id | |
| variation_id | No | Narrow to one reference/dial (from get_watch_info variations); 0 = whole model |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | Search query, typically 'Brand Reference' (e.g. 'Rolex 116503') | |
| country | No | 2-letter country code for the eBay site (IT, US, GB, DE...) | IT |
| watch_id | No | WatchCharts watch id to anchor results (0 = none) | |
| fallback_query | No | Broader fallback query (e.g. 'Rolex Daytona') |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | Page number | |
| query | No | Free-text search (brand, model, reference) |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | Free text: brand, collection, reference (e.g. 'daytona 116503') |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Rows per page | |
| start | No | Pagination offset | |
| period | No | Time window for the price trend column/filter | 1y |
| brand_id | No | Restrict to one brand id from list_brands (0 = all brands) | |
| price_max | No | Max market price in EUR (e.g. 1000, 5000, 20000) | |
| min_trend_pct | No | Only watches whose price trend over `period` is at least this % |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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.
15 tool updates
v0.1.0- First observed
appraise_watch - First observed
browse_watches - First observed
count_watches - First observed
evaluate_deal - First observed
get_listing - First observed
get_listings_history - First observed
get_market_index - First observed
get_price_history - First observed
get_watch_info - First observed
get_watch_sales - First observed
list_brands - First observed
search_ebay - First observed
search_listings - First observed
search_models - First observed
search_watches
TDQS
Scored across 15 tools
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.
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.
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.
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
Related MCP Connectors
Unlock the power of real-time cryptocurrency data with our Crypto Price Insights MCP server.
Crypto market intelligence, token rug-checks, and wallet verification in one MCP server.
Official CoinMarketCap MCP server: real-time crypto prices, market cap, rankings and exchange data.
Official MCP server for Certifier to issue, manage, and track certificates and badges.
Related MCP Servers
- AlicenseAqualityFmaintenanceA comprehensive MCP server for stock analysis and trading insights, including stock screening, fundamental analysis, insider trading, options analysis, social media research, and news analysis.1075MIT
- AlicenseAqualityBmaintenanceComprehensive MCP server for real-time stock, cryptocurrency, options, and fundamental analysis, including SEC filings and insider trading data.2637 npmMIT
- AlicenseNot gradedqualityAmaintenanceMCP server providing market data for 15,000+ cryptocurrencies including prices, history, trends, and deep coin metadata via CoinGecko.45 npm1Apache 2.0
- AlicenseAqualityBmaintenanceMCP 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.21MIT