Perfume Picks

Search the Perfume Picks fragrance database: 13,000+ scents with notes, dupes, and wear data.

Should I use this

Quality & Safety

A
Description quality
84%
Schema completeness
96%
Naming quality
93%
Poisoning risk
100%
Permission match
100%
Protocol compliance
100%

Findings (3)

  • LOWTool 'find_dupes' description lacks action verbin find_dupes
  • LOWTool 'compare_fragrances' description lacks action verbin compare_fragrances
  • LOWTool 'what_to_wear_tonight' description lacks action verbin what_to_wear_tonight

Based on automated analysis of tool definitions and protocol compliance.

Context Cost

~1,521Tokens (tool definitions)
~1.3 KBTypical response size
Moderate attention impact (1.19% of 128k context)

This is the approximate number of tokens consumed each time the server's tools are loaded into a model's context. Higher counts reduce the attention available for other tasks.

Install

One-Click Install

Add this to your `claude_desktop_config.json` file:

{
  "mcpServers": {
    "perfume-picks": {
      "command": "npx",
      "args": [
        "perfume-picks-mcp"
      ]
    }
  }
}

Runnable packages

npmperfume-picks-mcp1.0.2stdio

Remote endpoints

https://jdkwlwyysgofljkobpmr.supabase.co/functions/v1/mcpstreamable-http
https://mcp.perfumepicks.app/?src=registrystreamable-http

What it can do

Tool inventory

Tools (8)

🟢 Read-only🟡 Write🔴 Delete⚪ Unknown
🟢search_fragrances(query, brand, fragrance_family, gender, price_min, ...)

Full-text search across 13,000+ fragrances in the Perfume Picks database. Filter by brand, fragrance family, gender, and MSRP (USD). Returns note pyramids, accords, and community wear scores with source attribution.

Input Schema

{
  "type": "object",
  "properties": {
    "query": {
      "type": "string",
      "maxLength": 120,
      "description": "Free-text search: fragrance or brand name"
    },
    "brand": {
      "type": "string",
      "maxLength": 200,
      "description": "Brand name filter, e.g. 'Dior'"
    },
    "fragrance_family": {
      "type": "string",
      "maxLength": 120,
      "description": "Family filter, e.g. 'woody', 'amber', 'fresh'"
    },
    "gender": {
      "type": "string",
      "enum": [
        "masculine",
        "feminine",
        "unisex"
      ],
      "description": "Marketed gender category of the fragrance; omit to include all"
    },
    "price_min": {
      "type": "number",
      "minimum": 0,
      "description": "Minimum MSRP in USD"
    },
    "price_max": {
      "type": "number",
      "minimum": 0,
      "description": "Maximum MSRP in USD"
    },
    "limit": {
      "type": "integer",
      "minimum": 1,
      "maximum": 10,
      "description": "Max results (default 10, max 10)"
    }
  },
  "additionalProperties": false,
  "$schema": "http://json-schema.org/draft-07/schema#"
}
🟢get_fragrance(slug_or_name)

Detailed record for one fragrance: full note pyramid (top/heart/base), accords, concentration, community longevity/sillage/compliment scores, and MSRP. Accepts a Perfume Picks slug or a name like 'Bleu de Chanel'.

Input Schema

{
  "type": "object",
  "properties": {
    "slug_or_name": {
      "type": "string",
      "maxLength": 200,
      "description": "Fragrance slug or name"
    }
  },
  "required": [
    "slug_or_name"
  ],
  "additionalProperties": false,
  "$schema": "http://json-schema.org/draft-07/schema#"
}
🟢find_dupes(fragrance)

Curated dupes for a fragrance — cheaper scents documented to smell like the original, with match percentage and price comparison. The answer to 'what smells like X without the price tag'.

Input Schema

{
  "type": "object",
  "properties": {
    "fragrance": {
      "type": "string",
      "maxLength": 200,
      "description": "Fragrance slug or name to find dupes for"
    }
  },
  "required": [
    "fragrance"
  ],
  "additionalProperties": false,
  "$schema": "http://json-schema.org/draft-07/schema#"
}
🟢find_similar(fragrance, limit)

Fragrances most similar to a given one, from Perfume Picks' precomputed similarity ranking over notes and accords.

Input Schema

{
  "type": "object",
  "properties": {
    "fragrance": {
      "type": "string",
      "maxLength": 200,
      "description": "Fragrance slug or name"
    },
    "limit": {
      "type": "integer",
      "minimum": 1,
      "maximum": 10,
      "description": "Max results (default 5)"
    }
  },
  "required": [
    "fragrance"
  ],
  "additionalProperties": false,
  "$schema": "http://json-schema.org/draft-07/schema#"
}
🟢get_recommendations(preferences, budget, occasion, gender, limit)

Personalized fragrance picks from note/accord preferences (e.g. 'vanilla', 'oud', 'citrus'), a budget in USD, an occasion ('office', 'date night', 'gift', 'signature scent'), and gender presentation.

Input Schema

{
  "type": "object",
  "properties": {
    "preferences": {
      "type": "array",
      "items": {
        "type": "string",
        "maxLength": 60
      },
      "minItems": 1,
      "maxItems": 20,
      "description": "Notes or accords the wearer enjoys, e.g. ['vanilla','amber','rose']"
    },
    "budget": {
      "type": "number",
      "minimum": 0,
      "description": "Max MSRP in USD"
    },
    "occasion": {
      "type": "string",
      "maxLength": 120,
      "description": "What the fragrance is for"
    },
    "gender": {
      "type": "string",
      "enum": [
        "masculine",
        "feminine",
        "unisex"
      ],
      "description": "Marketed gender category of the fragrance; omit to include all"
    },
    "limit": {
      "type": "integer",
      "minimum": 1,
      "maximum": 10,
      "description": "Max results (default 5)"
    }
  },
  "required": [
    "preferences"
  ],
  "additionalProperties": false,
  "$schema": "http://json-schema.org/draft-07/schema#"
}
🟢compare_fragrances(fragrance_a, fragrance_b)

Side-by-side comparison: note pyramids, shared and distinct accords, longevity/sillage/compliment scores, concentration, and price difference.

Input Schema

{
  "type": "object",
  "properties": {
    "fragrance_a": {
      "type": "string",
      "maxLength": 200,
      "description": "First fragrance — slug or name"
    },
    "fragrance_b": {
      "type": "string",
      "maxLength": 200,
      "description": "Second fragrance — slug or name"
    }
  },
  "required": [
    "fragrance_a",
    "fragrance_b"
  ],
  "additionalProperties": false,
  "$schema": "http://json-schema.org/draft-07/schema#"
}
🟢trending_fragrances(limit)

Fragrances Perfume Picks users are adding to their wardrobes most over the last 30 days (falls back to catalog popularity when live activity data is unavailable). The method used is labeled in the response.

Input Schema

{
  "type": "object",
  "properties": {
    "limit": {
      "type": "integer",
      "minimum": 1,
      "maximum": 10,
      "description": "Max results (default 10, max 10)"
    }
  },
  "additionalProperties": false,
  "$schema": "http://json-schema.org/draft-07/schema#"
}
🟢what_to_wear_tonight(mood, occasion, season, gender)

A fragrance suggestion for right now, based on mood, occasion (e.g. 'date', 'office tomorrow', 'night out', 'cozy evening in'), and season — scored with Perfume Picks' community compliment, office-safety, and versatility data.

Input Schema

{
  "type": "object",
  "properties": {
    "mood": {
      "type": "string",
      "maxLength": 120,
      "description": "How you're feeling"
    },
    "occasion": {
      "type": "string",
      "maxLength": 120,
      "description": "The setting"
    },
    "season": {
      "type": "string",
      "enum": [
        "winter",
        "spring",
        "summer",
        "fall"
      ],
      "description": "Season to weight the pick toward — heavier, warmer scents in winter; fresher in summer"
    },
    "gender": {
      "type": "string",
      "enum": [
        "masculine",
        "feminine",
        "unisex"
      ],
      "description": "Marketed gender category of the fragrance; omit to include all"
    }
  },
  "additionalProperties": false,
  "$schema": "http://json-schema.org/draft-07/schema#"
}

Community

Rate this Server

Evidence

Recent observations

verifiedversion not recorded8 tools
verifiedversion not recorded8 tools
verifiedversion not recorded8 tools
verifiedversion not recorded8 tools