Skip to main content
Glama

Server Details

Fragrance catalogue with verdicts, similarity scores, scent profiles, drydowns and local prices.

Ownership verified
Status
Healthy
Uptime
99.9% over 46 days
Last Tested
Transport
Streamable HTTP · MCP 2025-11-25
URL
ChatGPT
–
Claude
–

TDQS

A4.6/5.0

Scored across 6 tools

Disambiguation5/5

Each tool occupies a distinct slot: search resolves names, get_fragrance gives the verdict/price snapshot, get_scent_profile covers development, compare is head-to-head, find_similar needs an anchor, recommend needs no anchor. Descriptions explicitly route the agent between near-neighbours (compare vs find_similar, get vs get_scent_profile, find_similar vs recommend), so misselection is unlikely.

Naming Consistency5/5

All six tools follow a clean verb_noun snake_case pattern: search_fragrances, get_fragrance, get_scent_profile, compare_fragrances, find_similar_fragrances, recommend_fragrances. The verb choice also encodes the action (search vs get vs compare vs find vs recommend) rather than being decorative.

Tool Count5/5

Six tools is tight and well-scoped for a fragrance lookup/comparison/recommendation service, with no filler entries. Each tool maps to a distinct user intent, so the surface earns its size.

Completeness4/5

The core lifecycle is covered: resolve a name, inspect it, inspect its development, compare two, find alternatives, and recommend from constraints. The main gap is discovery without a starting point, such as browsing a brand's lineup or listing fragrances by note/house, which an agent can only work around via constrained recommendations.

Available Tools

6 tools
compare_fragrancesCompare Two FragrancesA
Read-onlyIdempotent
Inspect

Compare exactly two fragrances side by side using ScentVerdict's own note data: which notes they share, which differ, both verdicts, and both prices for the user's country. Use this whenever the user is choosing between two named fragrances, or asks which of two is better, or how two differ. Use find_similar_fragrances instead when they want alternatives to one fragrance rather than a head to head.

NameRequiredDescriptionDefault
slugAYesSlug of the first fragrance.
slugBYesSlug of the second fragrance.
countryNoThe user's country as an ISO 3166-1 alpha-2 code, for example US, DE or GB. Prices are for this country, in the shop's own currency. Pass it whenever you know where the user is. When omitted, the client's location hint is used if it sent one, otherwise GB.

Output Schema

NameRequiredDescription
aYesThe first fragrance.
bYesThe second fragrance.
errorYesSet when the comparison could not be completed.
marketNoThe country the prices in this result are for, its currency, and how it was chosen.
onlyInAYesNotes only in the first.
onlyInBYesNotes only in the second.
notFoundYesSet when either fragrance is not in the catalogue.
sharedNotesYesNotes present in both.
comparisonUrlYesCanonical URL of the comparison page.

TDQS

A4.5/5.0
Behavior4/5

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

Annotations already cover the safety profile (readOnly, idempotent, non-destructive, closed-world). The description adds useful context beyond them: the comparison uses ScentVerdict's own note data and prices are scoped to the user's country. It doesn't disclose failure modes (e.g., what happens with an unknown slug), so it stops short of a 5.

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

Conciseness5/5

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

Three tight sentences, front-loaded with what the tool returns and followed by when-to-use and the sibling alternative. Every sentence earns its place with no redundancy.

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

Completeness5/5

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

An output schema exists, so return values need no further explanation, and the description still briefly summarizes them. With annotations covering safety and full schema coverage, nothing an agent needs to call this correctly is missing.

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

Parameters3/5

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

Schema description coverage is 100%, so slugA, slugB and country are already fully documented in the schema. The description reinforces the country-scoped pricing and the 'exactly two' cardinality but adds no syntax or format detail beyond the schema, making the baseline 3 correct.

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

Purpose5/5

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

States a specific verb (compare) and resource (exactly two fragrances) and enumerates the outputs: shared notes, differing notes, both verdicts, both prices. An agent can distinguish this from find_similar_fragrances 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.

Usage Guidelines5/5

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

Explicitly names the trigger scenarios (user choosing between two named fragrances, asking which is better, how two differ) and names the alternative sibling find_similar_fragrances with the condition that selects it (wanting alternatives to one fragrance rather than a head-to-head).

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

find_similar_fragrancesFind Similar FragrancesA
Read-onlyIdempotent
Inspect

Find fragrances similar to one the user already knows, optionally steered in a direction such as cheaper, fresher, longer lasting or less sweet. Use this whenever the user names a fragrance and wants something like it: a cheaper alternative, a budget version, something that smells similar, or a gift for someone whose current fragrance they know ('he wears X, what else would suit him'). Each match carries a similarity score computed by ScentVerdict for that specific pair. The cheaper direction lists pairings ScentVerdict has curated first, then similar fragrances priced below the anchor where we hold its price. Each match carries its bottle price for the user's country, in the shop's own currency. Use recommend_fragrances instead when the user names no fragrance to anchor on.

NameRequiredDescriptionDefault
limitNoMaximum results. Default 5, maximum 10.
countryNoThe user's country as an ISO 3166-1 alpha-2 code, for example US, DE or GB. Prices are for this country, in the shop's own currency. Pass it whenever you know where the user is. When omitted, the client's location hint is used if it sent one, otherwise GB.
directionNoHow to steer results away from the anchor. Defaults to the closest overall match.Similar
anchorSlugYesSlug of the fragrance to anchor on. Use search_fragrances first if you do not have one.

Output Schema

NameRequiredDescription
marketNoThe country the prices in this result are for, its currency, and how it was chosen.
reasonYesWhy the result set is empty. Null when results were found.
resultsYesRanked matches, closest first. May be empty.
notFoundNoSet when the anchor fragrance is not in the catalogue.
directionYesHow results were steered away from the anchor.
anchorSlugYesThe fragrance the results were derived from.

TDQS

A4.6/5.0
Behavior4/5

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

Annotations already cover the safety profile (readOnly, idempotent, non-destructive), so the bar is lower. The description adds real behavioral context beyond that: each match carries a per-pair similarity score computed by ScentVerdict, the Cheaper direction ranks curated pairings first and then sub-anchor-price results, and prices are returned in the shop's own currency for the user's country.

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

Conciseness4/5

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

It is longer than most definitions, but front-loaded with purpose followed by usage, behavior and the exclusion rule. Most sentences earn their place; the closing price-currency sentence and the curated-pairings sentence add detail that could be tightened but is genuinely useful.

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

Completeness5/5

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

With four parameters, full schema coverage and an output schema that covers return values, the description supplies everything else an agent needs: when to call it, how `direction` behaves, what impacts price output, and which sibling to use instead. Nothing material is missing.

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

Parameters4/5

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

Schema coverage is 100%, so the baseline would be 3. The description goes further by explaining the semantics of `direction` (how results are steered away from the anchor, with concrete directions like cheaper/fresher/longer lasting) and what `country` affects (pricing in the shop's currency), adding meaning beyond the schema text.

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

Purpose5/5

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

The description states a specific verb and resource ('Find fragrances similar to one the user already knows') and explicitly differentiates itself from the sibling recommend_fragrances. An agent can tell it apart from search_fragrances and recommend_fragrances without opening any schema.

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

Usage Guidelines5/5

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

It gives concrete when-to-use scenarios (cheaper alternative, budget version, gift for someone whose fragrance is known) and names the exclusion condition: use recommend_fragrances when the user names no anchor. This is explicit routing rather than implied usage.

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

get_fragranceLook Up a FragranceA
Read-onlyIdempotent
Inspect

Look up one perfume or fragrance in ScentVerdict's catalogue: its notes, ScentVerdict's own verdict, concentration, launch year, and the lowest current price for a full-size bottle for the user's country, in the shop's own currency. Use this whenever the user names a fragrance and asks what it is, what it smells like, what is in it, what it costs, or whether it is any good. Use search_fragrances first if the name is partial or could mean several variants. Use get_scent_profile instead when the question is about how it develops over the wear.

NameRequiredDescriptionDefault
slugYesThe fragrance slug, for example bleu-de-chanel. Use search_fragrances if you do not have one.
countryNoThe user's country as an ISO 3166-1 alpha-2 code, for example US, DE or GB. Prices are for this country, in the shop's own currency. Pass it whenever you know where the user is. When omitted, the client's location hint is used if it sent one, otherwise GB.

Output Schema

NameRequiredDescription
errorYesSet when the lookup could not be completed. Explain this rather than guessing.
marketNoThe country the prices in this result are for, its currency, and how it was chosen.
notFoundYesSet when the fragrance is not in the catalogue. Carries suggestions.
fragranceYesThe fragrance. Null when not found or on error.

TDQS

A4.4/5.0
Behavior4/5

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

Annotations already declare readOnly, idempotent, non-destructive and closed-world, so the safety profile is covered. The description adds genuine context beyond that: the price is the lowest for a full-size bottle, scoped to the user's country and expressed in the shop's own currency, which tells the agent what the returned price actually means. No contradiction with annotations.

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

Conciseness5/5

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

Front-loads the scope and payload, then moves to usage conditions and alternatives in three tight sentences with no filler. Every clause carries information an agent would act on.

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

Completeness4/5

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

With an output schema present, return values need no explanation, and the description covers purpose, triggers and the two most likely alternative tools. It does not distinguish itself from compare_fragrances, which an agent might reach for on a price question, leaving a small routing gap.

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

Parameters3/5

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

Schema coverage is 100% and the schema already documents the slug example and the country ISO-code default/fallback logic. The description restates the country-to-price relationship but adds no new syntax or format guidance, so the baseline 3 applies.

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

Purpose5/5

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

States a specific verb and resource ('look up one perfume or fragrance in ScentVerdict's catalogue') and then enumerates exactly what is returned: notes, verdict, concentration, launch year, lowest current price. It names two siblings it is not (search_fragrances, get_scent_profile), so an agent can pick it without opening another schema.

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

Usage Guidelines5/5

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

Gives an explicit trigger ('whenever the user names a fragrance and asks what it is, what it smells like, what is in it, what it costs, or whether it is any good') plus two concrete alternatives with the conditions that select them: search_fragrances for partial or ambiguous names, get_scent_profile for wear-time questions.

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

get_scent_profileScent Profile and DrydownA
Read-onlyIdempotent
Inspect

Get how a fragrance develops over the wear: opening, heart and base phases, the notes in each, and how many hours each note persists on skin. Use this when the user asks how something evolves, how long it lasts, how it changes through the day, or what the drydown is like. The per-note hours are values held by ScentVerdict against each note rather than a general impression of the fragrance, and they are estimates. Use get_fragrance instead for the verdict, price and general description.

NameRequiredDescriptionDefault
slugYesThe fragrance slug. Use search_fragrances if you do not have one.

Output Schema

NameRequiredDescription
urlYesCanonical page URL, carrying the scent wheel and drydown timeline.
nameYesFragrance name.
slugYesStable identifier.
errorYesSet when the profile could not be read.
phasesYesNotes grouped by phase: top, heart, base.
notFoundYesSet when the fragrance is not in the catalogue.
longestLastingNoteHoursYesHours the longest-lasting note persists. Null when unknown.

TDQS

A4.5/5.0
Behavior4/5

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

Annotations already declare readOnlyHint, idempotentHint, and destructiveHint, so the safety profile is covered. The description adds valuable context beyond that: the per-note hours are data held by ScentVerdict rather than a general impression, and they are estimates. This caveat helps the agent set expectations about data provenance and reliability.

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

Conciseness5/5

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

Three sentences, each earning its place: the first defines the tool's behavior, the second gives usage triggers, and the third both qualifies the data and redirects to an alternative. There is no fluff or redundancy, and the most important information is front-loaded.

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

Completeness5/5

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

Given a single parameter, a clear output schema, and comprehensive annotations, the description covers all needed behavioral caveats (estimates, data source) and usage routing. The agent can invoke the tool correctly without further clarification. Nothing essential is missing.

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

Parameters3/5

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

Schema description coverage is 100%, and the only parameter, slug, is already documented with 'Use search_fragrances if you do not have one.' The description does not add parameter detail beyond the schema, so the baseline of 3 applies. There is no gap for the description to compensate for.

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

Purpose5/5

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

The description states a specific verb and resource: 'Get how a fragrance develops over the wear: opening, heart and base phases, the notes in each, and how many hours each note persists on skin.' It clearly differentiates from get_fragrance by naming what that sibling covers instead. This leaves no ambiguity about the tool's scope.

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

Usage Guidelines5/5

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

Explicit when-to-use guidance is given: 'Use this when the user asks how something evolves, how long it lasts, how it changes through the day, or what the drydown is like.' It also provides an explicit alternative: 'Use get_fragrance instead for the verdict, price and general description.' This fully covers routing between siblings.

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

recommend_fragrancesRecommend FragrancesA
Read-onlyIdempotent
Inspect

Recommend fragrances matching what the user describes: season, occasion, budget, strength, staying power and notes they like. Use this when the user wants a suggestion but names no fragrance to work from - for example something for winter, for the office, or under a budget. Season, occasion and intensity are scored numerically per fragrance in ScentVerdict, and the budget is applied against current bottle prices for the user's country, so the constraints are filtered rather than approximated. Each priced row carries its price in the shop's own currency, and the bottle size and price per millilitre wherever the retailer published a size. Pass as many of the constraints as the user gave; all are optional. Use find_similar_fragrances instead when they name a fragrance to anchor on.

NameRequiredDescriptionDefault
limitNoMaximum results. Default 5, maximum 10.
seasonNoSeason the fragrance is for.
countryNoThe user's country as an ISO 3166-1 alpha-2 code, for example US, DE or GB. Prices are for this country, in the shop's own currency. Pass it whenever you know where the user is. When omitted, the client's location hint is used if it sent one, otherwise GB.
occasionNoOccasion the fragrance is for.
budgetMaxNoMaximum price for a full-size bottle, in the currency of the user's country (USD for US, EUR for DE, GBP for GB). Only prices in that currency are filtered.
intensityNoHow strong the fragrance should be.
noteLovedNoA single note the user likes, for example vanilla.
longevityMinNoMinimum staying power.
genderPresentationNoWho the fragrance presents as.

Output Schema

NameRequiredDescription
caveatYesCaveat about how the constraints were applied. Null when there is nothing to qualify.
marketNoThe country the prices in this result are for, its currency, and how it was chosen.
resultsYesMatching fragrances. May be empty when the constraints are too narrow.

TDQS

A4.6/5.0
Behavior4/5

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

Annotations already declare readOnly, idempotent and non-destructive, so safety needs no repeating. The description adds real mechanism not present in structured fields: season/occasion/intensity are scored numerically in ScentVerdict, budget is applied against current country-specific bottle prices, and constraints are filtered rather than approximated. It stops short of describing ranking or pagination behaviour.

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

Conciseness4/5

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

It is front-loaded correctly: purpose first, then when to use, then mechanics, then the sibling redirect. All sentences carry information, though the price-per-millilitre and retailer-size detail slightly duplicates what the output schema would return.

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

Completeness5/5

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

For a 9-parameter, zero-required tool with an output schema present, the description covers the routing decision, the optionality of all constraints, and how the pricing/season filtering actually works. Nothing an agent needs to invoke it correctly is missing.

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

Parameters4/5

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

Schema coverage is 100%, so the baseline is 3. The description adds meaning beyond the schema by stressing that every constraint is optional and that as many as the user provided should be passed, and by clarifying that the budget is matched against live bottle prices in the user's own currency rather than a converted figure.

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

Purpose5/5

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

The description gives a specific verb (recommend) and resource (fragrances) plus the exact inputs it matches on: season, occasion, budget, strength, staying power and notes. It explicitly distinguishes itself from find_similar_fragrances, so an agent can route between the two 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.

Usage Guidelines5/5

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

It states the triggering condition plainly ('when the user wants a suggestion but names no fragrance to work from'), gives concrete examples (winter, office, under a budget), and names the alternative tool with the condition that selects it ('use find_similar_fragrances instead when they name a fragrance to anchor on').

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

search_fragrancesSearch Fragrances by NameA
Read-onlyIdempotent
Inspect

Resolve a perfume or fragrance name to catalogue entries. Call this FIRST whenever a name is partial, misspelled, or could mean more than one product, then pass the returned slug to another tool. Many fragrances share a name across concentrations and launch years, and flankers hide behind qualifiers, so guessing the variant silently produces the wrong answer for the rest of the conversation. Results carry concentration and launch year precisely so you can tell them apart, and you should offer the user the choice when several match. Use get_fragrance instead when you already hold an exact slug.

NameRequiredDescriptionDefault
limitNoMaximum results. Default 8, maximum 20.
queryYesName or partial name to look up. Minimum 2 characters.

Output Schema

NameRequiredDescription
resultYes

TDQS

A4.9/5.0
Behavior5/5

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

Annotations already establish that this is a read-only, idempotent, non-destructive search. The description adds meaningful behavioral context: shared names across concentrations and years, hidden flankers, the risk of silently choosing the wrong variant, and the need to offer users a choice when several matches appear.

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

Conciseness5/5

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

The description is front-loaded with the core action and urgency, then moves through rationale, result interpretation, and the alternative tool. Every sentence contributes to correct tool selection or invocation.

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

Completeness5/5

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

Given that an output schema exists, the description need not document return fields in detail. It still explains that results carry concentration and launch year to disambiguate matches, which is exactly the context an agent needs for this ambiguous-search workflow.

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

Parameters4/5

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

Schema coverage is 100%, so the input schema already documents both parameters. The description still adds useful query semantics, clarifying that names may be partial or misspelled and that returned slugs are meant to feed subsequent tools; it does not add much on the limit parameter, but the schema covers that adequately.

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

Purpose5/5

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

The description gives a specific verb and resource: resolve a perfume or fragrance name to catalogue entries. It also explicitly distinguishes this tool from get_fragrance by explaining that get_fragrance is for exact slugs, making sibling selection clear.

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

Usage Guidelines5/5

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

It states exactly when to call this tool first: when a name is partial, misspelled, or ambiguous. It also names the alternative, get_fragrance, for the exact-slug case and explains the downstream workflow of passing the returned slug to another tool.

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

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 4 tool updates
    • Changedcompare_fragrances12 fields changed
      • addedInput schema / properties / country
        Added value: +{
        +  "default": null,
        +  "description": "The user's country as an ISO 3166-1 alpha-2 code, for example US, DE or GB. Prices are for this country, in the shop's own currency. Pass it whenever you know where the user is. When omitted, the client's location hint is used if it sent one, otherwise GB.",
        +  "type": [
        +    "string",
        +    "null"
        +  ]
        +}
      • addedOutput schema / properties / a / properties / price
        Added value: +{
        +  "description": "Cheapest full-size bottle for the user's country, in the shop's own currency. Excludes samples and decants. Null when we hold no bottle price a shop will sell to that country.",
        +  "properties": {
        +    "amount": {
        +      "description": "The bottle price, in Currency. This is the shop's own price, never a conversion.",
        +      "type": "number"
        +    },
        +    "currency": {
        +      "description": "ISO 4217 currency code of Amount, for example GBP, USD or EUR. The shop's own currency.",
        +      "type": "string"
        +    },
        +    "estimate": {
        +      "description": "Rough value of Amount in the user's currency, at a published reference rate. Present only when Currency differs from the user's currency and a recent rate exists. For orientation only: never use it to rank, compare or filter prices.",
        +      "properties": {
        +        "amount": {
        +          "description": "The price converted to Currency, in whole units. Approximate.",
        +          "type": "number"
        +        },
        +        "currency": {
        +          "description": "ISO 4217 code of the user's currency.",
        +          "type": "string"
        +        },
        +        "rateDate": {
        +          "description": "Date of the reference rate used, as YYYY-MM-DD. The European Central Bank's rate, or Frankfurter's for a currency the ECB does not publish.",
        +          "type": "string"
        +        }
        +      },
        +      "required": [
        +        "amount",
        +        "currency",
        +        "rateDate"
        +      ],
        +      "type": [
        +        "object",
        +        "null"
        +      ]
        +    },
        +    "excludesTax": {
        +      "description": "True when the shop quotes this price before sales tax, as US shops do. Say so when you quote it.",
        +      "type": "boolean"
        +    },
        +    "fromAbroad": {
        +      "description": "True when no shop in the user's own customs area sells a bottle, so this is the cheapest bottle from a shop in another country that delivers to them.",
        +      "type": "boolean"
        +    },
        +    "importChargesMayApply": {
        +      "description": "True when the user may have to pay import charges on top of Amount. Say 'import charges may apply' when you quote it.",
        +      "type": "boolean"
        +    },
        +    "pricePerMl": {
        +      "description": "Amount divided by SizeMl, in Currency. USE THIS to compare value between fragrances priced in the same currency, never the bottle price - a small bottle can look cheap while costing far more per millilitre. Null when the size is unknown.",
        +      "type": [
        +        "number",
        +        "null"
        +      ]
        +    },
        +    "shipsFrom": {
        +      "description": "ISO 3166-1 alpha-2 country the shop sells from, for example GB or US.",
        +      "type": "string"
        +    },
        +    "sizeMl": {
        +      "description": "Bottle size in millilitres that Amount applies to. 0 means the shop did not state a size.",
        +      "type": "number"
        +    }
        +  },
        +  "required": [
        +    "amount",
        +    "currency",
        +    "sizeMl",
        +    "pricePerMl",
        +    "excludesTax",
        +    "fromAbroad",
        +    "shipsFrom",
        +    "importChargesMayApply",
        +    "estimate"
        +  ],
        +  "type": [
        +    "object",
        +    "null"
        +  ]
        +}
      • removedOutput schema / properties / a / properties / priceFromGbp
        Removed value: -{
        -  "description": "Lowest UK price we hold for a full-size bottle, in GBP. Excludes samples and decants. Null when we hold no full-size price.",
        -  "type": [
        -    "number",
        -    "null"
        -  ]
        -}
      • removedOutput schema / properties / a / properties / pricePerMlGbp
        Removed value: -{
        -  "description": "PriceFromGbp divided by PriceSizeMl. USE THIS to compare value between fragrances, never the bottle price - a small bottle can look cheap while costing far more per millilitre. Null when the size is unknown.",
        -  "type": [
        -    "number",
        -    "null"
        -  ]
        -}
      • removedOutput schema / properties / a / properties / priceSizeMl
        Removed value: -{
        -  "description": "Bottle size in millilitres that PriceFromGbp applies to. 0 means the retailer did not state a size.",
        -  "type": [
        -    "number",
        -    "null"
        -  ]
        -}
      • changedOutput schema / properties / a / required
        Previous value: -[
        -  "slug",
        -  "name",
        -  "brand",
        -  "brandSlug",
        -  "concentration",
        -  "yearLaunched",
        -  "verdictBadge",
        -  "verdict",
        -  "keyNotes",
        -  "priceFromGbp",
        -  "priceSizeMl",
        -  "pricePerMlGbp",
        -  "imageUrl",
        -  "scentArtUrl",
        -  "url"
        -]New value: +[
        +  "slug",
        +  "name",
        +  "brand",
        +  "brandSlug",
        +  "concentration",
        +  "yearLaunched",
        +  "verdictBadge",
        +  "verdict",
        +  "keyNotes",
        +  "price",
        +  "imageUrl",
        +  "scentArtUrl",
        +  "url"
        +]
      • addedOutput schema / properties / b / properties / price
        Added value: +{
        +  "$ref": "#/properties/a/properties/price",
        +  "description": "Cheapest full-size bottle for the user's country, in the shop's own currency. Excludes samples and decants. Null when we hold no bottle price a shop will sell to that country."
        +}
      • removedOutput schema / properties / b / properties / priceFromGbp
        Removed value: -{
        -  "description": "Lowest UK price we hold for a full-size bottle, in GBP. Excludes samples and decants. Null when we hold no full-size price.",
        -  "type": [
        -    "number",
        -    "null"
        -  ]
        -}
      • removedOutput schema / properties / b / properties / pricePerMlGbp
        Removed value: -{
        -  "description": "PriceFromGbp divided by PriceSizeMl. USE THIS to compare value between fragrances, never the bottle price - a small bottle can look cheap while costing far more per millilitre. Null when the size is unknown.",
        -  "type": [
        -    "number",
        -    "null"
        -  ]
        -}
      • removedOutput schema / properties / b / properties / priceSizeMl
        Removed value: -{
        -  "description": "Bottle size in millilitres that PriceFromGbp applies to. 0 means the retailer did not state a size.",
        -  "type": [
        -    "number",
        -    "null"
        -  ]
        -}
      • changedOutput schema / properties / b / required
        Previous value: -[
        -  "slug",
        -  "name",
        -  "brand",
        -  "brandSlug",
        -  "concentration",
        -  "yearLaunched",
        -  "verdictBadge",
        -  "verdict",
        -  "keyNotes",
        -  "priceFromGbp",
        -  "priceSizeMl",
        -  "pricePerMlGbp",
        -  "imageUrl",
        -  "scentArtUrl",
        -  "url"
        -]New value: +[
        +  "slug",
        +  "name",
        +  "brand",
        +  "brandSlug",
        +  "concentration",
        +  "yearLaunched",
        +  "verdictBadge",
        +  "verdict",
        +  "keyNotes",
        +  "price",
        +  "imageUrl",
        +  "scentArtUrl",
        +  "url"
        +]
      • addedOutput schema / properties / market
        Added value: +{
        +  "default": null,
        +  "description": "The country the prices in this result are for, its currency, and how it was chosen.",
        +  "properties": {
        +    "country": {
        +      "description": "ISO 3166-1 alpha-2 country the prices are for, for example GB, US or DE.",
        +      "type": "string"
        +    },
        +    "countryName": {
        +      "description": "The country's name in English.",
        +      "type": "string"
        +    },
        +    "currency": {
        +      "description": "ISO 4217 code of that country's currency. Budgets are read in this currency.",
        +      "type": "string"
        +    },
        +    "source": {
        +      "description": "How the country was chosen: 'argument' (the country you passed), 'clientHint' (the client's location hint), or 'default' (GB, used when neither was given - ask the user for their country if it matters).",
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "country",
        +    "countryName",
        +    "currency",
        +    "source"
        +  ],
        +  "type": [
        +    "object",
        +    "null"
        +  ]
        +}
    • Changedfind_similar_fragrances7 fields changed
      • addedInput schema / properties / country
        Added value: +{
        +  "default": null,
        +  "description": "The user's country as an ISO 3166-1 alpha-2 code, for example US, DE or GB. Prices are for this country, in the shop's own currency. Pass it whenever you know where the user is. When omitted, the client's location hint is used if it sent one, otherwise GB.",
        +  "type": [
        +    "string",
        +    "null"
        +  ]
        +}
      • addedOutput schema / properties / market
        Added value: +{
        +  "default": null,
        +  "description": "The country the prices in this result are for, its currency, and how it was chosen.",
        +  "properties": {
        +    "country": {
        +      "description": "ISO 3166-1 alpha-2 country the prices are for, for example GB, US or DE.",
        +      "type": "string"
        +    },
        +    "countryName": {
        +      "description": "The country's name in English.",
        +      "type": "string"
        +    },
        +    "currency": {
        +      "description": "ISO 4217 code of that country's currency. Budgets are read in this currency.",
        +      "type": "string"
        +    },
        +    "source": {
        +      "description": "How the country was chosen: 'argument' (the country you passed), 'clientHint' (the client's location hint), or 'default' (GB, used when neither was given - ask the user for their country if it matters).",
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "country",
        +    "countryName",
        +    "currency",
        +    "source"
        +  ],
        +  "type": [
        +    "object",
        +    "null"
        +  ]
        +}
      • addedOutput schema / properties / results / items / properties / fragrance / properties / price
        Added value: +{
        +  "description": "Cheapest full-size bottle for the user's country, in the shop's own currency. Excludes samples and decants. Null when we hold no bottle price a shop will sell to that country.",
        +  "properties": {
        +    "amount": {
        +      "description": "The bottle price, in Currency. This is the shop's own price, never a conversion.",
        +      "type": "number"
        +    },
        +    "currency": {
        +      "description": "ISO 4217 currency code of Amount, for example GBP, USD or EUR. The shop's own currency.",
        +      "type": "string"
        +    },
        +    "estimate": {
        +      "description": "Rough value of Amount in the user's currency, at a published reference rate. Present only when Currency differs from the user's currency and a recent rate exists. For orientation only: never use it to rank, compare or filter prices.",
        +      "properties": {
        +        "amount": {
        +          "description": "The price converted to Currency, in whole units. Approximate.",
        +          "type": "number"
        +        },
        +        "currency": {
        +          "description": "ISO 4217 code of the user's currency.",
        +          "type": "string"
        +        },
        +        "rateDate": {
        +          "description": "Date of the reference rate used, as YYYY-MM-DD. The European Central Bank's rate, or Frankfurter's for a currency the ECB does not publish.",
        +          "type": "string"
        +        }
        +      },
        +      "required": [
        +        "amount",
        +        "currency",
        +        "rateDate"
        +      ],
        +      "type": [
        +        "object",
        +        "null"
        +      ]
        +    },
        +    "excludesTax": {
        +      "description": "True when the shop quotes this price before sales tax, as US shops do. Say so when you quote it.",
        +      "type": "boolean"
        +    },
        +    "fromAbroad": {
        +      "description": "True when no shop in the user's own customs area sells a bottle, so this is the cheapest bottle from a shop in another country that delivers to them.",
        +      "type": "boolean"
        +    },
        +    "importChargesMayApply": {
        +      "description": "True when the user may have to pay import charges on top of Amount. Say 'import charges may apply' when you quote it.",
        +      "type": "boolean"
        +    },
        +    "pricePerMl": {
        +      "description": "Amount divided by SizeMl, in Currency. USE THIS to compare value between fragrances priced in the same currency, never the bottle price - a small bottle can look cheap while costing far more per millilitre. Null when the size is unknown.",
        +      "type": [
        +        "number",
        +        "null"
        +      ]
        +    },
        +    "shipsFrom": {
        +      "description": "ISO 3166-1 alpha-2 country the shop sells from, for example GB or US.",
        +      "type": "string"
        +    },
        +    "sizeMl": {
        +      "description": "Bottle size in millilitres that Amount applies to. 0 means the shop did not state a size.",
        +      "type": "number"
        +    }
        +  },
        +  "required": [
        +    "amount",
        +    "currency",
        +    "sizeMl",
        +    "pricePerMl",
        +    "excludesTax",
        +    "fromAbroad",
        +    "shipsFrom",
        +    "importChargesMayApply",
        +    "estimate"
        +  ],
        +  "type": [
        +    "object",
        +    "null"
        +  ]
        +}
      • removedOutput schema / properties / results / items / properties / fragrance / properties / priceFromGbp
        Removed value: -{
        -  "description": "Lowest UK price we hold for a full-size bottle, in GBP. Excludes samples and decants. Null when we hold no full-size price.",
        -  "type": [
        -    "number",
        -    "null"
        -  ]
        -}
      • removedOutput schema / properties / results / items / properties / fragrance / properties / pricePerMlGbp
        Removed value: -{
        -  "description": "PriceFromGbp divided by PriceSizeMl. USE THIS to compare value between fragrances, never the bottle price - a small bottle can look cheap while costing far more per millilitre. Null when the size is unknown.",
        -  "type": [
        -    "number",
        -    "null"
        -  ]
        -}
      • removedOutput schema / properties / results / items / properties / fragrance / properties / priceSizeMl
        Removed value: -{
        -  "description": "Bottle size in millilitres that PriceFromGbp applies to. 0 means the retailer did not state a size.",
        -  "type": [
        -    "number",
        -    "null"
        -  ]
        -}
      • changedOutput schema / properties / results / items / properties / fragrance / required
        Previous value: -[
        -  "slug",
        -  "name",
        -  "brand",
        -  "brandSlug",
        -  "concentration",
        -  "yearLaunched",
        -  "verdictBadge",
        -  "verdict",
        -  "keyNotes",
        -  "priceFromGbp",
        -  "priceSizeMl",
        -  "pricePerMlGbp",
        -  "imageUrl",
        -  "scentArtUrl",
        -  "url"
        -]New value: +[
        +  "slug",
        +  "name",
        +  "brand",
        +  "brandSlug",
        +  "concentration",
        +  "yearLaunched",
        +  "verdictBadge",
        +  "verdict",
        +  "keyNotes",
        +  "price",
        +  "imageUrl",
        +  "scentArtUrl",
        +  "url"
        +]
    • Changedget_fragrance7 fields changed
      • addedInput schema / properties / country
        Added value: +{
        +  "default": null,
        +  "description": "The user's country as an ISO 3166-1 alpha-2 code, for example US, DE or GB. Prices are for this country, in the shop's own currency. Pass it whenever you know where the user is. When omitted, the client's location hint is used if it sent one, otherwise GB.",
        +  "type": [
        +    "string",
        +    "null"
        +  ]
        +}
      • addedOutput schema / properties / fragrance / properties / price
        Added value: +{
        +  "description": "Cheapest full-size bottle for the user's country, in the shop's own currency. Excludes samples and decants. Null when we hold no bottle price a shop will sell to that country.",
        +  "properties": {
        +    "amount": {
        +      "description": "The bottle price, in Currency. This is the shop's own price, never a conversion.",
        +      "type": "number"
        +    },
        +    "currency": {
        +      "description": "ISO 4217 currency code of Amount, for example GBP, USD or EUR. The shop's own currency.",
        +      "type": "string"
        +    },
        +    "estimate": {
        +      "description": "Rough value of Amount in the user's currency, at a published reference rate. Present only when Currency differs from the user's currency and a recent rate exists. For orientation only: never use it to rank, compare or filter prices.",
        +      "properties": {
        +        "amount": {
        +          "description": "The price converted to Currency, in whole units. Approximate.",
        +          "type": "number"
        +        },
        +        "currency": {
        +          "description": "ISO 4217 code of the user's currency.",
        +          "type": "string"
        +        },
        +        "rateDate": {
        +          "description": "Date of the reference rate used, as YYYY-MM-DD. The European Central Bank's rate, or Frankfurter's for a currency the ECB does not publish.",
        +          "type": "string"
        +        }
        +      },
        +      "required": [
        +        "amount",
        +        "currency",
        +        "rateDate"
        +      ],
        +      "type": [
        +        "object",
        +        "null"
        +      ]
        +    },
        +    "excludesTax": {
        +      "description": "True when the shop quotes this price before sales tax, as US shops do. Say so when you quote it.",
        +      "type": "boolean"
        +    },
        +    "fromAbroad": {
        +      "description": "True when no shop in the user's own customs area sells a bottle, so this is the cheapest bottle from a shop in another country that delivers to them.",
        +      "type": "boolean"
        +    },
        +    "importChargesMayApply": {
        +      "description": "True when the user may have to pay import charges on top of Amount. Say 'import charges may apply' when you quote it.",
        +      "type": "boolean"
        +    },
        +    "pricePerMl": {
        +      "description": "Amount divided by SizeMl, in Currency. USE THIS to compare value between fragrances priced in the same currency, never the bottle price - a small bottle can look cheap while costing far more per millilitre. Null when the size is unknown.",
        +      "type": [
        +        "number",
        +        "null"
        +      ]
        +    },
        +    "shipsFrom": {
        +      "description": "ISO 3166-1 alpha-2 country the shop sells from, for example GB or US.",
        +      "type": "string"
        +    },
        +    "sizeMl": {
        +      "description": "Bottle size in millilitres that Amount applies to. 0 means the shop did not state a size.",
        +      "type": "number"
        +    }
        +  },
        +  "required": [
        +    "amount",
        +    "currency",
        +    "sizeMl",
        +    "pricePerMl",
        +    "excludesTax",
        +    "fromAbroad",
        +    "shipsFrom",
        +    "importChargesMayApply",
        +    "estimate"
        +  ],
        +  "type": [
        +    "object",
        +    "null"
        +  ]
        +}
      • removedOutput schema / properties / fragrance / properties / priceFromGbp
        Removed value: -{
        -  "description": "Lowest UK price we hold for a full-size bottle, in GBP. Excludes samples and decants. Null when we hold no full-size price.",
        -  "type": [
        -    "number",
        -    "null"
        -  ]
        -}
      • removedOutput schema / properties / fragrance / properties / pricePerMlGbp
        Removed value: -{
        -  "description": "PriceFromGbp divided by PriceSizeMl. USE THIS to compare value between fragrances, never the bottle price - a small bottle can look cheap while costing far more per millilitre. Null when the size is unknown.",
        -  "type": [
        -    "number",
        -    "null"
        -  ]
        -}
      • removedOutput schema / properties / fragrance / properties / priceSizeMl
        Removed value: -{
        -  "description": "Bottle size in millilitres that PriceFromGbp applies to. 0 means the retailer did not state a size.",
        -  "type": [
        -    "number",
        -    "null"
        -  ]
        -}
      • changedOutput schema / properties / fragrance / required
        Previous value: -[
        -  "slug",
        -  "name",
        -  "brand",
        -  "brandSlug",
        -  "concentration",
        -  "yearLaunched",
        -  "verdictBadge",
        -  "verdict",
        -  "keyNotes",
        -  "priceFromGbp",
        -  "priceSizeMl",
        -  "pricePerMlGbp",
        -  "imageUrl",
        -  "scentArtUrl",
        -  "url"
        -]New value: +[
        +  "slug",
        +  "name",
        +  "brand",
        +  "brandSlug",
        +  "concentration",
        +  "yearLaunched",
        +  "verdictBadge",
        +  "verdict",
        +  "keyNotes",
        +  "price",
        +  "imageUrl",
        +  "scentArtUrl",
        +  "url"
        +]
      • addedOutput schema / properties / market
        Added value: +{
        +  "default": null,
        +  "description": "The country the prices in this result are for, its currency, and how it was chosen.",
        +  "properties": {
        +    "country": {
        +      "description": "ISO 3166-1 alpha-2 country the prices are for, for example GB, US or DE.",
        +      "type": "string"
        +    },
        +    "countryName": {
        +      "description": "The country's name in English.",
        +      "type": "string"
        +    },
        +    "currency": {
        +      "description": "ISO 4217 code of that country's currency. Budgets are read in this currency.",
        +      "type": "string"
        +    },
        +    "source": {
        +      "description": "How the country was chosen: 'argument' (the country you passed), 'clientHint' (the client's location hint), or 'default' (GB, used when neither was given - ask the user for their country if it matters).",
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "country",
        +    "countryName",
        +    "currency",
        +    "source"
        +  ],
        +  "type": [
        +    "object",
        +    "null"
        +  ]
        +}
    • Changedrecommend_fragrances9 fields changed
      • addedInput schema / properties / budgetMax
        Added value: +{
        +  "default": null,
        +  "description": "Maximum price for a full-size bottle, in the currency of the user's country (USD for US, EUR for DE, GBP for GB). Only prices in that currency are filtered.",
        +  "type": [
        +    "number",
        +    "null"
        +  ]
        +}
      • removedInput schema / properties / budgetMaxGbp
        Removed value: -{
        -  "default": null,
        -  "description": "Maximum price in GBP for a full-size bottle.",
        -  "type": [
        -    "number",
        -    "null"
        -  ]
        -}
      • addedInput schema / properties / country
        Added value: +{
        +  "default": null,
        +  "description": "The user's country as an ISO 3166-1 alpha-2 code, for example US, DE or GB. Prices are for this country, in the shop's own currency. Pass it whenever you know where the user is. When omitted, the client's location hint is used if it sent one, otherwise GB.",
        +  "type": [
        +    "string",
        +    "null"
        +  ]
        +}
      • addedOutput schema / properties / market
        Added value: +{
        +  "default": null,
        +  "description": "The country the prices in this result are for, its currency, and how it was chosen.",
        +  "properties": {
        +    "country": {
        +      "description": "ISO 3166-1 alpha-2 country the prices are for, for example GB, US or DE.",
        +      "type": "string"
        +    },
        +    "countryName": {
        +      "description": "The country's name in English.",
        +      "type": "string"
        +    },
        +    "currency": {
        +      "description": "ISO 4217 code of that country's currency. Budgets are read in this currency.",
        +      "type": "string"
        +    },
        +    "source": {
        +      "description": "How the country was chosen: 'argument' (the country you passed), 'clientHint' (the client's location hint), or 'default' (GB, used when neither was given - ask the user for their country if it matters).",
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "country",
        +    "countryName",
        +    "currency",
        +    "source"
        +  ],
        +  "type": [
        +    "object",
        +    "null"
        +  ]
        +}
      • addedOutput schema / properties / results / items / properties / price
        Added value: +{
        +  "description": "Cheapest full-size bottle for the user's country, in the shop's own currency. Excludes samples and decants. Null when we hold no bottle price a shop will sell to that country.",
        +  "properties": {
        +    "amount": {
        +      "description": "The bottle price, in Currency. This is the shop's own price, never a conversion.",
        +      "type": "number"
        +    },
        +    "currency": {
        +      "description": "ISO 4217 currency code of Amount, for example GBP, USD or EUR. The shop's own currency.",
        +      "type": "string"
        +    },
        +    "estimate": {
        +      "description": "Rough value of Amount in the user's currency, at a published reference rate. Present only when Currency differs from the user's currency and a recent rate exists. For orientation only: never use it to rank, compare or filter prices.",
        +      "properties": {
        +        "amount": {
        +          "description": "The price converted to Currency, in whole units. Approximate.",
        +          "type": "number"
        +        },
        +        "currency": {
        +          "description": "ISO 4217 code of the user's currency.",
        +          "type": "string"
        +        },
        +        "rateDate": {
        +          "description": "Date of the reference rate used, as YYYY-MM-DD. The European Central Bank's rate, or Frankfurter's for a currency the ECB does not publish.",
        +          "type": "string"
        +        }
        +      },
        +      "required": [
        +        "amount",
        +        "currency",
        +        "rateDate"
        +      ],
        +      "type": [
        +        "object",
        +        "null"
        +      ]
        +    },
        +    "excludesTax": {
        +      "description": "True when the shop quotes this price before sales tax, as US shops do. Say so when you quote it.",
        +      "type": "boolean"
        +    },
        +    "fromAbroad": {
        +      "description": "True when no shop in the user's own customs area sells a bottle, so this is the cheapest bottle from a shop in another country that delivers to them.",
        +      "type": "boolean"
        +    },
        +    "importChargesMayApply": {
        +      "description": "True when the user may have to pay import charges on top of Amount. Say 'import charges may apply' when you quote it.",
        +      "type": "boolean"
        +    },
        +    "pricePerMl": {
        +      "description": "Amount divided by SizeMl, in Currency. USE THIS to compare value between fragrances priced in the same currency, never the bottle price - a small bottle can look cheap while costing far more per millilitre. Null when the size is unknown.",
        +      "type": [
        +        "number",
        +        "null"
        +      ]
        +    },
        +    "shipsFrom": {
        +      "description": "ISO 3166-1 alpha-2 country the shop sells from, for example GB or US.",
        +      "type": "string"
        +    },
        +    "sizeMl": {
        +      "description": "Bottle size in millilitres that Amount applies to. 0 means the shop did not state a size.",
        +      "type": "number"
        +    }
        +  },
        +  "required": [
        +    "amount",
        +    "currency",
        +    "sizeMl",
        +    "pricePerMl",
        +    "excludesTax",
        +    "fromAbroad",
        +    "shipsFrom",
        +    "importChargesMayApply",
        +    "estimate"
        +  ],
        +  "type": [
        +    "object",
        +    "null"
        +  ]
        +}
      • removedOutput schema / properties / results / items / properties / priceFromGbp
        Removed value: -{
        -  "description": "Lowest UK price we hold for a full-size bottle, in GBP. Excludes samples and decants. Null when we hold no full-size price.",
        -  "type": [
        -    "number",
        -    "null"
        -  ]
        -}
      • removedOutput schema / properties / results / items / properties / pricePerMlGbp
        Removed value: -{
        -  "description": "PriceFromGbp divided by PriceSizeMl. USE THIS to compare value between fragrances, never the bottle price - a small bottle can look cheap while costing far more per millilitre. Null when the size is unknown.",
        -  "type": [
        -    "number",
        -    "null"
        -  ]
        -}
      • removedOutput schema / properties / results / items / properties / priceSizeMl
        Removed value: -{
        -  "description": "Bottle size in millilitres that PriceFromGbp applies to. 0 means the retailer did not state a size.",
        -  "type": [
        -    "number",
        -    "null"
        -  ]
        -}
      • changedOutput schema / properties / results / items / required
        Previous value: -[
        -  "slug",
        -  "name",
        -  "brand",
        -  "brandSlug",
        -  "concentration",
        -  "yearLaunched",
        -  "verdictBadge",
        -  "verdict",
        -  "keyNotes",
        -  "priceFromGbp",
        -  "priceSizeMl",
        -  "pricePerMlGbp",
        -  "imageUrl",
        -  "scentArtUrl",
        -  "url"
        -]New value: +[
        +  "slug",
        +  "name",
        +  "brand",
        +  "brandSlug",
        +  "concentration",
        +  "yearLaunched",
        +  "verdictBadge",
        +  "verdict",
        +  "keyNotes",
        +  "price",
        +  "imageUrl",
        +  "scentArtUrl",
        +  "url"
        +]
  2. 6 tool updates
    • First observedcompare_fragrances
    • First observedfind_similar_fragrances
    • First observedget_fragrance
    • First observedget_scent_profile
    • First observedrecommend_fragrances
    • First observedsearch_fragrances

Publisher details

Operator
DBHQ Consulting Ltd, trading as ScentVerdict (UK company 06839674, London) · Publisher source
Vendor relationship
First-party · Publisher source
Trust center
Not available
Restrictions
None. Free, read-only, no account or API key. · Publisher source

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    B
    maintenance
    The 10ML Fragrance Index for ChatGPT, Claude and other assistants: perfume notes, accords, families, similar scents and expert guides.
    MIT
  • A
    license
    A
    quality
    B
    maintenance
    Perfume database API with verified notes: 1,500+ perfumes, 160+ houses, 400+ raw materials in a fragrance ingredients database. 12 tools over MCP and REST, OpenAPI spec, free and keyless, answers in 10 languages. Look up a note or raw material and get the perfumes that use it, or a perfume and get its full top, heart and base pyramid. Built by Scento.
    12
    MIT
  • F
    license
    Not graded
    quality
    C
    maintenance
    Provides cited product-review verdicts synthesised from real user voices across multiple platforms, enabling AI agents to query live opinions with ratings, pros/cons, and confidence tiers.
    -
Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.

Resources