ScentVerdict MCP
An MCP server providing access to ScentVerdict's fragrance database, allowing AI agents to retrieve perfume verdicts, scent profiles, similarity scores, drydown information, and local pricing from shops in 14 countries.
Endpoint and access
No sign-in to connect and list tools. Individual tools may still need a vendor account, credentials, or permissions; check the documented prerequisites.
https://scentverdict.com/mcpWhat its tools do
6 tools, grouped by the hints the server advertises. Hints are self-declared, not verified behavior.
Checks and signals
Each line is separate evidence, not a trust score.
- Passed Endpoint answered the live check ·
- Passed Official MCP Registry namespace is tied to scentverdict.com ·
- Passed Endpoint is on the registry namespace domain ·
- Availability 1 of 1 checks passed in 30 days
What you can do with it
- Retrieve perfume verdicts and scent profiles
- Find local prices and shops delivering to a location
- Get similarity scores and drydown information
- Answer questions about specific fragrances
Source and maintenance
Protocol and capabilities
- Server
- ScentVerdict 2.0.4
- MCP protocol negotiated in check
- 2025-11-25
- Tools
- 6 advertised
- Resources
- Not advertised
- Resource templates
- Not advertised
- Prompts
- Not advertised
{
"tools": {
"listChanged": true
},
"logging": {}
}Server-provided instructions
Untrusted server output shown for inspection. It is not Koskamo guidance and is excluded from knowledge search.
Tools
6 advertised
get_scent_profile — Scent Profile and Drydown
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.
{
"type": "object",
"required": [
"slug"
],
"properties": {
"slug": {
"type": "string",
"description": "The fragrance slug. Use search_fragrances if you do not have one."
}
}
}{
"type": "object",
"required": [
"name",
"slug",
"phases",
"longestLastingNoteHours",
"url",
"notFound",
"error"
],
"properties": {
"url": {
"type": [
"string",
"null"
],
"description": "Canonical page URL, carrying the scent wheel and drydown timeline."
},
"name": {
"type": [
"string",
"null"
],
"description": "Fragrance name."
},
"slug": {
"type": [
"string",
"null"
],
"description": "Stable identifier."
},
"error": {
"type": [
"string",
"null"
],
"description": "Set when the profile could not be read."
},
"phases": {
"type": "array",
"items": {
"type": "object",
"required": [
"phase",
"notes"
],
"properties": {
"notes": {
"type": "array",
"items": {
"type": "object",
"required": [
"note",
"slug",
"family",
"substantivityHours",
"volatilityClass"
],
"properties": {
"note": {
"type": "string",
"description": "Note name."
},
"slug": {
"type": "string",
"description": "Note slug."
},
"family": {
"type": [
"string",
"null"
],
"description": "Olfactory family. Null when unclassified."
},
"volatilityClass": {
"type": [
"string",
"null"
],
"description": "Intrinsic volatility class. Null when unknown."
},
"substantivityHours": {
"type": [
"number",
"null"
],
"description": "Expected hours on skin. Null when unknown."
}
}
},
"description": "Notes in this phase, heaviest first."
},
"phase": {
"type": "string",
"description": "Phase name: top, heart, base, or unspecified."
}
}
},
"description": "Notes grouped by phase: top, heart, base."
},
"notFound": {
"type": [
"object",
"null"
],
"required": [
"notFound",
"query",
"suggestions"
],
"properties": {
"query": {
"type": "string",
"description": "What was asked for."
},
"notFound": {
"type": "boolean",
"description": "Always true. The requested fragrance is not in the catalogue."
},
"suggestions": {
"type": "array",
"items": {
"type": "object",
"required": [
"slug",
"name",
"brand",
"concentration",
"yearLaunched",
"url"
],
"properties": {
"url": {
"type": "string",
"description": "Canonical page URL."
},
"name": {
"type": "string",
"description": "Fragrance name without the brand."
},
"slug": {
"type": "string",
"description": "Stable identifier. Pass this to other tools."
},
"brand": {
"type": "string",
"description": "Brand name."
},
"yearLaunched": {
"type": [
"integer",
"null"
],
"description": "Year first launched. Null when unknown."
},
"concentration": {
"type": [
"string",
"null"
],
"description": "Concentration, for example Edt or Edp. Null when unknown."
}
}
},
"description": "Close catalogue entries the user may have meant. May be empty. Never treat these as the answer without confirming."
}
},
"description": "Set when the fragrance is not in the catalogue."
},
"longestLastingNoteHours": {
"type": [
"number",
"null"
],
"description": "Hours the longest-lasting note persists. Null when unknown."
}
}
}{
"title": "Scent Profile and Drydown",
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}search_fragrances — Search Fragrances by Name
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.
{
"type": "object",
"required": [
"query"
],
"properties": {
"limit": {
"type": "integer",
"default": 8,
"description": "Maximum results. Default 8, maximum 20."
},
"query": {
"type": "string",
"description": "Name or partial name to look up. Minimum 2 characters."
}
}
}{
"type": "object",
"required": [
"result"
],
"properties": {
"result": {
"type": "array",
"items": {
"type": "object",
"required": [
"slug",
"name",
"brand",
"concentration",
"yearLaunched",
"url"
],
"properties": {
"url": {
"type": "string",
"description": "Canonical page URL."
},
"name": {
"type": "string",
"description": "Fragrance name without the brand."
},
"slug": {
"type": "string",
"description": "Stable identifier. Pass this to other tools."
},
"brand": {
"type": "string",
"description": "Brand name."
},
"yearLaunched": {
"type": [
"integer",
"null"
],
"description": "Year first launched. Null when unknown."
},
"concentration": {
"type": [
"string",
"null"
],
"description": "Concentration, for example Edt or Edp. Null when unknown."
}
}
}
}
}
}{
"title": "Search Fragrances by Name",
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}find_similar_fragrances — Find Similar Fragrances
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.
{
"type": "object",
"required": [
"anchorSlug"
],
"properties": {
"limit": {
"type": "integer",
"default": 5,
"description": "Maximum results. Default 5, maximum 10."
},
"country": {
"type": [
"string",
"null"
],
"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."
},
"direction": {
"enum": [
"Similar",
"Cheaper",
"Fresher",
"LongerLasting",
"MoreIntense",
"LessSweet"
],
"type": "string",
"default": "Similar",
"description": "How to steer results away from the anchor. Defaults to the closest overall match."
},
"anchorSlug": {
"type": "string",
"description": "Slug of the fragrance to anchor on. Use search_fragrances first if you do not have one."
}
}
}{
"type": "object",
"required": [
"anchorSlug",
"direction",
"results",
"reason"
],
"properties": {
"market": {
"type": [
"object",
"null"
],
"default": null,
"required": [
"country",
"countryName",
"currency",
"source"
],
"properties": {
"source": {
"type": "string",
"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)."
},
"country": {
"type": "string",
"description": "ISO 3166-1 alpha-2 country the prices are for, for example GB, US or DE."
},
"currency": {
"type": "string",
"description": "ISO 4217 code of that country's currency. Budgets are read in this currency."
},
"countryName": {
"type": "string",
"description": "The country's name in English."
}
},
"description": "The country the prices in this result are for, its currency, and how it was chosen."
},
"reason": {
"type": [
"string",
"null"
],
"description": "Why the result set is empty. Null when results were found."
},
"results": {
"type": "array",
"items": {
"type": "object",
"required": [
"fragrance",
"similarityScore",
"whySimilar",
"keyDifference",
"sharedNotes"
],
"properties": {
"fragrance": {
"type": "object",
"required": [
"slug",
"name",
"brand",
"brandSlug",
"concentration",
"yearLaunched",
"verdictBadge",
"verdict",
"keyNotes",
"price",
"imageUrl",
"scentArtUrl",
"url"
],
"properties": {
"url": {
"type": "string",
"description": "Canonical page URL, carrying the interactive scent wheel, drydown timeline and full descriptor profile."
},
"name": {
"type": "string",
"description": "Fragrance name without the brand."
},
"slug": {
"type": "string",
"description": "Stable identifier. Pass this to other tools."
},
"brand": {
"type": "string",
"description": "Brand name."
},
"price": {
"type": [
"object",
"null"
],
"required": [
"amount",
"currency",
"sizeMl",
"pricePerMl",
"excludesTax",
"fromAbroad",
"shipsFrom",
"importChargesMayApply",
"estimate"
],
"properties": {
"amount": {
"type": "number",
"description": "The bottle price, in Currency. This is the shop's own price, never a conversion."
},
"sizeMl": {
"type": "number",
"description": "Bottle size in millilitres that Amount applies to. 0 means the shop did not state a size."
},
"currency": {
"type": "string",
"description": "ISO 4217 currency code of Amount, for example GBP, USD or EUR. The shop's own currency."
},
"estimate": {
"type": [
"object",
"null"
],
"required": [
"amount",
"currency",
"rateDate"
],
"properties": {
"amount": {
"type": "number",
"description": "The price converted to Currency, in whole units. Approximate."
},
"currency": {
"type": "string",
"description": "ISO 4217 code of the user's currency."
},
"rateDate": {
"type": "string",
"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."
}
},
"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."
},
"shipsFrom": {
"type": "string",
"description": "ISO 3166-1 alpha-2 country the shop sells from, for example GB or US."
},
"fromAbroad": {
"type": "boolean",
"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."
},
"pricePerMl": {
"type": [
"number",
"null"
],
"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."
},
"excludesTax": {
"type": "boolean",
"description": "True when the shop quotes this price before sales tax, as US shops do. Say so when you quote it."
},
"importChargesMayApply": {
"type": "boolean",
"description": "True when the user may have to pay import charges on top of Amount. Say 'import charges may apply' when you quote it."
}
},
"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."
},
"verdict": {
"type": [
"string",
"null"
],
"description": "The full ScentVerdict editorial verdict. Null when this row came from a source that carries no verdict."
},
"imageUrl": {
"type": [
"string",
"null"
],
"description": "Bottle image URL. Null when we hold no image."
},
"keyNotes": {
"type": "array",
"items": {
"type": "string"
},
"description": "The most characteristic notes. May be empty."
},
"brandSlug": {
"type": "string",
"description": "Brand slug."
},
"scentArtUrl": {
"type": [
"string",
"null"
],
"description": "ScentArt visual URL, generated from this fragrance's own composition. Null when not yet rendered."
},
"verdictBadge": {
"type": [
"string",
"null"
],
"description": "Editorial classification: Favourite, Statement or Acquired. Null when not yet classified."
},
"yearLaunched": {
"type": [
"integer",
"null"
],
"description": "Year first launched. Null when unknown."
},
"concentration": {
"type": [
"string",
"null"
],
"description": "Concentration, for example Edt, Edp or Parfum. Null when unknown."
}
},
"description": "The matched fragrance."
},
"whySimilar": {
"type": [
"string",
"null"
],
"description": "What the two have in common. Null when we hold no written comparison."
},
"sharedNotes": {
"type": "array",
"items": {
"type": "string"
},
"description": "Notes present in both. May be empty."
},
"keyDifference": {
"type": [
"string",
"null"
],
"description": "How the two differ. Null when we hold no written comparison."
},
"similarityScore": {
"type": [
"integer",
"null"
],
"description": "Similarity score out of 100. Null when the source carries no score."
}
}
},
"description": "Ranked matches, closest first. May be empty."
},
"notFound": {
"type": [
"object",
"null"
],
"default": null,
"required": [
"notFound",
"query",
"suggestions"
],
"properties": {
"query": {
"type": "string",
"description": "What was asked for."
},
"notFound": {
"type": "boolean",
"description": "Always true. The requested fragrance is not in the catalogue."
},
"suggestions": {
"type": "array",
"items": {
"type": "object",
"required": [
"slug",
"name",
"brand",
"concentration",
"yearLaunched",
"url"
],
"properties": {
"url": {
"type": "string",
"description": "Canonical page URL."
},
"name": {
"type": "string",
"description": "Fragrance name without the brand."
},
"slug": {
"type": "string",
"description": "Stable identifier. Pass this to other tools."
},
"brand": {
"type": "string",
"description": "Brand name."
},
"yearLaunched": {
"type": [
"integer",
"null"
],
"description": "Year first launched. Null when unknown."
},
"concentration": {
"type": [
"string",
"null"
],
"description": "Concentration, for example Edt or Edp. Null when unknown."
}
}
},
"description": "Close catalogue entries the user may have meant. May be empty. Never treat these as the answer without confirming."
}
},
"description": "Set when the anchor fragrance is not in the catalogue."
},
"direction": {
"type": "string",
"description": "How results were steered away from the anchor."
},
"anchorSlug": {
"type": "string",
"description": "The fragrance the results were derived from."
}
}
}{
"title": "Find Similar Fragrances",
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}compare_fragrances — Compare Two Fragrances
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.
{
"type": "object",
"required": [
"slugA",
"slugB"
],
"properties": {
"slugA": {
"type": "string",
"description": "Slug of the first fragrance."
},
"slugB": {
"type": "string",
"description": "Slug of the second fragrance."
},
"country": {
"type": [
"string",
"null"
],
"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": "object",
"required": [
"a",
"b",
"sharedNotes",
"onlyInA",
"onlyInB",
"comparisonUrl",
"notFound",
"error"
],
"properties": {
"a": {
"type": [
"object",
"null"
],
"required": [
"slug",
"name",
"brand",
"brandSlug",
"concentration",
"yearLaunched",
"verdictBadge",
"verdict",
"keyNotes",
"price",
"imageUrl",
"scentArtUrl",
"url"
],
"properties": {
"url": {
"type": "string",
"description": "Canonical page URL, carrying the interactive scent wheel, drydown timeline and full descriptor profile."
},
"name": {
"type": "string",
"description": "Fragrance name without the brand."
},
"slug": {
"type": "string",
"description": "Stable identifier. Pass this to other tools."
},
"brand": {
"type": "string",
"description": "Brand name."
},
"price": {
"type": [
"object",
"null"
],
"required": [
"amount",
"currency",
"sizeMl",
"pricePerMl",
"excludesTax",
"fromAbroad",
"shipsFrom",
"importChargesMayApply",
"estimate"
],
"properties": {
"amount": {
"type": "number",
"description": "The bottle price, in Currency. This is the shop's own price, never a conversion."
},
"sizeMl": {
"type": "number",
"description": "Bottle size in millilitres that Amount applies to. 0 means the shop did not state a size."
},
"currency": {
"type": "string",
"description": "ISO 4217 currency code of Amount, for example GBP, USD or EUR. The shop's own currency."
},
"estimate": {
"type": [
"object",
"null"
],
"required": [
"amount",
"currency",
"rateDate"
],
"properties": {
"amount": {
"type": "number",
"description": "The price converted to Currency, in whole units. Approximate."
},
"currency": {
"type": "string",
"description": "ISO 4217 code of the user's currency."
},
"rateDate": {
"type": "string",
"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."
}
},
"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."
},
"shipsFrom": {
"type": "string",
"description": "ISO 3166-1 alpha-2 country the shop sells from, for example GB or US."
},
"fromAbroad": {
"type": "boolean",
"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."
},
"pricePerMl": {
"type": [
"number",
"null"
],
"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."
},
"excludesTax": {
"type": "boolean",
"description": "True when the shop quotes this price before sales tax, as US shops do. Say so when you quote it."
},
"importChargesMayApply": {
"type": "boolean",
"description": "True when the user may have to pay import charges on top of Amount. Say 'import charges may apply' when you quote it."
}
},
"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."
},
"verdict": {
"type": [
"string",
"null"
],
"description": "The full ScentVerdict editorial verdict. Null when this row came from a source that carries no verdict."
},
"imageUrl": {
"type": [
"string",
"null"
],
"description": "Bottle image URL. Null when we hold no image."
},
"keyNotes": {
"type": "array",
"items": {
"type": "string"
},
"description": "The most characteristic notes. May be empty."
},
"brandSlug": {
"type": "string",
"description": "Brand slug."
},
"scentArtUrl": {
"type": [
"string",
"null"
],
"description": "ScentArt visual URL, generated from this fragrance's own composition. Null when not yet rendered."
},
"verdictBadge": {
"type": [
"string",
"null"
],
"description": "Editorial classification: Favourite, Statement or Acquired. Null when not yet classified."
},
"yearLaunched": {
"type": [
"integer",
"null"
],
"description": "Year first launched. Null when unknown."
},
"concentration": {
"type": [
"string",
"null"
],
"description": "Concentration, for example Edt, Edp or Parfum. Null when unknown."
}
},
"description": "The first fragrance."
},
"b": {
"type": [
"object",
"null"
],
"required": [
"slug",
"name",
"brand",
"brandSlug",
"concentration",
"yearLaunched",
"verdictBadge",
"verdict",
"keyNotes",
"price",
"imageUrl",
"scentArtUrl",
"url"
],
"properties": {
"url": {
"type": "string",
"description": "Canonical page URL, carrying the interactive scent wheel, drydown timeline and full descriptor profile."
},
"name": {
"type": "string",
"description": "Fragrance name without the brand."
},
"slug": {
"type": "string",
"description": "Stable identifier. Pass this to other tools."
},
"brand": {
"type": "string",
"description": "Brand name."
},
"price": {
"$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."
},
"verdict": {
"type": [
"string",
"null"
],
"description": "The full ScentVerdict editorial verdict. Null when this row came from a source that carries no verdict."
},
"imageUrl": {
"type": [
"string",
"null"
],
"description": "Bottle image URL. Null when we hold no image."
},
"keyNotes": {
"$ref": "#/properties/a/properties/keyNotes",
"items": {},
"description": "The most characteristic notes. May be empty."
},
"brandSlug": {
"type": "string",
"description": "Brand slug."
},
"scentArtUrl": {
"type": [
"string",
"null"
],
"description": "ScentArt visual URL, generated from this fragrance's own composition. Null when not yet rendered."
},
"verdictBadge": {
"type": [
"string",
"null"
],
"description": "Editorial classification: Favourite, Statement or Acquired. Null when not yet classified."
},
"yearLaunched": {
"type": [
"integer",
"null"
],
"description": "Year first launched. Null when unknown."
},
"concentration": {
"type": [
"string",
"null"
],
"description": "Concentration, for example Edt, Edp or Parfum. Null when unknown."
}
},
"description": "The second fragrance."
},
"error": {
"type": [
"string",
"null"
],
"description": "Set when the comparison could not be completed."
},
"market": {
"type": [
"object",
"null"
],
"default": null,
"required": [
"country",
"countryName",
"currency",
"source"
],
"properties": {
"source": {
"type": "string",
"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)."
},
"country": {
"type": "string",
"description": "ISO 3166-1 alpha-2 country the prices are for, for example GB, US or DE."
},
"currency": {
"type": "string",
"description": "ISO 4217 code of that country's currency. Budgets are read in this currency."
},
"countryName": {
"type": "string",
"description": "The country's name in English."
}
},
"description": "The country the prices in this result are for, its currency, and how it was chosen."
},
"onlyInA": {
"type": "array",
"items": {
"type": "string"
},
"description": "Notes only in the first."
},
"onlyInB": {
"type": "array",
"items": {
"type": "string"
},
"description": "Notes only in the second."
},
"notFound": {
"type": [
"object",
"null"
],
"required": [
"notFound",
"query",
"suggestions"
],
"properties": {
"query": {
"type": "string",
"description": "What was asked for."
},
"notFound": {
"type": "boolean",
"description": "Always true. The requested fragrance is not in the catalogue."
},
"suggestions": {
"type": "array",
"items": {
"type": "object",
"required": [
"slug",
"name",
"brand",
"concentration",
"yearLaunched",
"url"
],
"properties": {
"url": {
"type": "string",
"description": "Canonical page URL."
},
"name": {
"type": "string",
"description": "Fragrance name without the brand."
},
"slug": {
"type": "string",
"description": "Stable identifier. Pass this to other tools."
},
"brand": {
"type": "string",
"description": "Brand name."
},
"yearLaunched": {
"type": [
"integer",
"null"
],
"description": "Year first launched. Null when unknown."
},
"concentration": {
"type": [
"string",
"null"
],
"description": "Concentration, for example Edt or Edp. Null when unknown."
}
}
},
"description": "Close catalogue entries the user may have meant. May be empty. Never treat these as the answer without confirming."
}
},
"description": "Set when either fragrance is not in the catalogue."
},
"sharedNotes": {
"type": "array",
"items": {
"type": "string"
},
"description": "Notes present in both."
},
"comparisonUrl": {
"type": [
"string",
"null"
],
"description": "Canonical URL of the comparison page."
}
}
}{
"title": "Compare Two Fragrances",
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}recommend_fragrances — Recommend Fragrances
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.
{
"type": "object",
"properties": {
"limit": {
"type": "integer",
"default": 5,
"description": "Maximum results. Default 5, maximum 10."
},
"season": {
"enum": [
"Spring",
"Summer",
"Autumn",
"Winter",
null
],
"type": [
"string",
"null"
],
"default": null,
"description": "Season the fragrance is for."
},
"country": {
"type": [
"string",
"null"
],
"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."
},
"occasion": {
"enum": [
"Office",
"Date",
"Casual",
"Formal",
"Sport",
null
],
"type": [
"string",
"null"
],
"default": null,
"description": "Occasion the fragrance is for."
},
"budgetMax": {
"type": [
"number",
"null"
],
"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."
},
"intensity": {
"enum": [
"Sheer",
"Light",
"Moderate",
"Strong",
"Potent",
null
],
"type": [
"string",
"null"
],
"default": null,
"description": "How strong the fragrance should be."
},
"noteLoved": {
"type": [
"string",
"null"
],
"default": null,
"description": "A single note the user likes, for example vanilla."
},
"longevityMin": {
"enum": [
"Fleeting",
"Short",
"Moderate",
"Long",
"Beast",
null
],
"type": [
"string",
"null"
],
"default": null,
"description": "Minimum staying power."
},
"genderPresentation": {
"enum": [
"Masculine",
"Feminine",
"Unisex",
null
],
"type": [
"string",
"null"
],
"default": null,
"description": "Who the fragrance presents as."
}
}
}{
"type": "object",
"required": [
"results",
"caveat"
],
"properties": {
"caveat": {
"type": [
"string",
"null"
],
"description": "Caveat about how the constraints were applied. Null when there is nothing to qualify."
},
"market": {
"type": [
"object",
"null"
],
"default": null,
"required": [
"country",
"countryName",
"currency",
"source"
],
"properties": {
"source": {
"type": "string",
"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)."
},
"country": {
"type": "string",
"description": "ISO 3166-1 alpha-2 country the prices are for, for example GB, US or DE."
},
"currency": {
"type": "string",
"description": "ISO 4217 code of that country's currency. Budgets are read in this currency."
},
"countryName": {
"type": "string",
"description": "The country's name in English."
}
},
"description": "The country the prices in this result are for, its currency, and how it was chosen."
},
"results": {
"type": "array",
"items": {
"type": "object",
"required": [
"slug",
"name",
"brand",
"brandSlug",
"concentration",
"yearLaunched",
"verdictBadge",
"verdict",
"keyNotes",
"price",
"imageUrl",
"scentArtUrl",
"url"
],
"properties": {
"url": {
"type": "string",
"description": "Canonical page URL, carrying the interactive scent wheel, drydown timeline and full descriptor profile."
},
"name": {
"type": "string",
"description": "Fragrance name without the brand."
},
"slug": {
"type": "string",
"description": "Stable identifier. Pass this to other tools."
},
"brand": {
"type": "string",
"description": "Brand name."
},
"price": {
"type": [
"object",
"null"
],
"required": [
"amount",
"currency",
"sizeMl",
"pricePerMl",
"excludesTax",
"fromAbroad",
"shipsFrom",
"importChargesMayApply",
"estimate"
],
"properties": {
"amount": {
"type": "number",
"description": "The bottle price, in Currency. This is the shop's own price, never a conversion."
},
"sizeMl": {
"type": "number",
"description": "Bottle size in millilitres that Amount applies to. 0 means the shop did not state a size."
},
"currency": {
"type": "string",
"description": "ISO 4217 currency code of Amount, for example GBP, USD or EUR. The shop's own currency."
},
"estimate": {
"type": [
"object",
"null"
],
"required": [
"amount",
"currency",
"rateDate"
],
"properties": {
"amount": {
"type": "number",
"description": "The price converted to Currency, in whole units. Approximate."
},
"currency": {
"type": "string",
"description": "ISO 4217 code of the user's currency."
},
"rateDate": {
"type": "string",
"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."
}
},
"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."
},
"shipsFrom": {
"type": "string",
"description": "ISO 3166-1 alpha-2 country the shop sells from, for example GB or US."
},
"fromAbroad": {
"type": "boolean",
"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."
},
"pricePerMl": {
"type": [
"number",
"null"
],
"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."
},
"excludesTax": {
"type": "boolean",
"description": "True when the shop quotes this price before sales tax, as US shops do. Say so when you quote it."
},
"importChargesMayApply": {
"type": "boolean",
"description": "True when the user may have to pay import charges on top of Amount. Say 'import charges may apply' when you quote it."
}
},
"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."
},
"verdict": {
"type": [
"string",
"null"
],
"description": "The full ScentVerdict editorial verdict. Null when this row came from a source that carries no verdict."
},
"imageUrl": {
"type": [
"string",
"null"
],
"description": "Bottle image URL. Null when we hold no image."
},
"keyNotes": {
"type": "array",
"items": {
"type": "string"
},
"description": "The most characteristic notes. May be empty."
},
"brandSlug": {
"type": "string",
"description": "Brand slug."
},
"scentArtUrl": {
"type": [
"string",
"null"
],
"description": "ScentArt visual URL, generated from this fragrance's own composition. Null when not yet rendered."
},
"verdictBadge": {
"type": [
"string",
"null"
],
"description": "Editorial classification: Favourite, Statement or Acquired. Null when not yet classified."
},
"yearLaunched": {
"type": [
"integer",
"null"
],
"description": "Year first launched. Null when unknown."
},
"concentration": {
"type": [
"string",
"null"
],
"description": "Concentration, for example Edt, Edp or Parfum. Null when unknown."
}
}
},
"description": "Matching fragrances. May be empty when the constraints are too narrow."
}
}
}{
"title": "Recommend Fragrances",
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}get_fragrance — Look Up a Fragrance
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.
{
"type": "object",
"required": [
"slug"
],
"properties": {
"slug": {
"type": "string",
"description": "The fragrance slug, for example bleu-de-chanel. Use search_fragrances if you do not have one."
},
"country": {
"type": [
"string",
"null"
],
"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": "object",
"required": [
"fragrance",
"notFound",
"error"
],
"properties": {
"error": {
"type": [
"string",
"null"
],
"description": "Set when the lookup could not be completed. Explain this rather than guessing."
},
"market": {
"type": [
"object",
"null"
],
"default": null,
"required": [
"country",
"countryName",
"currency",
"source"
],
"properties": {
"source": {
"type": "string",
"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)."
},
"country": {
"type": "string",
"description": "ISO 3166-1 alpha-2 country the prices are for, for example GB, US or DE."
},
"currency": {
"type": "string",
"description": "ISO 4217 code of that country's currency. Budgets are read in this currency."
},
"countryName": {
"type": "string",
"description": "The country's name in English."
}
},
"description": "The country the prices in this result are for, its currency, and how it was chosen."
},
"notFound": {
"type": [
"object",
"null"
],
"required": [
"notFound",
"query",
"suggestions"
],
"properties": {
"query": {
"type": "string",
"description": "What was asked for."
},
"notFound": {
"type": "boolean",
"description": "Always true. The requested fragrance is not in the catalogue."
},
"suggestions": {
"type": "array",
"items": {
"type": "object",
"required": [
"slug",
"name",
"brand",
"concentration",
"yearLaunched",
"url"
],
"properties": {
"url": {
"type": "string",
"description": "Canonical page URL."
},
"name": {
"type": "string",
"description": "Fragrance name without the brand."
},
"slug": {
"type": "string",
"description": "Stable identifier. Pass this to other tools."
},
"brand": {
"type": "string",
"description": "Brand name."
},
"yearLaunched": {
"type": [
"integer",
"null"
],
"description": "Year first launched. Null when unknown."
},
"concentration": {
"type": [
"string",
"null"
],
"description": "Concentration, for example Edt or Edp. Null when unknown."
}
}
},
"description": "Close catalogue entries the user may have meant. May be empty. Never treat these as the answer without confirming."
}
},
"description": "Set when the fragrance is not in the catalogue. Carries suggestions."
},
"fragrance": {
"type": [
"object",
"null"
],
"required": [
"slug",
"name",
"brand",
"brandSlug",
"concentration",
"yearLaunched",
"verdictBadge",
"verdict",
"keyNotes",
"price",
"imageUrl",
"scentArtUrl",
"url"
],
"properties": {
"url": {
"type": "string",
"description": "Canonical page URL, carrying the interactive scent wheel, drydown timeline and full descriptor profile."
},
"name": {
"type": "string",
"description": "Fragrance name without the brand."
},
"slug": {
"type": "string",
"description": "Stable identifier. Pass this to other tools."
},
"brand": {
"type": "string",
"description": "Brand name."
},
"price": {
"type": [
"object",
"null"
],
"required": [
"amount",
"currency",
"sizeMl",
"pricePerMl",
"excludesTax",
"fromAbroad",
"shipsFrom",
"importChargesMayApply",
"estimate"
],
"properties": {
"amount": {
"type": "number",
"description": "The bottle price, in Currency. This is the shop's own price, never a conversion."
},
"sizeMl": {
"type": "number",
"description": "Bottle size in millilitres that Amount applies to. 0 means the shop did not state a size."
},
"currency": {
"type": "string",
"description": "ISO 4217 currency code of Amount, for example GBP, USD or EUR. The shop's own currency."
},
"estimate": {
"type": [
"object",
"null"
],
"required": [
"amount",
"currency",
"rateDate"
],
"properties": {
"amount": {
"type": "number",
"description": "The price converted to Currency, in whole units. Approximate."
},
"currency": {
"type": "string",
"description": "ISO 4217 code of the user's currency."
},
"rateDate": {
"type": "string",
"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."
}
},
"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."
},
"shipsFrom": {
"type": "string",
"description": "ISO 3166-1 alpha-2 country the shop sells from, for example GB or US."
},
"fromAbroad": {
"type": "boolean",
"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."
},
"pricePerMl": {
"type": [
"number",
"null"
],
"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."
},
"excludesTax": {
"type": "boolean",
"description": "True when the shop quotes this price before sales tax, as US shops do. Say so when you quote it."
},
"importChargesMayApply": {
"type": "boolean",
"description": "True when the user may have to pay import charges on top of Amount. Say 'import charges may apply' when you quote it."
}
},
"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."
},
"verdict": {
"type": [
"string",
"null"
],
"description": "The full ScentVerdict editorial verdict. Null when this row came from a source that carries no verdict."
},
"imageUrl": {
"type": [
"string",
"null"
],
"description": "Bottle image URL. Null when we hold no image."
},
"keyNotes": {
"type": "array",
"items": {
"type": "string"
},
"description": "The most characteristic notes. May be empty."
},
"brandSlug": {
"type": "string",
"description": "Brand slug."
},
"scentArtUrl": {
"type": [
"string",
"null"
],
"description": "ScentArt visual URL, generated from this fragrance's own composition. Null when not yet rendered."
},
"verdictBadge": {
"type": [
"string",
"null"
],
"description": "Editorial classification: Favourite, Statement or Acquired. Null when not yet classified."
},
"yearLaunched": {
"type": [
"integer",
"null"
],
"description": "Year first launched. Null when unknown."
},
"concentration": {
"type": [
"string",
"null"
],
"description": "Concentration, for example Edt, Edp or Parfum. Null when unknown."
}
},
"description": "The fragrance. Null when not found or on error."
}
}
}{
"title": "Look Up a Fragrance",
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}Prompts
Not advertised
Resources
Not advertised
90-day uptime
A lightweight connection check about every six hours, sampled on hosts with many listings. It shows the server answered, not that its tools work.
- 2026-11-07: 1 of 1 checks answered
30-day availability
Aggregated from read-only remote checks; this is not a tool-execution or security guarantee.
- Successful checks
- 1 of 1 (100%)
- Average latency
- 1802 ms
- 95th percentile latency
- 1802 ms
Maintenance history
Public check and source-refresh events. Editorial and ownership records remain private.
- · probe · passed · 1802 ms · metadata changed · 6 tool(s)
Connect from your client
Each snippet registers the same endpoint; pick the client you use.
Claude Code
claude mcp add --transport http scentverdict-mcp https://scentverdict.com/mcpCodex
codex mcp add scentverdict-mcp --url https://scentverdict.com/mcpCursor
{
"mcpServers": {
"scentverdict-mcp": {
"url": "https://scentverdict.com/mcp"
}
}
}Cline
{
"mcpServers": {
"scentverdict-mcp": {
"type": "streamableHttp",
"url": "https://scentverdict.com/mcp",
"disabled": false
}
}
}VS Code
{
"servers": {
"scentverdict-mcp": {
"type": "http",
"url": "https://scentverdict.com/mcp"
}
}
}Gemini CLI
gemini mcp add --transport http scentverdict-mcp https://scentverdict.com/mcpClaude Desktop
https://scentverdict.com/mcpWindsurf
{
"mcpServers": {
"scentverdict-mcp": {
"serverUrl": "https://scentverdict.com/mcp"
}
}
}Let your agent find its tools
Find servers like ScentVerdict MCP from your agent. Add Koskamo once to search the index for endpoints, access requirements, and client setup. Public discovery needs no key.
Other commerce servers
Do you run ScentVerdict MCP?
Prove ownership with a DNS record, a well-known file, or your Official MCP Registry entry, and your edits publish immediately. Proofs are re-checked weekly; admins can still hide or remove a listing.