Fragrance & perfume MCP: search fragrances, notes, accords, brands, perfumers, reviews & charts.
Maintain this server? Claim it
Call this server's tools from your browser. Nothing to install.
Requests go through mcptry because browsers can't call most MCP servers directly. Header values are sent to the server for that request only and are never stored or logged.
Tool list from our last check. Connect live to refresh it.
Generate a curated fragrance collection from a natural-language prompt (e.g. 'office-safe designer scents under $100', 'niche oud masterpieces'). Returns 5–25 grounded picks with rationale. Requires Pro. See also: `ai_recommend` for personalized picks · `fragrance_search` for manual filtering.
What kind of collection to create, e.g. 'niche oud masterpieces'
Generate a curated fragrance collection from a natural-language prompt (e.g. 'office-safe designer scents under $100', 'niche oud masterpieces'). Returns 5–25 grounded picks with rationale. Requires Pro. See also: `ai_recommend` for personalized picks · `fragrance_search` for manual filtering.
| Argument | Type | Description |
|---|---|---|
| size | integer | |
| prompt* | string | What kind of collection to create, e.g. 'niche oud masterpieces' |
| response_format | string |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"prompt"
],
"properties": {
"size": {
"type": "integer",
"default": 10,
"maximum": 25,
"minimum": 5
},
"prompt": {
"type": "string",
"maxLength": 200,
"minLength": 1,
"description": "What kind of collection to create, e.g. 'niche oud masterpieces'"
},
"response_format": {
"enum": [
"markdown",
"json"
],
"type": "string",
"default": "markdown"
}
}
}Get personalized fragrance recommendations based on your taste profile. Optional natural-language prompt to guide results (e.g. 'something fresh for summer'). Requires Pro. See also: `ai_wear_today` for what to wear right now · `user_get_cabinet` for your collection.
| Argument | Type | Description |
|---|---|---|
| limit | integer | |
| prompt | string | Optional natural-language guidance, e.g. 'fresh for summer office' |
| response_format | string |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"limit": {
"type": "integer",
"default": 12,
"maximum": 50,
"minimum": 1
},
"prompt": {
"type": "string",
"maxLength": 200,
"description": "Optional natural-language guidance, e.g. 'fresh for summer office'"
},
"response_format": {
"enum": [
"markdown",
"json"
],
"type": "string",
"default": "markdown"
}
}
}What should I wear today? Picks from your owned cabinet (CURRENT status only) based on optional prompt/weather. Returns nothing if your cabinet is empty. Requires Pro. See also: `ai_recommend` for discovery beyond your cabinet · `user_get_cabinet` for your full collection.
| Argument | Type | Description |
|---|---|---|
| prompt | string | Optional mood/occasion, e.g. 'dinner date' |
| weather | string | Optional weather context, e.g. 'hot and humid' |
| response_format | string |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"prompt": {
"type": "string",
"maxLength": 200,
"description": "Optional mood/occasion, e.g. 'dinner date'"
},
"weather": {
"type": "string",
"maxLength": 200,
"description": "Optional weather context, e.g. 'hot and humid'"
},
"response_format": {
"enum": [
"markdown",
"json"
],
"type": "string",
"default": "markdown"
}
}
}Get a brand profile (name, country, founded, description) and its top fragrances. Use the brand slug, e.g. 'maison-francis-kurkdjian'. See also: `fragrance_search` with the `brand` filter to get the full paginated catalogue for this brand · `perfumer_get` if the brand has a known house perfumer.
| Argument | Type | Description |
|---|---|---|
| slug* | string | Brand slug, e.g. 'maison-francis-kurkdjian' |
| response_format | string |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"slug"
],
"properties": {
"slug": {
"type": "string",
"description": "Brand slug, e.g. 'maison-francis-kurkdjian'"
},
"response_format": {
"enum": [
"markdown",
"json"
],
"type": "string",
"default": "markdown"
}
}
}Get a specific chart leaderboard by slug (e.g. 'top-rated', 'trending', 'top-rated-brand-chanel'). Returns ranked fragrances with scores and movement. See also: `charts_list` to see all available charts · `fragrance_get` for the full profile of any fragrance on the chart.
| Argument | Type | Description |
|---|---|---|
| slug* | string | Chart slug, e.g. 'top-rated', 'trending', 'top-rated-brand-chanel' |
| response_format | string |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"slug"
],
"properties": {
"slug": {
"type": "string",
"description": "Chart slug, e.g. 'top-rated', 'trending', 'top-rated-brand-chanel'"
},
"response_format": {
"enum": [
"markdown",
"json"
],
"type": "string",
"default": "markdown"
}
}
}List all available Noteboxd chart rankings (e.g. top-rated, trending, top by brand). Returns chart names and summary stats. See also: `chart_get` with a chart slug to see the full leaderboard · `trending` for a quick snapshot of what's hot.
| Argument | Type | Description |
|---|---|---|
| response_format | string |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"response_format": {
"enum": [
"markdown",
"json"
],
"type": "string",
"default": "markdown"
}
}
}Compare two fragrances head-to-head — shared vs. distinct notes/accords/families, community and critic scores, audience, and an AI-written synthesis (shared character, differences, who each suits). Public, cached 7 days per pair. See also: `fragrance_get` for full profiles · `fragrance_similar` for alternatives.
| Argument | Type | Description |
|---|---|---|
| fragrance_a* | string | First fragrance UUID |
| fragrance_b* | string | Second fragrance UUID (must differ from fragrance_a) |
| response_format | string |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"fragrance_a",
"fragrance_b"
],
"properties": {
"fragrance_a": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
"description": "First fragrance UUID"
},
"fragrance_b": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
"description": "Second fragrance UUID (must differ from fragrance_a)"
},
"response_format": {
"enum": [
"markdown",
"json"
],
"type": "string",
"default": "markdown"
}
}
}Get the full profile for a single fragrance by UUID or slug (e.g. 'tom-ford/oud-wood'). Returns notes pyramid, accords, FOTW classification, perfumer, community score, and more. See also: `fragrance_similar` for fragrances with similar accord profiles · `fragrance_get_reviews` for community reviews · `fragrance_get_wearing_stats` for when people wear it.
| Argument | Type | Description |
|---|---|---|
| id | string | Fragrance UUID |
| slug | string | 'brand-slug/fragrance-slug', e.g. 'tom-ford/oud-wood' |
| response_format | string |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"id": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
"description": "Fragrance UUID"
},
"slug": {
"type": "string",
"minLength": 1,
"description": "'brand-slug/fragrance-slug', e.g. 'tom-ford/oud-wood'"
},
"response_format": {
"enum": [
"markdown",
"json"
],
"type": "string",
"default": "markdown"
}
}
}Get paginated community reviews for a fragrance. Sort by helpfulness, recency, or score. See also: `fragrance_get` for the fragrance's full profile · `fragrance_get_wearing_stats` for aggregate wearing data.
| Argument | Type | Description |
|---|---|---|
| id* | string | Fragrance UUID |
| sort | string | |
| limit | integer | |
| cursor | string | |
| response_format | string |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"id"
],
"properties": {
"id": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
"description": "Fragrance UUID"
},
"sort": {
"enum": [
"most_liked",
"newest",
"highest",
"lowest"
],
"type": "string",
"default": "most_liked"
},
"limit": {
"type": "integer",
"default": 20,
"maximum": 50,
"minimum": 1
},
"cursor": {
"type": "string"
},
"response_format": {
"enum": [
"markdown",
"json"
],
"type": "string",
"default": "markdown"
}
}
}Community wearing counts for a fragrance. Free tier sees the last 30 days; Pro also sees today and the last 7 days. See also: `fragrance_get` for full profile · `fragrance_similar` for alternatives with similar profiles.
| Argument | Type | Description |
|---|---|---|
| id* | string | Fragrance UUID |
| response_format | string |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"id"
],
"properties": {
"id": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
"description": "Fragrance UUID"
},
"response_format": {
"enum": [
"markdown",
"json"
],
"type": "string",
"default": "markdown"
}
}
}Get a concise AI-generated digest summarizing a fragrance's community reviews — key themes, consensus, and standout opinions. Public, cached per fragrance. See also: `fragrance_get_reviews` for individual reviews · `fragrance_get` for full profile.
| Argument | Type | Description |
|---|---|---|
| id* | string | Fragrance UUID to get the review digest for |
| response_format | string |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"id"
],
"properties": {
"id": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
"description": "Fragrance UUID to get the review digest for"
},
"response_format": {
"enum": [
"markdown",
"json"
],
"type": "string",
"default": "markdown"
}
}
}Search and filter the Noteboxd fragrance encyclopedia. Requires a query or at least one filter — the full catalogue cannot be listed. Tip: The `q` parameter searches fragrance names OR brand names independently. For best results with a known brand, use the `brand` slug filter instead of including the brand name in `q`. Examples: - "Find woody fragrances above 8/10" → accord='woody' + minScore=8 - "Creed fragrances" → brand='creed' - "Bleu de Chanel" → q='Bleu' + brand='chanel' See also: `fragrance_get` for a single fragrance's full profile · `search` for universal cross-entity lookup (brands, notes, perfumers, collections in one call).
| Argument | Type | Description |
|---|---|---|
| note | string | Note slug filter, e.g. 'oud', 'bergamot' |
| page | integer | |
| sort | string | |
| brand | string | Brand slug filter, e.g. 'creed' |
| limit | integer | |
| query | string | Free-text search across fragrance and brand names |
| accord | string | Accord slug filter, e.g. 'woody', 'gourmand' |
| gender | string |
Find fragrances with similar accord profiles to a given fragrance. Returns ranked alternatives based on shared accords and character. See also: `fragrance_get` for the source fragrance's full profile · `fragrance_search` with note/accord filters for manual exploration.
| Argument | Type | Description |
|---|---|---|
| id* | string | Fragrance UUID to find similar fragrances for |
| response_format | string |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"id"
],
"properties": {
"id": {
"type": "string",
"description": "Fragrance UUID to find similar fragrances for"
},
"response_format": {
"enum": [
"markdown",
"json"
],
"type": "string",
"default": "markdown"
}
}
}Get a note's profile (family, description, origin, extraction method) and top fragrances featuring it, sorted by community score. Use the note slug, e.g. 'oud', 'bergamot', 'iris'. See also: `notes_list` to browse all notes by family/popularity · `fragrance_search` with the `note` filter to find fragrances featuring this note.
| Argument | Type | Description |
|---|---|---|
| note* | string | Note slug, e.g. 'oud', 'iris', 'ambroxan', 'bergamot' |
| response_format | string |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"note"
],
"properties": {
"note": {
"type": "string",
"description": "Note slug, e.g. 'oud', 'iris', 'ambroxan', 'bergamot'"
},
"response_format": {
"enum": [
"markdown",
"json"
],
"type": "string",
"default": "markdown"
}
}
}Open the Noteboxd app UI in ChatGPT. Call with no arguments to show the home screen (trending fragrances), with `query` to run a fragrance search inside the app, or with `fragrance` (slug or UUID) to show a fragrance profile. The app renders the returned result; keep the chat reply to one short line.
| Argument | Type | Description |
|---|---|---|
| query | string | Search query to run inside the Noteboxd app. |
| fragrance | string | Fragrance slug or UUID to show in the Noteboxd app. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"query": {
"type": "string",
"description": "Search query to run inside the Noteboxd app."
},
"fragrance": {
"type": "string",
"description": "Fragrance slug or UUID to show in the Noteboxd app."
}
}
}Browse fragrance notes — filter by family (e.g. 'woody', 'floral', 'citrus') and sort by popularity or name. Returns note names, families, colours, and fragrance counts. See also: `note_explore` for a single note's full profile and top fragrances · `fragrance_search` with the `note` filter to find fragrances featuring a specific note.
| Argument | Type | Description |
|---|---|---|
| sort | string | |
| limit | integer | |
| family | string | Filter by note family, e.g. 'woody', 'floral', 'citrus', 'oriental' |
| response_format | string |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"sort": {
"enum": [
"popular",
"alpha"
],
"type": "string",
"default": "popular"
},
"limit": {
"type": "integer",
"default": 20,
"maximum": 50,
"minimum": 1
},
"family": {
"type": "string",
"description": "Filter by note family, e.g. 'woody', 'floral', 'citrus', 'oriental'"
},
"response_format": {
"enum": [
"markdown",
"json"
],
"type": "string",
"default": "markdown"
}
}
}Get a perfumer's profile (bio, country, house affiliation) and their top fragrances by community score. See also: `fragrance_search` to find more fragrances by this perfumer · `brand_get` if you want the brand they work for.
| Argument | Type | Description |
|---|---|---|
| slug* | string | Perfumer slug, e.g. 'francis-kurkdjian', 'jacques-polge' |
| response_format | string |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"slug"
],
"properties": {
"slug": {
"type": "string",
"description": "Perfumer slug, e.g. 'francis-kurkdjian', 'jacques-polge'"
},
"response_format": {
"enum": [
"markdown",
"json"
],
"type": "string",
"default": "markdown"
}
}
}Universal search across all Noteboxd entities — fragrances, brands, notes, perfumers, and collections — in a single call. Best for quick lookups and vague queries. Examples: - "Jacques Polge" → returns the perfumer - "oud" → returns the note, plus top oud fragrances - "Bleu" → returns Bleu de Chanel, Bleu de Dior, etc. See also: `fragrance_search` for advanced fragrance-only filtering (by note, score, concentration) · `trending` for what's popular right now.
| Argument | Type | Description |
|---|---|---|
| query* | string | Search query — searches across fragrances, brands, notes, perfumers, collections |
| response_format | string |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"query"
],
"properties": {
"query": {
"type": "string",
"maxLength": 200,
"minLength": 1,
"description": "Search query — searches across fragrances, brands, notes, perfumers, collections"
},
"response_format": {
"enum": [
"markdown",
"json"
],
"type": "string",
"default": "markdown"
}
}
}What's trending on Noteboxd right now — top search queries, highest-rated fragrances, and most popular notes. No parameters needed. See also: `charts_list` for full ranking leaderboards · `fragrance_search` to explore specific categories.
| Argument | Type | Description |
|---|---|---|
| response_format | string |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"response_format": {
"enum": [
"markdown",
"json"
],
"type": "string",
"default": "markdown"
}
}
}Get your fragrance cabinet — fragrances you own, have tried, or finished. Requires a Pro account. See also: `fragrance_get` for full details on any fragrance in your cabinet · `fragrance_similar` to find alternatives to your favourites · `user_get_wishlist` for fragrances you want to try.
| Argument | Type | Description |
|---|---|---|
| sort | string | |
| limit | integer | |
| cursor | string | |
| status | string | |
| response_format | string |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"sort": {
"enum": [
"recent",
"score",
"alpha"
],
"type": "string",
"default": "recent"
},
"limit": {
"type": "integer",
"default": 30,
"maximum": 50,
"minimum": 1
},
"cursor": {
"type": "string"
},
"status": {
"enum": [
"CURRENT",
"TRIED",
"FINISHED",
"all"
],
"type": "string",
"default": "all"
},
"response_format": {
"enum": [
"markdown",
"json"
],
"type": "string",
"default": "markdown"
}
}
}Get your collections (fragrance lists). Optionally pass a collectionId to see its items. Requires a Pro account. See also: `fragrance_get` for full details on any fragrance in a collection.
| Argument | Type | Description |
|---|---|---|
| collectionId | string | If given, return items in this collection |
| response_format | string |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"collectionId": {
"type": "string",
"description": "If given, return items in this collection"
},
"response_format": {
"enum": [
"markdown",
"json"
],
"type": "string",
"default": "markdown"
}
}
}Get reviews you've written, or reviews you found helpful. Requires a Pro account. See also: `fragrance_get_reviews` for community reviews on a specific fragrance.
| Argument | Type | Description |
|---|---|---|
| kind | string | |
| limit | integer | |
| cursor | string | |
| response_format | string |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"kind": {
"enum": [
"written",
"helpful"
],
"type": "string",
"default": "written"
},
"limit": {
"type": "integer",
"default": 20,
"maximum": 50,
"minimum": 1
},
"cursor": {
"type": "string"
},
"response_format": {
"enum": [
"markdown",
"json"
],
"type": "string",
"default": "markdown"
}
}
}Get your wearing check-in history over time. Requires a Pro account. See also: `fragrance_get_wearing_stats` for aggregate community wearing data on a specific fragrance.
| Argument | Type | Description |
|---|---|---|
| limit | integer | |
| cursor | string | |
| response_format | string |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"limit": {
"type": "integer",
"default": 30,
"maximum": 50,
"minimum": 1
},
"cursor": {
"type": "string"
},
"response_format": {
"enum": [
"markdown",
"json"
],
"type": "string",
"default": "markdown"
}
}
}Get your fragrance wishlist. Requires a Pro account. See also: `fragrance_get` for full details on any wishlist fragrance · `user_get_cabinet` for fragrances you already own.
| Argument | Type | Description |
|---|---|---|
| limit | integer | |
| cursor | string | |
| response_format | string |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"limit": {
"type": "integer",
"default": 30,
"maximum": 50,
"minimum": 1
},
"cursor": {
"type": "string"
},
"response_format": {
"enum": [
"markdown",
"json"
],
"type": "string",
"default": "markdown"
}
}
}Compare your taste with another user — compatibility score, shared and divergent notes/accords/families, and an optional AI overview. Requires Pro for the overview. See also: `user_taste_public` for a user's top preferences · `user_taste_summary` for your own summary.
| Argument | Type | Description |
|---|---|---|
| with_overview | boolean | Include AI-generated overview (requires Pro) |
| target_user_id* | string | User ID to compare your taste with |
| response_format | string |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"target_user_id"
],
"properties": {
"with_overview": {
"type": "boolean",
"default": true,
"description": "Include AI-generated overview (requires Pro)"
},
"target_user_id": {
"type": "string",
"description": "User ID to compare your taste with"
},
"response_format": {
"enum": [
"markdown",
"json"
],
"type": "string",
"default": "markdown"
}
}
}Get a user's public taste profile — their top notes, accords, and families derived from their collection and reviews. No LLM call, deterministic. See also: `user_taste_compare` for compatibility between two users.
| Argument | Type | Description |
|---|---|---|
| username* | string | Username (handle) of the user to view |
| response_format | string |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"username"
],
"properties": {
"username": {
"type": "string",
"description": "Username (handle) of the user to view"
},
"response_format": {
"enum": [
"markdown",
"json"
],
"type": "string",
"default": "markdown"
}
}
}Get your AI-generated taste profile summary — a natural-language description of your fragrance preferences based on your cabinet, reviews, and likes. Requires Pro. See also: `user_taste_public` for the deterministic breakdown · `user_taste_compare` for compatibility.
| Argument | Type | Description |
|---|---|---|
| response_format | string |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"response_format": {
"enum": [
"markdown",
"json"
],
"type": "string",
"default": "markdown"
}
}
}| minScore | number | Minimum community score (0-10) |
| concentration | string |
| response_format | string |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"note": {
"type": "string",
"minLength": 1,
"description": "Note slug filter, e.g. 'oud', 'bergamot'"
},
"page": {
"type": "integer",
"default": 1,
"maximum": 9999,
"minimum": 1
},
"sort": {
"enum": [
"score",
"rated",
"newest",
"name"
],
"type": "string",
"default": "score"
},
"brand": {
"type": "string",
"minLength": 1,
"description": "Brand slug filter, e.g. 'creed'"
},
"limit": {
"type": "integer",
"default": 24,
"maximum": 50,
"minimum": 1
},
"query": {
"type": "string",
"maxLength": 200,
"minLength": 2,
"description": "Free-text search across fragrance and brand names"
},
"accord": {
"type": "string",
"minLength": 1,
"description": "Accord slug filter, e.g. 'woody', 'gourmand'"
},
"gender": {
"enum": [
"MASCULINE",
"FEMININE",
"UNISEX"
],
"type": "string"
},
"minScore": {
"type": "number",
"maximum": 10,
"description": "Minimum community score (0-10)",
"exclusiveMinimum": 0
},
"concentration": {
"enum": [
"EDP",
"EDT",
"Parfum"
],
"type": "string"
},
"response_format": {
"enum": [
"markdown",
"json"
],
"type": "string",
"default": "markdown"
}
},
"additionalProperties": false
}