Skip to main content
Glama

Look Up a Fragrance

get_fragrance
Read-onlyIdempotent

Look up one 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

TableJSON 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

TableJSON 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.7/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is covered. The description adds real behavioral context: the price is the lowest current price for a full-size bottle, tied to the user's country and expressed in the shop's own currency, which is not derivable from annotations or schema. It omits things like rate limits or auth requirements, so it is not a full 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?

The description is front-loaded with the tool's purpose and returned fields, then routes to alternatives in two tight sentences. Every sentence carries distinct information: what it returns, when to use it, and which sibling to prefer in edge cases. No filler.

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 not be re-explained, and the description still summarizes the payload. Given two well-documented parameters, a clear read-only annotation profile, and explicit sibling routing, an agent has everything needed to call this correctly.

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, but the description adds meaningful semantics beyond the schema: it clarifies that the returned price corresponds to the user's country and is denominated in the shop's own currency, reinforcing why 'country' matters. It does not add format detail for 'slug' beyond the schema's example, so it stops short of 5.

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 fragrance in ScentVerdict's catalogue') and enumerates exactly what is returned: notes, verdict, concentration, launch year, and lowest country-specific price. This makes it instantly distinguishable from siblings like get_scent_profile and search_fragrances.

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 explicit when-to-use triggers ('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') and names two alternative tools with the conditions that select them ('use search_fragrances first if the name is partial'; 'use get_scent_profile instead when the question is about how it develops over the wear'). Nothing is left to inference.

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