Fragrance & Perfume MCP (Noteboxd)
Fragrance & perfume MCP: search fragrances, notes, accords, brands, perfumers, reviews & charts.
Should I use this
Quality & Safety
Based on automated analysis of tool definitions and protocol compliance.
Context Cost
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": {
"mcp": {
"command": "npx",
"args": [
"@noteboxd/mcp"
]
}
}
}Runnable packages
0.1.4stdioRemote endpoints
https://mcp.noteboxd.com/mcpstreamable-httpWhat it can do
Tool inventory
Tools (27)
🟢noteboxd_open(fragrance, query, context)
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.
Input Schema
{
"type": "object",
"properties": {
"fragrance": {
"description": "Fragrance slug or UUID to show in the Noteboxd app.",
"type": "string"
},
"query": {
"description": "Search query to run inside the Noteboxd app.",
"type": "string"
},
"context": {
"type": "string",
"description": "Explain in 15-25 words, in third person, why this tool is called and how it supports the user's goal. For analytics only. You MUST describe only the abstract purpose of the tool call. NEVER include, repeat, paraphrase, or infer personal, sensitive, or identifying information from the user request or tool results, including names, emails, phone numbers, IPs, IDs, or credentials. You MUST generalize specific entities into roles such as \"a user\", \"the customer\", or \"an account\". Example: \"Retrieving a customer's recent orders to investigate a billing issue and help support determine the appropriate resolution.\""
}
},
"required": [
"context"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢search(query, response_format, context)
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.
Input Schema
{
"type": "object",
"properties": {
"query": {
"type": "string",
"minLength": 1,
"maxLength": 200,
"description": "Search query — searches across fragrances, brands, notes, perfumers, collections"
},
"response_format": {
"default": "markdown",
"type": "string",
"enum": [
"markdown",
"json"
]
},
"context": {
"type": "string",
"description": "Explain in 15-25 words, in third person, why this tool is called and how it supports the user's goal. For analytics only. You MUST describe only the abstract purpose of the tool call. NEVER include, repeat, paraphrase, or infer personal, sensitive, or identifying information from the user request or tool results, including names, emails, phone numbers, IPs, IDs, or credentials. You MUST generalize specific entities into roles such as \"a user\", \"the customer\", or \"an account\". Example: \"Retrieving a customer's recent orders to investigate a billing issue and help support determine the appropriate resolution.\""
}
},
"required": [
"query",
"context"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢trending(response_format, context)
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.
Input Schema
{
"type": "object",
"properties": {
"response_format": {
"default": "markdown",
"type": "string",
"enum": [
"markdown",
"json"
]
},
"context": {
"type": "string",
"description": "Explain in 15-25 words, in third person, why this tool is called and how it supports the user's goal. For analytics only. You MUST describe only the abstract purpose of the tool call. NEVER include, repeat, paraphrase, or infer personal, sensitive, or identifying information from the user request or tool results, including names, emails, phone numbers, IPs, IDs, or credentials. You MUST generalize specific entities into roles such as \"a user\", \"the customer\", or \"an account\". Example: \"Retrieving a customer's recent orders to investigate a billing issue and help support determine the appropriate resolution.\""
}
},
"required": [
"context"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢fragrance_similar(id, response_format, context)
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.
Input Schema
{
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "Fragrance UUID to find similar fragrances for"
},
"response_format": {
"default": "markdown",
"type": "string",
"enum": [
"markdown",
"json"
]
},
"context": {
"type": "string",
"description": "Explain in 15-25 words, in third person, why this tool is called and how it supports the user's goal. For analytics only. You MUST describe only the abstract purpose of the tool call. NEVER include, repeat, paraphrase, or infer personal, sensitive, or identifying information from the user request or tool results, including names, emails, phone numbers, IPs, IDs, or credentials. You MUST generalize specific entities into roles such as \"a user\", \"the customer\", or \"an account\". Example: \"Retrieving a customer's recent orders to investigate a billing issue and help support determine the appropriate resolution.\""
}
},
"required": [
"id",
"context"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢charts_list(response_format, context)
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.
Input Schema
{
"type": "object",
"properties": {
"response_format": {
"default": "markdown",
"type": "string",
"enum": [
"markdown",
"json"
]
},
"context": {
"type": "string",
"description": "Explain in 15-25 words, in third person, why this tool is called and how it supports the user's goal. For analytics only. You MUST describe only the abstract purpose of the tool call. NEVER include, repeat, paraphrase, or infer personal, sensitive, or identifying information from the user request or tool results, including names, emails, phone numbers, IPs, IDs, or credentials. You MUST generalize specific entities into roles such as \"a user\", \"the customer\", or \"an account\". Example: \"Retrieving a customer's recent orders to investigate a billing issue and help support determine the appropriate resolution.\""
}
},
"required": [
"context"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢chart_get(slug, response_format, context)
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.
Input Schema
{
"type": "object",
"properties": {
"slug": {
"type": "string",
"description": "Chart slug, e.g. 'top-rated', 'trending', 'top-rated-brand-chanel'"
},
"response_format": {
"default": "markdown",
"type": "string",
"enum": [
"markdown",
"json"
]
},
"context": {
"type": "string",
"description": "Explain in 15-25 words, in third person, why this tool is called and how it supports the user's goal. For analytics only. You MUST describe only the abstract purpose of the tool call. NEVER include, repeat, paraphrase, or infer personal, sensitive, or identifying information from the user request or tool results, including names, emails, phone numbers, IPs, IDs, or credentials. You MUST generalize specific entities into roles such as \"a user\", \"the customer\", or \"an account\". Example: \"Retrieving a customer's recent orders to investigate a billing issue and help support determine the appropriate resolution.\""
}
},
"required": [
"slug",
"context"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢notes_list(sort, family, limit, response_format, context)
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.
Input Schema
{
"type": "object",
"properties": {
"sort": {
"default": "popular",
"type": "string",
"enum": [
"popular",
"alpha"
]
},
"family": {
"description": "Filter by note family, e.g. 'woody', 'floral', 'citrus', 'oriental'",
"type": "string"
},
"limit": {
"default": 20,
"type": "integer",
"minimum": 1,
"maximum": 50
},
"response_format": {
"default": "markdown",
"type": "string",
"enum": [
"markdown",
"json"
]
},
"context": {
"type": "string",
"description": "Explain in 15-25 words, in third person, why this tool is called and how it supports the user's goal. For analytics only. You MUST describe only the abstract purpose of the tool call. NEVER include, repeat, paraphrase, or infer personal, sensitive, or identifying information from the user request or tool results, including names, emails, phone numbers, IPs, IDs, or credentials. You MUST generalize specific entities into roles such as \"a user\", \"the customer\", or \"an account\". Example: \"Retrieving a customer's recent orders to investigate a billing issue and help support determine the appropriate resolution.\""
}
},
"required": [
"context"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢ai_recommend(prompt, limit, response_format, context)
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.
Input Schema
{
"type": "object",
"properties": {
"prompt": {
"description": "Optional natural-language guidance, e.g. 'fresh for summer office'",
"type": "string",
"maxLength": 200
},
"limit": {
"default": 12,
"type": "integer",
"minimum": 1,
"maximum": 50
},
"response_format": {
"default": "markdown",
"type": "string",
"enum": [
"markdown",
"json"
]
},
"context": {
"type": "string",
"description": "Explain in 15-25 words, in third person, why this tool is called and how it supports the user's goal. For analytics only. You MUST describe only the abstract purpose of the tool call. NEVER include, repeat, paraphrase, or infer personal, sensitive, or identifying information from the user request or tool results, including names, emails, phone numbers, IPs, IDs, or credentials. You MUST generalize specific entities into roles such as \"a user\", \"the customer\", or \"an account\". Example: \"Retrieving a customer's recent orders to investigate a billing issue and help support determine the appropriate resolution.\""
}
},
"required": [
"context"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢ai_wear_today(prompt, weather, response_format, context)
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.
Input Schema
{
"type": "object",
"properties": {
"prompt": {
"description": "Optional mood/occasion, e.g. 'dinner date'",
"type": "string",
"maxLength": 200
},
"weather": {
"description": "Optional weather context, e.g. 'hot and humid'",
"type": "string",
"maxLength": 200
},
"response_format": {
"default": "markdown",
"type": "string",
"enum": [
"markdown",
"json"
]
},
"context": {
"type": "string",
"description": "Explain in 15-25 words, in third person, why this tool is called and how it supports the user's goal. For analytics only. You MUST describe only the abstract purpose of the tool call. NEVER include, repeat, paraphrase, or infer personal, sensitive, or identifying information from the user request or tool results, including names, emails, phone numbers, IPs, IDs, or credentials. You MUST generalize specific entities into roles such as \"a user\", \"the customer\", or \"an account\". Example: \"Retrieving a customer's recent orders to investigate a billing issue and help support determine the appropriate resolution.\""
}
},
"required": [
"context"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢ai_collection(prompt, size, response_format, context)
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.
Input Schema
{
"type": "object",
"properties": {
"prompt": {
"type": "string",
"minLength": 1,
"maxLength": 200,
"description": "What kind of collection to create, e.g. 'niche oud masterpieces'"
},
"size": {
"default": 10,
"type": "integer",
"minimum": 5,
"maximum": 25
},
"response_format": {
"default": "markdown",
"type": "string",
"enum": [
"markdown",
"json"
]
},
"context": {
"type": "string",
"description": "Explain in 15-25 words, in third person, why this tool is called and how it supports the user's goal. For analytics only. You MUST describe only the abstract purpose of the tool call. NEVER include, repeat, paraphrase, or infer personal, sensitive, or identifying information from the user request or tool results, including names, emails, phone numbers, IPs, IDs, or credentials. You MUST generalize specific entities into roles such as \"a user\", \"the customer\", or \"an account\". Example: \"Retrieving a customer's recent orders to investigate a billing issue and help support determine the appropriate resolution.\""
}
},
"required": [
"prompt",
"context"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢fragrance_search(query, brand, note, accord, concentration, ...)
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).
Input Schema
{
"type": "object",
"properties": {
"query": {
"description": "Free-text search across fragrance and brand names",
"type": "string",
"minLength": 2,
"maxLength": 200
},
"brand": {
"description": "Brand slug filter, e.g. 'creed'",
"type": "string",
"minLength": 1
},
"note": {
"description": "Note slug filter, e.g. 'oud', 'bergamot'",
"type": "string",
"minLength": 1
},
"accord": {
"description": "Accord slug filter, e.g. 'woody', 'gourmand'",
"type": "string",
"minLength": 1
},
"concentration": {
"type": "string",
"enum": [
"EDP",
"EDT",
"Parfum"
]
},
"gender": {
"type": "string",
"enum": [
"MASCULINE",
"FEMININE",
"UNISEX"
]
},
"minScore": {
"description": "Minimum community score (0-10)",
"type": "number",
"exclusiveMinimum": 0,
"maximum": 10
},
"sort": {
"default": "score",
"type": "string",
"enum": [
"score",
"rated",
"newest",
"name"
]
},
"page": {
"default": 1,
"type": "integer",
"minimum": 1,
"maximum": 9999
},
"limit": {
"default": 24,
"type": "integer",
"minimum": 1,
"maximum": 50
},
"response_format": {
"default": "markdown",
"type": "string",
"enum": [
"markdown",
"json"
]
},
"context": {
"type": "string",
"description": "Explain in 15-25 words, in third person, why this tool is called and how it supports the user's goal. For analytics only. You MUST describe only the abstract purpose of the tool call. NEVER include, repeat, paraphrase, or infer personal, sensitive, or identifying information from the user request or tool results, including names, emails, phone numbers, IPs, IDs, or credentials. You MUST generalize specific entities into roles such as \"a user\", \"the customer\", or \"an account\". Example: \"Retrieving a customer's recent orders to investigate a billing issue and help support determine the appropriate resolution.\""
}
},
"required": [
"context"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢fragrance_get(id, slug, response_format, context)
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.
Input Schema
{
"type": "object",
"properties": {
"id": {
"description": "Fragrance UUID or CUID",
"anyOf": [
{
"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)$"
},
{
"type": "string",
"format": "cuid",
"pattern": "^[cC][0-9a-z]{6,}$"
}
]
},
"slug": {
"description": "'brand-slug/fragrance-slug', e.g. 'tom-ford/oud-wood'",
"type": "string",
"minLength": 1
},
"response_format": {
"default": "markdown",
"type": "string",
"enum": [
"markdown",
"json"
]
},
"context": {
"type": "string",
"description": "Explain in 15-25 words, in third person, why this tool is called and how it supports the user's goal. For analytics only. You MUST describe only the abstract purpose of the tool call. NEVER include, repeat, paraphrase, or infer personal, sensitive, or identifying information from the user request or tool results, including names, emails, phone numbers, IPs, IDs, or credentials. You MUST generalize specific entities into roles such as \"a user\", \"the customer\", or \"an account\". Example: \"Retrieving a customer's recent orders to investigate a billing issue and help support determine the appropriate resolution.\""
}
},
"required": [
"context"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢fragrance_get_reviews(id, sort, cursor, limit, response_format, ...)
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.
Input Schema
{
"type": "object",
"properties": {
"id": {
"anyOf": [
{
"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)$"
},
{
"type": "string",
"format": "cuid",
"pattern": "^[cC][0-9a-z]{6,}$"
}
],
"description": "Fragrance UUID or CUID"
},
"sort": {
"default": "most_liked",
"type": "string",
"enum": [
"most_liked",
"newest",
"highest",
"lowest"
]
},
"cursor": {
"type": "string"
},
"limit": {
"default": 20,
"type": "integer",
"minimum": 1,
"maximum": 50
},
"response_format": {
"default": "markdown",
"type": "string",
"enum": [
"markdown",
"json"
]
},
"context": {
"type": "string",
"description": "Explain in 15-25 words, in third person, why this tool is called and how it supports the user's goal. For analytics only. You MUST describe only the abstract purpose of the tool call. NEVER include, repeat, paraphrase, or infer personal, sensitive, or identifying information from the user request or tool results, including names, emails, phone numbers, IPs, IDs, or credentials. You MUST generalize specific entities into roles such as \"a user\", \"the customer\", or \"an account\". Example: \"Retrieving a customer's recent orders to investigate a billing issue and help support determine the appropriate resolution.\""
}
},
"required": [
"id",
"context"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢fragrance_get_wearing_stats(id, response_format, context)
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.
Input Schema
{
"type": "object",
"properties": {
"id": {
"anyOf": [
{
"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)$"
},
{
"type": "string",
"format": "cuid",
"pattern": "^[cC][0-9a-z]{6,}$"
}
],
"description": "Fragrance UUID or CUID"
},
"response_format": {
"default": "markdown",
"type": "string",
"enum": [
"markdown",
"json"
]
},
"context": {
"type": "string",
"description": "Explain in 15-25 words, in third person, why this tool is called and how it supports the user's goal. For analytics only. You MUST describe only the abstract purpose of the tool call. NEVER include, repeat, paraphrase, or infer personal, sensitive, or identifying information from the user request or tool results, including names, emails, phone numbers, IPs, IDs, or credentials. You MUST generalize specific entities into roles such as \"a user\", \"the customer\", or \"an account\". Example: \"Retrieving a customer's recent orders to investigate a billing issue and help support determine the appropriate resolution.\""
}
},
"required": [
"id",
"context"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢brand_get(slug, response_format, context)
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.
Input Schema
{
"type": "object",
"properties": {
"slug": {
"type": "string",
"description": "Brand slug, e.g. 'maison-francis-kurkdjian'"
},
"response_format": {
"default": "markdown",
"type": "string",
"enum": [
"markdown",
"json"
]
},
"context": {
"type": "string",
"description": "Explain in 15-25 words, in third person, why this tool is called and how it supports the user's goal. For analytics only. You MUST describe only the abstract purpose of the tool call. NEVER include, repeat, paraphrase, or infer personal, sensitive, or identifying information from the user request or tool results, including names, emails, phone numbers, IPs, IDs, or credentials. You MUST generalize specific entities into roles such as \"a user\", \"the customer\", or \"an account\". Example: \"Retrieving a customer's recent orders to investigate a billing issue and help support determine the appropriate resolution.\""
}
},
"required": [
"slug",
"context"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢perfumer_get(slug, response_format, context)
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.
Input Schema
{
"type": "object",
"properties": {
"slug": {
"type": "string",
"description": "Perfumer slug, e.g. 'francis-kurkdjian', 'jacques-polge'"
},
"response_format": {
"default": "markdown",
"type": "string",
"enum": [
"markdown",
"json"
]
},
"context": {
"type": "string",
"description": "Explain in 15-25 words, in third person, why this tool is called and how it supports the user's goal. For analytics only. You MUST describe only the abstract purpose of the tool call. NEVER include, repeat, paraphrase, or infer personal, sensitive, or identifying information from the user request or tool results, including names, emails, phone numbers, IPs, IDs, or credentials. You MUST generalize specific entities into roles such as \"a user\", \"the customer\", or \"an account\". Example: \"Retrieving a customer's recent orders to investigate a billing issue and help support determine the appropriate resolution.\""
}
},
"required": [
"slug",
"context"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢note_explore(note, response_format, context)
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.
Input Schema
{
"type": "object",
"properties": {
"note": {
"type": "string",
"description": "Note slug, e.g. 'oud', 'iris', 'ambroxan', 'bergamot'"
},
"response_format": {
"default": "markdown",
"type": "string",
"enum": [
"markdown",
"json"
]
},
"context": {
"type": "string",
"description": "Explain in 15-25 words, in third person, why this tool is called and how it supports the user's goal. For analytics only. You MUST describe only the abstract purpose of the tool call. NEVER include, repeat, paraphrase, or infer personal, sensitive, or identifying information from the user request or tool results, including names, emails, phone numbers, IPs, IDs, or credentials. You MUST generalize specific entities into roles such as \"a user\", \"the customer\", or \"an account\". Example: \"Retrieving a customer's recent orders to investigate a billing issue and help support determine the appropriate resolution.\""
}
},
"required": [
"note",
"context"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢fragrance_compare(fragrance_a, fragrance_b, response_format, context)
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.
Input Schema
{
"type": "object",
"properties": {
"fragrance_a": {
"anyOf": [
{
"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)$"
},
{
"type": "string",
"format": "cuid",
"pattern": "^[cC][0-9a-z]{6,}$"
}
],
"description": "First fragrance UUID or CUID"
},
"fragrance_b": {
"anyOf": [
{
"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)$"
},
{
"type": "string",
"format": "cuid",
"pattern": "^[cC][0-9a-z]{6,}$"
}
],
"description": "Second fragrance UUID or CUID (must differ from fragrance_a)"
},
"response_format": {
"default": "markdown",
"type": "string",
"enum": [
"markdown",
"json"
]
},
"context": {
"type": "string",
"description": "Explain in 15-25 words, in third person, why this tool is called and how it supports the user's goal. For analytics only. You MUST describe only the abstract purpose of the tool call. NEVER include, repeat, paraphrase, or infer personal, sensitive, or identifying information from the user request or tool results, including names, emails, phone numbers, IPs, IDs, or credentials. You MUST generalize specific entities into roles such as \"a user\", \"the customer\", or \"an account\". Example: \"Retrieving a customer's recent orders to investigate a billing issue and help support determine the appropriate resolution.\""
}
},
"required": [
"fragrance_a",
"fragrance_b",
"context"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢fragrance_review_digest(id, response_format, context)
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.
Input Schema
{
"type": "object",
"properties": {
"id": {
"anyOf": [
{
"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)$"
},
{
"type": "string",
"format": "cuid",
"pattern": "^[cC][0-9a-z]{6,}$"
}
],
"description": "Fragrance UUID or CUID to get the review digest for"
},
"response_format": {
"default": "markdown",
"type": "string",
"enum": [
"markdown",
"json"
]
},
"context": {
"type": "string",
"description": "Explain in 15-25 words, in third person, why this tool is called and how it supports the user's goal. For analytics only. You MUST describe only the abstract purpose of the tool call. NEVER include, repeat, paraphrase, or infer personal, sensitive, or identifying information from the user request or tool results, including names, emails, phone numbers, IPs, IDs, or credentials. You MUST generalize specific entities into roles such as \"a user\", \"the customer\", or \"an account\". Example: \"Retrieving a customer's recent orders to investigate a billing issue and help support determine the appropriate resolution.\""
}
},
"required": [
"id",
"context"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢user_get_cabinet(status, sort, cursor, limit, response_format, ...)
Get your fragrance cabinet — fragrances you own, have tried, or finished. Free for any signed-in 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.
Input Schema
{
"type": "object",
"properties": {
"status": {
"default": "all",
"type": "string",
"enum": [
"CURRENT",
"TRIED",
"FINISHED",
"all"
]
},
"sort": {
"default": "recent",
"type": "string",
"enum": [
"recent",
"score",
"alpha"
]
},
"cursor": {
"type": "string"
},
"limit": {
"default": 30,
"type": "integer",
"minimum": 1,
"maximum": 50
},
"response_format": {
"default": "markdown",
"type": "string",
"enum": [
"markdown",
"json"
]
},
"context": {
"type": "string",
"description": "Explain in 15-25 words, in third person, why this tool is called and how it supports the user's goal. For analytics only. You MUST describe only the abstract purpose of the tool call. NEVER include, repeat, paraphrase, or infer personal, sensitive, or identifying information from the user request or tool results, including names, emails, phone numbers, IPs, IDs, or credentials. You MUST generalize specific entities into roles such as \"a user\", \"the customer\", or \"an account\". Example: \"Retrieving a customer's recent orders to investigate a billing issue and help support determine the appropriate resolution.\""
}
},
"required": [
"context"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢user_get_wishlist(cursor, limit, response_format, context)
Get your fragrance wishlist. Free for any signed-in account. See also: `fragrance_get` for full details on any wishlist fragrance · `user_get_cabinet` for fragrances you already own.
Input Schema
{
"type": "object",
"properties": {
"cursor": {
"type": "string"
},
"limit": {
"default": 30,
"type": "integer",
"minimum": 1,
"maximum": 50
},
"response_format": {
"default": "markdown",
"type": "string",
"enum": [
"markdown",
"json"
]
},
"context": {
"type": "string",
"description": "Explain in 15-25 words, in third person, why this tool is called and how it supports the user's goal. For analytics only. You MUST describe only the abstract purpose of the tool call. NEVER include, repeat, paraphrase, or infer personal, sensitive, or identifying information from the user request or tool results, including names, emails, phone numbers, IPs, IDs, or credentials. You MUST generalize specific entities into roles such as \"a user\", \"the customer\", or \"an account\". Example: \"Retrieving a customer's recent orders to investigate a billing issue and help support determine the appropriate resolution.\""
}
},
"required": [
"context"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢user_get_collections(collectionId, response_format, context)
Get your collections (fragrance lists). Optionally pass a collectionId to see its items. Free for any signed-in account. See also: `fragrance_get` for full details on any fragrance in a collection.
Input Schema
{
"type": "object",
"properties": {
"collectionId": {
"description": "If given, return items in this collection",
"type": "string"
},
"response_format": {
"default": "markdown",
"type": "string",
"enum": [
"markdown",
"json"
]
},
"context": {
"type": "string",
"description": "Explain in 15-25 words, in third person, why this tool is called and how it supports the user's goal. For analytics only. You MUST describe only the abstract purpose of the tool call. NEVER include, repeat, paraphrase, or infer personal, sensitive, or identifying information from the user request or tool results, including names, emails, phone numbers, IPs, IDs, or credentials. You MUST generalize specific entities into roles such as \"a user\", \"the customer\", or \"an account\". Example: \"Retrieving a customer's recent orders to investigate a billing issue and help support determine the appropriate resolution.\""
}
},
"required": [
"context"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢user_get_reviews(kind, cursor, limit, response_format, context)
Get reviews you've written, or reviews you found helpful. Free for any signed-in account. See also: `fragrance_get_reviews` for community reviews on a specific fragrance.
Input Schema
{
"type": "object",
"properties": {
"kind": {
"default": "written",
"type": "string",
"enum": [
"written",
"helpful"
]
},
"cursor": {
"type": "string"
},
"limit": {
"default": 20,
"type": "integer",
"minimum": 1,
"maximum": 50
},
"response_format": {
"default": "markdown",
"type": "string",
"enum": [
"markdown",
"json"
]
},
"context": {
"type": "string",
"description": "Explain in 15-25 words, in third person, why this tool is called and how it supports the user's goal. For analytics only. You MUST describe only the abstract purpose of the tool call. NEVER include, repeat, paraphrase, or infer personal, sensitive, or identifying information from the user request or tool results, including names, emails, phone numbers, IPs, IDs, or credentials. You MUST generalize specific entities into roles such as \"a user\", \"the customer\", or \"an account\". Example: \"Retrieving a customer's recent orders to investigate a billing issue and help support determine the appropriate resolution.\""
}
},
"required": [
"context"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢user_get_wearing_history(cursor, limit, response_format, context)
Get your wearing check-in history over time. Free for any signed-in account. See also: `fragrance_get_wearing_stats` for aggregate community wearing data on a specific fragrance.
Input Schema
{
"type": "object",
"properties": {
"cursor": {
"type": "string"
},
"limit": {
"default": 30,
"type": "integer",
"minimum": 1,
"maximum": 50
},
"response_format": {
"default": "markdown",
"type": "string",
"enum": [
"markdown",
"json"
]
},
"context": {
"type": "string",
"description": "Explain in 15-25 words, in third person, why this tool is called and how it supports the user's goal. For analytics only. You MUST describe only the abstract purpose of the tool call. NEVER include, repeat, paraphrase, or infer personal, sensitive, or identifying information from the user request or tool results, including names, emails, phone numbers, IPs, IDs, or credentials. You MUST generalize specific entities into roles such as \"a user\", \"the customer\", or \"an account\". Example: \"Retrieving a customer's recent orders to investigate a billing issue and help support determine the appropriate resolution.\""
}
},
"required": [
"context"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢user_taste_public(username, response_format, context)
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.
Input Schema
{
"type": "object",
"properties": {
"username": {
"type": "string",
"description": "Username (handle) of the user to view"
},
"response_format": {
"default": "markdown",
"type": "string",
"enum": [
"markdown",
"json"
]
},
"context": {
"type": "string",
"description": "Explain in 15-25 words, in third person, why this tool is called and how it supports the user's goal. For analytics only. You MUST describe only the abstract purpose of the tool call. NEVER include, repeat, paraphrase, or infer personal, sensitive, or identifying information from the user request or tool results, including names, emails, phone numbers, IPs, IDs, or credentials. You MUST generalize specific entities into roles such as \"a user\", \"the customer\", or \"an account\". Example: \"Retrieving a customer's recent orders to investigate a billing issue and help support determine the appropriate resolution.\""
}
},
"required": [
"username",
"context"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢user_taste_summary(response_format, context)
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.
Input Schema
{
"type": "object",
"properties": {
"response_format": {
"default": "markdown",
"type": "string",
"enum": [
"markdown",
"json"
]
},
"context": {
"type": "string",
"description": "Explain in 15-25 words, in third person, why this tool is called and how it supports the user's goal. For analytics only. You MUST describe only the abstract purpose of the tool call. NEVER include, repeat, paraphrase, or infer personal, sensitive, or identifying information from the user request or tool results, including names, emails, phone numbers, IPs, IDs, or credentials. You MUST generalize specific entities into roles such as \"a user\", \"the customer\", or \"an account\". Example: \"Retrieving a customer's recent orders to investigate a billing issue and help support determine the appropriate resolution.\""
}
},
"required": [
"context"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢user_taste_compare(target_user_id, with_overview, response_format, context)
Compare your taste with another user — compatibility score, shared and divergent notes/accords/families, and an optional AI overview. Free for any signed-in account; the AI overview needs Pro and is left out otherwise. See also: `user_taste_public` for a user's top preferences · `user_taste_summary` for your own summary.
Input Schema
{
"type": "object",
"properties": {
"target_user_id": {
"type": "string",
"description": "User ID to compare your taste with"
},
"with_overview": {
"default": true,
"description": "Include the AI overview (Pro only; left out for free accounts)",
"type": "boolean"
},
"response_format": {
"default": "markdown",
"type": "string",
"enum": [
"markdown",
"json"
]
},
"context": {
"type": "string",
"description": "Explain in 15-25 words, in third person, why this tool is called and how it supports the user's goal. For analytics only. You MUST describe only the abstract purpose of the tool call. NEVER include, repeat, paraphrase, or infer personal, sensitive, or identifying information from the user request or tool results, including names, emails, phone numbers, IPs, IDs, or credentials. You MUST generalize specific entities into roles such as \"a user\", \"the customer\", or \"an account\". Example: \"Retrieving a customer's recent orders to investigate a billing issue and help support determine the appropriate resolution.\""
}
},
"required": [
"target_user_id",
"context"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}Community
Evidence