Caddence
Server Details
Live UK golf equipment prices: retailer offers, price history and deal ratings in GBP.
- Status
- Healthy
- Uptime
- 99.9% over 81 days
- Last Tested
- Transport
- Streamable HTTP · MCP 2025-11-25
- URL
- ChatGPT
- –
- Claude
- –
TDQS
Scored across 6 tools
Each tool targets a distinct facet: catalogue metadata, single-product deal quality, market-wide deals, price history, retailer offers, and search. However, get_deal_intelligence overlaps conceptually with get_price_history (both discuss price trajectory) and get_product_offers (both surface cheapest retailer and buy links), so an agent could occasionally hesitate between them, though the descriptions clarify the boundaries well.
Five tools follow a clean get_<noun> pattern (get_catalog_stats, get_deal_intelligence, get_market_deals, get_price_history, get_product_offers). search_golf_products deviates with a search_ verb, but this is a minor, semantically justified exception rather than a convention clash.
Six tools is well-scoped for a golf price-comparison server, covering metadata, discovery, offers, history, and deals without redundancy or bloat. Each tool earns its place in the workflow.
The surface covers the full discovery-to-purchase lifecycle: filter vocabulary, search, detailed offers with buy_url, price history, and deal scoring. Minor gaps exist (no explicit single-product detail fetch independent of search/offers), but core workflows have no dead ends.
Available Tools
6 toolsget_catalog_statsGet catalogue stats and valid filter valuesARead-onlyIdempotentInspect
Live catalogue totals plus the valid values for search filters (brands, product types, conditions, flexes, hands, price range). Call this before filtered searches if unsure which brand or product_type spellings the catalogue uses.
| Name | Required | Description | Default |
|---|---|---|---|
| context | Yes | Explain why you are calling this tool and how it fits into the user's overall goal. This parameter is used for analytics and user intent tracking. YOU MUST provide 15-25 words (count carefully). NEVER use first person ('I', 'we', 'you') - maintain third-person perspective. NEVER include sensitive information such as credentials, passwords, or personal data. Example (20 words): "Searching across the organization's repositories to find all open issues related to performance complaints and latency issues for team prioritization." |
Output Schema
| Name | Required | Description |
|---|---|---|
| hands | Yes | |
| brands | Yes | |
| flexes | No | |
| retailers | Yes | |
| conditions | Yes | |
| price_range | No | |
| product_types | Yes | |
| retailer_count | Yes | |
| total_products | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, non-destructive, and closed-world behavior, so the safety profile is covered. The description adds real context beyond that: the data is 'live', and the return includes valid enumerations for each filter facet. It says nothing about auth needs or rate limits, keeping it out of the top band.
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 dense sentences with zero filler. The output contents are front-loaded and the usage trigger follows, which is the right ordering for an agent scanning for a routing decision.
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 an output schema present, the description need not explain the return payload, and annotations carry the safety profile. It covers purpose and timing adequately; only minor gaps remain (e.g. whether stats are scoped per-market/currency) that an agent might wonder about.
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?
There is a single 'context' parameter with 100% schema description coverage, so the schema already documents it fully; per the rubric this is a baseline 3. The description adds no additional meaning about the context parameter, and none is needed.
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?
States a specific verb+resource up front ('Live catalogue totals plus the valid values for search filters') and enumerates exactly which facets are covered (brands, product types, conditions, flexes, hands, price range). This clearly distinguishes it from the sibling search/price/offer tools, which fetch records rather than catalogue metadata.
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 to 'call this before filtered searches if unsure which brand or product_type spellings the catalogue uses', giving a concrete trigger condition. It does not name the specific sibling (e.g. search_golf_products) or state when this call is unnecessary, so it stops short of full when/when-not guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_deal_intelligenceGet deal intelligence (CaddenceScore)ARead-onlyIdempotentInspect
Deal-quality assessment for one product: CaddenceScore (0-100 rating of the current best DEAL, not the club), price trajectory vs typical/low/high, used market stats, and per-build availability (condition/flex/loft/hand) with the cheapest retailer and a buy_url purchase link per build. Use this to answer "is this a good price right now?".
| Name | Required | Description | Default |
|---|---|---|---|
| slug | No | Alias for product — pass either | |
| context | Yes | Explain why you are calling this tool and how it fits into the user's overall goal. This parameter is used for analytics and user intent tracking. YOU MUST provide 15-25 words (count carefully). NEVER use first person ('I', 'we', 'you') - maintain third-person perspective. NEVER include sensitive information such as credentials, passwords, or personal data. Example (20 words): "Searching across the organization's repositories to find all open issues related to performance complaints and latency issues for team prioritization." | |
| product | No | Product slug (preferred, from search results) or numeric product id |
Output Schema
| Name | Required | Description |
|---|---|---|
| name | Yes | |
| slug | Yes | |
| used | Yes | |
| brand | Yes | |
| score | Yes | |
| trajectory | Yes | |
| product_url | Yes | Absolute URL |
| availability | Yes | |
| cheapest_new | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, openWorldHint=false and destructiveHint=false, so the safety profile is covered. The description adds useful context about the response shape (cheapest retailer, buy_url purchase link, per-build condition/flex/loft/hand), but says nothing about latency, data freshness, or what happens when a product/build has no offer.
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 core purpose is front-loaded in the opening clause, and the long field enumeration is a single dense sentence rather than filler. It is somewhat run-on, but every element maps to an actual returned field, so little is wasted.
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 read-only lookup with a full output schema and rich annotations, the description covers purpose, scope, and the returned signals adequately. It does not explain the scoring methodology or rating bands, which would help an agent interpret a CaddenceScore of, say, 62.
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 already documents slug/product aliasing and the verbose context parameter; baseline 3 applies. The description's phrase 'for one product' reinforces single-product scoping but adds no format, alias, or id-versus-slug guidance 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?
States a specific resource and scope: 'Deal-quality assessment for one product' with the CaddenceScore 0-100 rating, explicitly noting it rates the DEAL and not the club. It distinguishes itself functionally from get_price_history and get_product_offers by combining trajectory, market stats, and per-build availability, but never names those siblings, so the differentiation is inferred rather than stated.
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?
Gives a clear triggering question ('Use this to answer "is this a good price right now?"'), which tells an agent exactly what user intent should route here. It stops short of naming when NOT to use it or which sibling (get_market_deals, get_price_history, get_product_offers) to prefer for narrower questions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_market_dealsGet verified market dealsARead-onlyIdempotentInspect
Current best-value products across the UK market: largest verified price spreads between retailers (3+ retailers, false-positive filters applied). Good for "what are the best golf deals right now?". Follow up with get_product_offers for purchase links.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| context | Yes | Explain why you are calling this tool and how it fits into the user's overall goal. This parameter is used for analytics and user intent tracking. YOU MUST provide 15-25 words (count carefully). NEVER use first person ('I', 'we', 'you') - maintain third-person perspective. NEVER include sensitive information such as credentials, passwords, or personal data. Example (20 words): "Searching across the organization's repositories to find all open issues related to performance complaints and latency issues for team prioritization." | |
| category | No | Product type filter, e.g. "driver", "iron_set", "putter" |
Output Schema
| Name | Required | Description |
|---|---|---|
| deals | Yes | |
| total | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, destructiveHint=false and openWorldHint=false, so the safety profile is covered; the description adds real behavioral context by disclosing the deal-selection criteria (3+ retailers, false-positive filters) that determine what appears in the results. It does not mention the result cap (limit max 25) or ranking order, which would have pushed it higher.
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 selection criteria and scope lead, with the use-case cue and follow-up guidance trailing in short sentences — no filler. Slightly informal by using a quoted user utterance, but every clause earns its place.
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?
An output schema exists, so return values need no explanation, and the description covers scope, ranking logic, and the natural next step. The main omission is any hint that results are capped/filterable via limit and category, which matters for an agent planning a broad query.
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 67% and the description adds no parameter-level information at all — limit and category are never mentioned, and the product-type filtering implied by category is not acknowledged. Baseline 3 applies because the schema already documents the context parameter thoroughly while the remaining params stay silent in both places.
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?
States a specific resource (current best-value products) with an explicit ranking basis — largest verified price spreads between 3+ retailers after false-positive filtering — and scopes it to the UK market. It also distinguishes itself from the sibling get_product_offers by naming the follow-up intent, so an agent can route correctly without opening either schema.
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?
"Good for 'what are the best golf deals right now?'" gives a concrete triggering use case, and the follow-up pointer to get_product_offers clarifies what this tool is not for (purchase links). No explicit when-not or prerequisite conditions are stated, so it falls short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_price_historyGet price historyARead-onlyIdempotentInspect
Daily lowest/average UK price for one product over a trailing window, plus summary stats (historical low with date, high, trend direction). Optionally scoped to a variant configuration; if the variant series is too thin the backend falls back to product-level history (see scope field).
| Name | Required | Description | Default |
|---|---|---|---|
| days | No | Trailing window in days | |
| flex | No | ||
| hand | No | e.g. "RH" or "LH" | |
| loft | No | ||
| slug | No | Alias for product — pass either | |
| context | Yes | Explain why you are calling this tool and how it fits into the user's overall goal. This parameter is used for analytics and user intent tracking. YOU MUST provide 15-25 words (count carefully). NEVER use first person ('I', 'we', 'you') - maintain third-person perspective. NEVER include sensitive information such as credentials, passwords, or personal data. Example (20 words): "Searching across the organization's repositories to find all open issues related to performance complaints and latency issues for team prioritization." | |
| product | No | Product slug (preferred, from search results) or numeric product id | |
| condition | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| brand | Yes | |
| daily | Yes | |
| scope | Yes | |
| trend | Yes | |
| product | Yes | |
| days_tracked | Yes | |
| low_in_window | Yes | |
| high_in_window | Yes | |
| current_min_price | Yes | |
| retailers_tracked | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare the safe read-only, idempotent profile, but the description adds genuine behavioral context beyond them: the backend falls back to product-level history when the variant series is too thin, and it points the agent to the scope field to detect this. That is meaningful disclosure for a read 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 dense, front-loaded sentences with no filler; the primary output is stated first and the fallback caveat second. Slightly information-packed but every clause earns its place.
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 an output schema present, return values need not be re-explained, and annotations cover the safety profile. The description covers the main output, variant scoping, and the fallback behavior, leaving only minor param gaps undocumented.
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 63%, so several parameters (flex, loft, condition) are undocumented in both places. The description adds context via 'variant configuration' and 'trailing window', mapping loosely to the variant params and days, but does not fully compensate for the coverage gap.
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?
States a specific verb+resource ('Daily lowest/average UK price for one product over a trailing window') and enumerates the returned summary stats. It clearly distinguishes itself as a single-product historical tool, though it never names a sibling to contrast against.
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 explains what the tool returns but gives no explicit when-to-use guidance or alternatives. It never says when to reach for this versus get_deal_intelligence or get_product_offers, leaving selection to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_product_offersGet retailer offers for a productARead-onlyIdempotentInspect
Current UK retailer offers for one product, in-stock first then cheapest, with variant details (shaft, flex, hand, loft, condition). The summary object always gives the cheapest in-stock new offer and the cheapest in-stock used offer, with counts, whatever condition is requested. Used means every second-hand condition (used, refurbished, ex-display); each offer still states its own condition. Set condition to "new" when the shopper wants a new club and "used" for second-hand; the default "all" mixes both. Each offer and each cheapest entry includes buy_url, a Caddence redirect link. Always present buy_url as the purchase link when the user wants to buy; never reconstruct or substitute retailer URLs.
| Name | Required | Description | Default |
|---|---|---|---|
| slug | No | Alias for product — pass either | |
| context | Yes | Explain why you are calling this tool and how it fits into the user's overall goal. This parameter is used for analytics and user intent tracking. YOU MUST provide 15-25 words (count carefully). NEVER use first person ('I', 'we', 'you') - maintain third-person perspective. NEVER include sensitive information such as credentials, passwords, or personal data. Example (20 words): "Searching across the organization's repositories to find all open issues related to performance complaints and latency issues for team prioritization." | |
| product | No | Product slug (preferred, from search results) or numeric product id | |
| condition | No | Which offers to list: "new", "used" (any second-hand condition) or "all" (default; reserves room for both so used stock cannot hide new). Applied before the 30-offer cap. |
Output Schema
| Name | Required | Description |
|---|---|---|
| note | No | |
| offers | Yes | |
| product | Yes | |
| summary | No | |
| returned | No | |
| condition | No | |
| total_offers | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly/idempotent, so the bar is lower; the description nonetheless adds real behavior: result ordering, that the summary always returns cheapest in-stock new and used offers regardless of the requested condition, the definition of 'used' as any second-hand condition, and the buy_url presentation rule. Only pagination/truncation details are left implicit.
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?
Dense but front-loaded: sorting contract first, then summary semantics, then condition guidance, then the buy_url rule. Most sentences carry distinct information, though the buy_url/presentation warning is slightly 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?
For a read-only lookup with a full output schema and complete parameter descriptions, the description covers the non-obvious output dynamics (ordering, summary independence from filter, condition grouping, redirect link usage) that an agent needs to use results correctly.
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 baseline is 3, but the description goes beyond the schema by explaining the intent mapping for condition values and clarifying that 'used' covers refurbished and ex-display while each offer still states its own condition. It adds semantic depth the enum alone does not convey.
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?
States a specific verb and resource with scope ('Current UK retailer offers for one product'), plus an output ordering contract (in-stock first, then cheapest). It is clearly distinguishable from siblings like get_price_history and get_market_deals.
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 tells the agent when to pass condition='new' vs 'used' vs the default 'all', including the shopper-intent condition that selects each. It does not, however, route between this tool and sibling tools such as get_market_deals.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_golf_productsSearch golf productsARead-onlyIdempotentInspect
Search Caddence's UK golf equipment price-comparison catalogue (clubs, balls, bags, shoes, accessories across all major UK golf retailers; prices in GBP, refreshed daily). Returns best current prices with retailer counts. When in_stock is false, price is the last seen price, not a live offer. For retailer offers and purchase links, follow up with get_product_offers using the returned slug. If unsure of valid brand or product_type values, call get_catalog_stats first.
| Name | Required | Description | Default |
|---|---|---|---|
| brand | No | Exact brand filter, e.g. "Titleist" | |
| limit | No | ||
| query | No | Free-text search, e.g. "taylormade qi10 driver" | |
| offset | No | ||
| context | Yes | Explain why you are calling this tool and how it fits into the user's overall goal. This parameter is used for analytics and user intent tracking. YOU MUST provide 15-25 words (count carefully). NEVER use first person ('I', 'we', 'you') - maintain third-person perspective. NEVER include sensitive information such as credentials, passwords, or personal data. Example (20 words): "Searching across the organization's repositories to find all open issues related to performance complaints and latency issues for team prioritization." | |
| on_sale | No | Only products currently below RRP | |
| sort_by | No | ||
| condition | No | ||
| max_price | No | Maximum price in GBP | |
| min_price | No | Minimum price in GBP | |
| product_type | No | Exact type filter, e.g. "driver", "iron_set", "putter", "balls" |
Output Schema
| Name | Required | Description |
|---|---|---|
| total | Yes | |
| products | Yes | |
| returned | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly/idempotent/non-destructive/closed-world, so safety is covered. The description adds genuinely non-obvious behavior: GBP pricing refreshed daily, best current price plus retailer counts, and the key caveat that when in_stock is false the price is a last-seen price rather than a live offer. Rate limits and pagination behavior are still unmentioned.
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?
Four sentences, front-loaded with what is searched before the caveat and the follow-up routing. Each sentence carries distinct information (scope, staleness semantics, handoff, validation path) with no filler.
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?
An output schema exists, so return values need not be explained, and the description adequately frames scope, currency, freshness, and staleness. With 11 parameters at 64% coverage, the gaps are around pagination/sorting/filter interplay, which the description does not close.
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 64%, so the baseline is 3. The description adds meaning for brand and product_type (pointing to get_catalog_stats for valid values) but says nothing about query syntax, sort_by ordering semantics, on_sale vs max_price interaction, or limit/offset pagination.
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?
States a specific verb and resource with domain scope: searching Caddence's UK golf price-comparison catalogue, enumerating covered categories (clubs, balls, bags, shoes, accessories) and currency. It also names the sibling it hands off to (get_product_offers) and the validation sibling (get_catalog_stats), so an agent can distinguish it from siblings without opening schemas.
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?
Explicit routing: use get_product_offers for retailer offers/purchase links, and get_catalog_stats when unsure of valid brand/product_type values. This is clear conditional guidance. It stops short of 5 because it never explains when-not to use this tool versus the other search-ish siblings (get_market_deals, get_deal_intelligence, get_price_history).
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.
6 tool updates
- Changed
get_catalog_stats2 fields changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema" - changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "https://json-schema.org/draft/2020-12/schema", + "additionalProperties": false, + "properties": { + "brands": { + "items": { + "type": "string" + }, + "type": "array" + }, + "conditions": { + "items": { + "type": "string" + }, + "type": "array" + }, + "flexes": { + "items": { + "type": "string" + }, + "type": "array" + }, + "hands": { + "items": { + "type": "string" + }, + "type": "array" + }, + "price_range": { + "anyOf": [ + { + "additionalProperties": {}, + "properties": { + "max": { + "anyOf": [ + { + "description": "Price in GBP", + "type": "number" + }, + { + "type": "null" + } + ] + }, + "min": { + "anyOf": [ + { + "description": "Price in GBP", + "type": "number" + }, + { + "type": "null" + } + ] + } + }, + "required": [ + "min", + "max" + ], + "type": "object" + }, + { + "type": "null" + } + ] + }, + "product_types": { + "items": { + "type": "string" + }, + "type": "array" + }, + "retailer_count": { + "maximum": 9007199254740991, + "minimum": -9007199254740991, + "type": "integer" + }, + "retailers": { + "items": { + "type": "string" + }, + "type": "array" + }, + "total_products": { + "maximum": 9007199254740991, + "minimum": -9007199254740991, + "type": "integer" + } + }, + "required": [ + "total_products", + "retailer_count", + "retailers", + "brands", + "product_types", + "conditions", + "hands" + ], + "type": "object" +}
- Changed
get_deal_intelligence2 fields changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema" - changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "https://json-schema.org/draft/2020-12/schema", + "additionalProperties": false, + "properties": { + "availability": { + "items": { + "additionalProperties": {}, + "properties": { + "buy_url": { + "anyOf": [ + { + "description": "Caddence redirect link (https://caddence.golf/go?...&src=mcp). Present this as the purchase link.", + "type": "string" + }, + { + "type": "null" + } + ] + }, + "cheapest_retailer": { + "type": [ + "string", + "null" + ] + }, + "condition": { + "type": [ + "string", + "null" + ] + }, + "flex": { + "type": [ + "string", + "null" + ] + }, + "from_price": { + "description": "Price in GBP", + "type": "number" + }, + "hand": { + "type": [ + "string", + "null" + ] + }, + "loft": { + "type": [ + "number", + "null" + ] + }, + "retailer_count": { + "maximum": 9007199254740991, + "minimum": -9007199254740991, + "type": "integer" + } + }, + "required": [ + "condition", + "flex", + "loft", + "hand", + "retailer_count", + "from_price", + "cheapest_retailer", + "buy_url" + ], + "type": "object" + }, + "type": "array" + }, + "brand": { + "type": "string" + }, + "cheapest_new": { + "anyOf": [ + { + "additionalProperties": {}, + "properties": { + "price": { + "description": "Price in GBP", + "type": "number" + }, + "retailer": { + "type": "string" + } + }, + "required": [ + "price", + "retailer" + ], + "type": "object" + }, + { + "type": "null" + } + ] + }, + "name": { + "type": "string" + }, + "product_url": { + "description": "Absolute URL", + "type": "string" + }, + "score": { + "additionalProperties": {}, + "properties": { + "components": { + "anyOf": [ + { + "additionalProperties": {}, + "propertyNames": { + "type": "string" + }, + "type": "object" + }, + { + "type": "null" + } + ] + }, + "flag": { + "type": [ + "string", + "null" + ] + }, + "tier": { + "type": [ + "string", + "null" + ] + }, + "value": { + "type": [ + "number", + "null" + ] + } + }, + "required": [ + "value", + "tier", + "flag", + "components" + ], + "type": "object" + }, + "slug": { + "type": "string" + }, + "trajectory": { + "additionalProperties": {}, + "properties": { + "change_7d": { + "type": [ + "number", + "null" + ] + }, + "change_since_start": { + "type": [ + "number", + "null" + ] + }, + "high": { + "anyOf": [ + { + "description": "Price in GBP", + "type": "number" + }, + { + "type": "null" + } + ] + }, + "low": { + "anyOf": [ + { + "description": "Price in GBP", + "type": "number" + }, + { + "type": "null" + } + ] + }, + "low_date": { + "type": [ + "string", + "null" + ] + }, + "sale_count": { + "anyOf": [ + { + "maximum": 9007199254740991, + "minimum": -9007199254740991, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "today": { + "anyOf": [ + { + "description": "Price in GBP", + "type": "number" + }, + { + "type": "null" + } + ] + }, + "typical": { + "anyOf": [ + { + "description": "Price in GBP", + "type": "number" + }, + { + "type": "null" + } + ] + }, + "typical_low": { + "anyOf": [ + { + "description": "Price in GBP", + "type": "number" + }, + { + "type": "null" + } + ] + }, + "window_days": { + "anyOf": [ + { + "maximum": 9007199254740991, + "minimum": -9007199254740991, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "window_start": { + "type": [ + "string", + "null" + ] + } + }, + "type": "object" + }, + "used": { + "anyOf": [ + { + "additionalProperties": {}, + "properties": { + "avg_price": { + "description": "Price in GBP", + "type": "number" + }, + "listings": { + "maximum": 9007199254740991, + "minimum": -9007199254740991, + "type": "integer" + }, + "min_price": { + "description": "Price in GBP", + "type": "number" + }, + "retention_pct": { + "type": [ + "number", + "null" + ] + } + }, + "required": [ + "min_price", + "avg_price", + "listings", + "retention_pct" + ], + "type": "object" + }, + { + "type": "null" + } + ] + } + }, + "required": [ + "name", + "brand", + "slug", + "product_url", + "score", + "cheapest_new", + "trajectory", + "used", + "availability" + ], + "type": "object" +}
- Changed
get_market_deals2 fields changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema" - changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "https://json-schema.org/draft/2020-12/schema", + "additionalProperties": false, + "properties": { + "deals": { + "items": { + "additionalProperties": false, + "properties": { + "brand": { + "type": "string" + }, + "category": { + "type": [ + "string", + "null" + ] + }, + "name": { + "type": "string" + }, + "price_from": { + "description": "Price in GBP", + "type": "number" + }, + "price_to": { + "description": "Price in GBP", + "type": "number" + }, + "product_url": { + "description": "Absolute URL", + "type": "string" + }, + "retailer_count": { + "maximum": 9007199254740991, + "minimum": -9007199254740991, + "type": "integer" + }, + "savings_gbp": { + "description": "Price in GBP", + "type": "number" + }, + "savings_pct": { + "type": "number" + }, + "slug": { + "type": "string" + } + }, + "required": [ + "name", + "brand", + "slug", + "category", + "price_from", + "price_to", + "savings_gbp", + "savings_pct", + "retailer_count", + "product_url" + ], + "type": "object" + }, + "type": "array" + }, + "total": { + "maximum": 9007199254740991, + "minimum": -9007199254740991, + "type": "integer" + } + }, + "required": [ + "total", + "deals" + ], + "type": "object" +}
- Changed
get_price_history2 fields changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema" - changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "https://json-schema.org/draft/2020-12/schema", + "additionalProperties": false, + "properties": { + "brand": { + "type": [ + "string", + "null" + ] + }, + "current_min_price": { + "anyOf": [ + { + "description": "Price in GBP", + "type": "number" + }, + { + "type": "null" + } + ] + }, + "daily": { + "items": { + "additionalProperties": false, + "properties": { + "avg": { + "description": "Price in GBP", + "type": "number" + }, + "date": { + "type": "string" + }, + "min": { + "description": "Price in GBP", + "type": "number" + } + }, + "required": [ + "date", + "min", + "avg" + ], + "type": "object" + }, + "type": "array" + }, + "days_tracked": { + "maximum": 9007199254740991, + "minimum": -9007199254740991, + "type": "integer" + }, + "high_in_window": { + "anyOf": [ + { + "description": "Price in GBP", + "type": "number" + }, + { + "type": "null" + } + ] + }, + "low_in_window": { + "anyOf": [ + { + "additionalProperties": false, + "properties": { + "date": { + "type": "string" + }, + "price": { + "description": "Price in GBP", + "type": "number" + } + }, + "required": [ + "price", + "date" + ], + "type": "object" + }, + { + "type": "null" + } + ] + }, + "product": { + "type": [ + "string", + "null" + ] + }, + "retailers_tracked": { + "maximum": 9007199254740991, + "minimum": -9007199254740991, + "type": "integer" + }, + "scope": { + "type": "string" + }, + "trend": { + "type": "string" + } + }, + "required": [ + "product", + "brand", + "current_min_price", + "low_in_window", + "high_in_window", + "trend", + "days_tracked", + "retailers_tracked", + "scope", + "daily" + ], + "type": "object" +}
- Changed
get_product_offers3 fields changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema" - added
Input schema / properties / conditionAdded value: +{ + "description": "Which offers to list: \"new\", \"used\" (any second-hand condition) or \"all\" (default; reserves room for both so used stock cannot hide new). Applied before the 30-offer cap.", + "enum": [ + "new", + "used", + "all" + ], + "type": "string" +} - changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "https://json-schema.org/draft/2020-12/schema", + "additionalProperties": false, + "properties": { + "condition": { + "enum": [ + "new", + "used", + "all" + ], + "type": "string" + }, + "note": { + "type": "string" + }, + "offers": { + "items": { + "additionalProperties": false, + "properties": { + "buy_url": { + "description": "Caddence redirect link (https://caddence.golf/go?...&src=mcp). Present this as the purchase link.", + "type": "string" + }, + "condition": { + "type": "string" + }, + "condition_grade": { + "type": [ + "string", + "null" + ] + }, + "in_stock": { + "type": "boolean" + }, + "is_deal": { + "type": "boolean" + }, + "last_checked_at": { + "type": [ + "string", + "null" + ] + }, + "original_price": { + "anyOf": [ + { + "description": "Price in GBP", + "type": "number" + }, + { + "type": "null" + } + ] + }, + "price": { + "description": "Price in GBP", + "type": "number" + }, + "retailer": { + "type": "string" + }, + "variant": { + "type": [ + "string", + "null" + ] + } + }, + "required": [ + "variant", + "condition", + "condition_grade", + "retailer", + "price", + "original_price", + "in_stock", + "is_deal", + "last_checked_at", + "buy_url" + ], + "type": "object" + }, + "type": "array" + }, + "product": { + "additionalProperties": false, + "properties": { + "brand": { + "type": "string" + }, + "in_stock": { + "type": "boolean" + }, + "min_price": { + "anyOf": [ + { + "description": "Price in GBP", + "type": "number" + }, + { + "type": "null" + } + ] + }, + "name": { + "type": "string" + }, + "product_type": { + "type": [ + "string", + "null" + ] + }, + "product_url": { + "description": "Absolute URL", + "type": "string" + }, + "rrp": { + "anyOf": [ + { + "description": "Price in GBP", + "type": "number" + }, + { + "type": "null" + } + ] + }, + "slug": { + "type": "string" + }, + "variant_count": { + "maximum": 9007199254740991, + "minimum": -9007199254740991, + "type": "integer" + } + }, + "required": [ + "name", + "brand", + "slug", + "product_type", + "min_price", + "rrp", + "variant_count", + "in_stock", + "product_url" + ], + "type": "object" + }, + "returned": { + "maximum": 9007199254740991, + "minimum": -9007199254740991, + "type": "integer" + }, + "summary": { + "additionalProperties": false, + "properties": { + "new": { + "additionalProperties": false, + "properties": { + "cheapest_in_stock": { + "anyOf": [ + { + "additionalProperties": false, + "properties": { + "buy_url": { + "description": "Caddence redirect link (https://caddence.golf/go?...&src=mcp). Present this as the purchase link.", + "type": "string" + }, + "condition": { + "type": "string" + }, + "condition_grade": { + "type": [ + "string", + "null" + ] + }, + "price": { + "description": "Price in GBP", + "type": "number" + }, + "retailer": { + "type": "string" + }, + "variant": { + "type": [ + "string", + "null" + ] + } + }, + "required": [ + "price", + "retailer", + "variant", + "condition", + "condition_grade", + "buy_url" + ], + "type": "object" + }, + { + "type": "null" + } + ] + }, + "offers_in_stock": { + "maximum": 9007199254740991, + "minimum": -9007199254740991, + "type": "integer" + }, + "offers_total": { + "maximum": 9007199254740991, + "minimum": -9007199254740991, + "type": "integer" + } + }, + "required": [ + "offers_total", + "offers_in_stock", + "cheapest_in_stock" + ], + "type": "object" + }, + "used": { + "additionalProperties": false, + "properties": { + "cheapest_in_stock": { + "anyOf": [ + { + "additionalProperties": false, + "properties": { + "buy_url": { + "description": "Caddence redirect link (https://caddence.golf/go?...&src=mcp). Present this as the purchase link.", + "type": "string" + }, + "condition": { + "type": "string" + }, + "condition_grade": { + "type": [ + "string", + "null" + ] + }, + "price": { + "description": "Price in GBP", + "type": "number" + }, + "retailer": { + "type": "string" + }, + "variant": { + "type": [ + "string", + "null" + ] + } + }, + "required": [ + "price", + "retailer", + "variant", + "condition", + "condition_grade", + "buy_url" + ], + "type": "object" + }, + { + "type": "null" + } + ] + }, + "offers_in_stock": { + "maximum": 9007199254740991, + "minimum": -9007199254740991, + "type": "integer" + }, + "offers_total": { + "maximum": 9007199254740991, + "minimum": -9007199254740991, + "type": "integer" + } + }, + "required": [ + "offers_total", + "offers_in_stock", + "cheapest_in_stock" + ], + "type": "object" + } + }, + "required": [ + "new", + "used" + ], + "type": "object" + }, + "total_offers": { + "maximum": 9007199254740991, + "minimum": -9007199254740991, + "type": "integer" + } + }, + "required": [ + "product", + "offers" + ], + "type": "object" +}
- Changed
search_golf_products3 fields changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema" - added
Input schema / properties / offset / maximumAdded value: +9007199254740991 - changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "https://json-schema.org/draft/2020-12/schema", + "additionalProperties": false, + "properties": { + "products": { + "items": { + "additionalProperties": false, + "properties": { + "brand": { + "type": "string" + }, + "conditions": { + "items": { + "type": "string" + }, + "type": "array" + }, + "in_stock": { + "type": "boolean" + }, + "name": { + "type": "string" + }, + "new_from": { + "anyOf": [ + { + "description": "Price in GBP", + "type": "number" + }, + { + "type": "null" + } + ] + }, + "price": { + "anyOf": [ + { + "description": "Price in GBP", + "type": "number" + }, + { + "type": "null" + } + ] + }, + "product_type": { + "type": [ + "string", + "null" + ] + }, + "product_url": { + "description": "Absolute URL", + "type": "string" + }, + "retailer_count": { + "maximum": 9007199254740991, + "minimum": -9007199254740991, + "type": "integer" + }, + "rrp": { + "anyOf": [ + { + "description": "Price in GBP", + "type": "number" + }, + { + "type": "null" + } + ] + }, + "rrp_discount_pct": { + "type": [ + "number", + "null" + ] + }, + "slug": { + "type": "string" + }, + "used_from": { + "anyOf": [ + { + "description": "Price in GBP", + "type": "number" + }, + { + "type": "null" + } + ] + } + }, + "required": [ + "name", + "brand", + "slug", + "product_type", + "price", + "rrp", + "rrp_discount_pct", + "new_from", + "used_from", + "conditions", + "retailer_count", + "in_stock", + "product_url" + ], + "type": "object" + }, + "type": "array" + }, + "returned": { + "maximum": 9007199254740991, + "minimum": -9007199254740991, + "type": "integer" + }, + "total": { + "maximum": 9007199254740991, + "minimum": -9007199254740991, + "type": "integer" + } + }, + "required": [ + "total", + "returned", + "products" + ], + "type": "object" +}
3 tool updates
- Changed
get_deal_intelligence2 fields changed- added
Input schema / properties / slugAdded value: +{ + "description": "Alias for product — pass either", + "minLength": 1, + "type": "string" +} - changed
Input schema / requiredPrevious value: -[ - "product", - "context" -]New value: +[ + "context" +]
- Changed
get_price_history2 fields changed- added
Input schema / properties / slugAdded value: +{ + "description": "Alias for product — pass either", + "minLength": 1, + "type": "string" +} - changed
Input schema / requiredPrevious value: -[ - "product", - "context" -]New value: +[ + "context" +]
- Changed
get_product_offers2 fields changed- added
Input schema / properties / slugAdded value: +{ + "description": "Alias for product — pass either", + "minLength": 1, + "type": "string" +} - changed
Input schema / requiredPrevious value: -[ - "product", - "context" -]New value: +[ + "context" +]
6 tool updates
- First observed
get_catalog_stats - First observed
get_deal_intelligence - First observed
get_market_deals - First observed
get_price_history - First observed
get_product_offers - First observed
search_golf_products
Related MCP Connectors
Live UK golf prices, genuine price drops, handicap maths and golf society tools.
Golf equipment catalog, live retailer prices and daily price history. Keyless search, free key.
Compare products, prices and current offers across UK retailers to find the best deal.
Espresso gear price history: live Amazon prices, 2+ years of daily data, BUY calls at verified lows.
Related MCP Servers
- AlicenseAqualityBmaintenanceSearches UK electronics products across multiple retailers, compares prices, and provides purchase links.2136 npmMIT
- FlicenseNot gradedqualityCmaintenanceEnables AI agents to search and compare live UK product prices from marketplaces like eBay and Amazon, returning normalised JSON with direct buy links.-
- FlicenseNot gradedqualityBmaintenanceLive PC game key prices: the lowest listed price for a game across official stores and key stores (by name, Steam app ID or Steam URL, or up to 50 games at once), with a link to the full comparison.-
- AlicenseNot gradedqualityFmaintenanceEnables AI models to find the best online deals by browsing and interacting with multiple shopping platforms like Amazon and eBay across various regions. It uses Playwright to automate searches and retrieve product information from compatible e-commerce and deal-tracking websites.11 npm3MIT
Glama MCP Gateway
Add one secure layer between your agents and this server.