Skip to main content
Glama

Look Up a Fragrance

get_fragrance
Read-onlyIdempotent

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.

Input Schema

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

NameRequiredDescriptionDefault
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.

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed7 schema 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"
      +  ]
      +}
  2. First observed

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.

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.

Resources