Perfume Picks MCP Server
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@Perfume Picks MCP Serverfind a dupe for Dior Sauvage"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
Perfume Picks MCP Server
Query the Perfume Picks fragrance database from Claude, or any MCP-compatible AI client. Read-only access to 13,000+ fragrances with full note pyramids, accords, curated dupes, and community wear data.
Perfume Picks is the Fragrance DNA and collection journal for iOS — get it on the App Store.
Tools
Tool | What it does |
| Full-text catalog search with brand, family, gender, and MSRP filters |
| Full record for one scent (by slug or name): note pyramid, accords, community scores |
| Curated cheaper smell-alikes with match percentage — "what smells like X without the price tag" |
| Most-similar fragrances from a precomputed similarity ranking |
| Picks from note/accord preferences + budget + occasion + gender |
| Side-by-side: notes, shared/distinct accords, scores, price delta |
| What Perfume Picks users are adding to their wardrobes right now |
| A scent for right now — date-night picks use community compliment data, office picks use office-safety scores |
Every response includes source attribution, a citation-ready summary line, links, and data freshness dates. All scoring is deterministic — no AI calls happen inside the server. All tools are annotated read-only/idempotent.
Related MCP server: Discord Message Finder MCP
Install (Claude Desktop)
Requires Node.js 18+.
Add to your claude_desktop_config.json (Claude Desktop → Settings → Developer → Edit Config):
{
"mcpServers": {
"perfume-picks": {
"command": "npx",
"args": ["-y", "perfume-picks-mcp"]
}
}
}Restart Claude Desktop. No API key or configuration needed — the server ships with public read-only access.
Configuration (optional)
Environment variables override the defaults (explicit env vars only — this package never reads .env files):
Variable | Purpose |
| Override the database URL |
| Internal use only — unlocks live 30-day wardrobe-add trending. Never distribute this key. |
Without the service key, trending_fragrances falls back to catalog popularity and labels the method in its response.
Remote endpoint (no install)
Streamable HTTP for web agents and MCP clients that take a URL:
https://jdkwlwyysgofljkobpmr.supabase.co/functions/v1/mcpAlso listed on Smithery and the official MCP registry as io.github.bguillow-rgb/perfume-picks.
Example agent requests
Questions an agent can answer with these tools:
"What smells like Baccarat Rouge 540 without the price tag?" →
find_dupes(curated dupes with match %, e.g. Lattafa Ana Abiyedh Rouge, 90%)"Recommend a fragrance for a summer wedding." →
get_recommendationswithoccasion: "wedding""What fragrances have bergamot, vanilla, and amber?" →
get_recommendationswith those notes aspreferences"What perfume is similar to Bleu de Chanel?" →
find_similar"What should I wear on a date tonight?" →
what_to_wear_tonight(scored by community compliment data)"Compare Sauvage and Bleu de Chanel." →
compare_fragrances
Example response shape (truncated):
{
"dupes": [
{ "name": "Lattafa Ana Abiyedh Rouge", "match_pct": 90,
"savings_usd": 200.0, "msrp_usd": 39.99 }
],
"attribution": {
"source": "Perfume Picks — Fragrance DNA & Collection Journal",
"links": { "website": "https://perfumepicks.app/" }
}
}Development
npm install
npm run dev # run from TypeScript via tsx
npm run build # compile to dist/
npm start # run compiled serverThe server speaks MCP over stdio. Catalog access is read-only by construction: every query path issues SELECTs against tables that are publicly readable under row-level security, and it is rate-limited to 60 calls/minute.
Usage telemetry: each tool call logs the tool name, its arguments, client name/version, duration, and success/failure to a write-only log table (insert-only under RLS; contents are not publicly readable; purged after 90 days). No user identity, account data, or conversation content is collected. Logging is fire-and-forget and never affects responses.
Data & attribution
Fragrance data, note pyramids, dupe matches, and community scores are curated by Perfume Picks. Quote freely with attribution:
Source: Perfume Picks — Fragrance DNA & Collection Journal (perfumepicks.app)
Freshness dates on each fragrance reflect the last data update.
Available Tools
8 toolscompare_fragrancesCompare two fragrancesARead-onlyIdempotentInspect
Side-by-side comparison: note pyramids, shared and distinct accords, longevity/sillage/compliment scores, concentration, and price difference.
| Name | Required | Description | Default |
|---|---|---|---|
| fragrance_a | Yes | First fragrance — slug or name | |
| fragrance_b | Yes | Second fragrance — slug or name |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare the tool is read-only, idempotent, and non-destructive, which covers the main behavioral risks. The description adds value by disclosing what the comparison returns: note pyramids, accords, longevity/sillage/compliment scores, concentration, and price difference.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, well-structured sentence that fronts the core operation and then lists what the comparison covers. There is no redundant or speculative content.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a two-parameter, read-only comparison tool, the description is complete enough: it names the output dimensions, and the annotations plus schema cover the safety and input details. There is no output schema, so the explicit field list in the description effectively compensates for that gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Both parameters are fully described in the schema as 'slug or name', so schema coverage is 100%. The description confirms that the two inputs are fragrances but does not add any significant parameter-level guidance beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a concrete operation with a specific verb and resource: a side-by-side comparison of two fragrances. It also specifies the comparison dimensions, making it clearly distinct from sibling tools like get_fragrance, find_similar, and find_dupes.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description makes it clear that the tool is appropriate when the user wants to compare exactly two fragrances. However, it does not explicitly say when not to use it or point to alternatives such as find_similar for one-to-many or find_dupes for duplication-oriented comparisons.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
find_dupesFind dupes (cheaper smell-alikes)ARead-onlyIdempotentInspect
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'.
| Name | Required | Description | Default |
|---|---|---|---|
| fragrance | Yes | Fragrance slug or name to find dupes for |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover read-only, idempotent, non-destructive behavior. The description adds useful context about curatorship and price/match output but does not describe result structure, limits, or fallback behavior, so a middle score is appropriate.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two front-loaded sentences with no redundancy. The core purpose comes first, and the 'without the price tag' framing adds useful orientation without padding.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-parameter report-only tool, this is mostly complete. It communicates the return theme (dupes with match percentage and price comparison), though an explicit format or example would make it fully self-contained.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%: the parameter already states it accepts a fragrance slug or name. The tool description does not add additional parameter-level meaning, so it relies on the schema to carry this dimension.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific action and resource: finding curated, cheaper smell-alikes for a fragrance. The description clearly separates this from general similar-fragrance lookups by emphasizing documented dupes and price comparison.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly maps to the use case: 'what smells like X without the price tag.' It does not formally name alternatives or say when not to use the tool, but the context is clear enough for an agent to route correctly.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
find_similarFind similar fragrancesARead-onlyIdempotentInspect
Fragrances most similar to a given one, from Perfume Picks' precomputed similarity ranking over notes and accords.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Max results (default 5) | |
| fragrance | Yes | Fragrance slug or name |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already provide the read-only, idempotent, and non-destructive safety profile. The description adds meaningful behavioral context by explicitly stating that results come from a precomputed similarity ranking over notes and accords, implying the response is not dynamically generated.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single, dense sentence that fronts the core behavior and follows with only the essential source detail. Every word earns its place and there is no filler or repetition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple, read-only tool with complete schema descriptions, the tool's core behavior and data source are adequately described. The only notable gap is the lack of explicit disambiguation against 'find_dupes' and 'get_recommendations', which could matter for tool selection.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so both 'fragrance' and 'limit' are already documented. The description only reinforces that a single source fragrance is the anchor input. It does not add any extra meaning about the limit behavior or expected input format.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool returns fragrances most similar to a given one, and adds the distinguishing source ('precomputed similarity ranking over notes and accords'). It does not explicitly contrast with the similarly named sibling 'find_dupes', so it falls just short of full differentiation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The use case is implied: provide a given fragrance and get similar fragrances from a precomputed ranking. There is no direct guidance on when to choose this over siblings like 'find_dupes' or 'get_recommendations', and no explicit exclusion criteria.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_fragranceGet fragrance detailsARead-onlyIdempotentInspect
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'.
| Name | Required | Description | Default |
|---|---|---|---|
| slug_or_name | Yes | Fragrance slug or name |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already communicate read-only, idempotent, non-destructive behavior. The description goes further by specifying the exact return contents, which compensates for the missing output schema, and it also discloses that names, not only slugs, are acceptable inputs — a behavior an agent could not infer from the schema alone.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two tight, information-dense sentences front-load the output content before the input format. Every word contributes to operational success; there is no filler, repetition with the schema, or irrelevant formal language.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a one-parameter read operation with no output schema, the description provides everything needed to call it correctly: what input to supply, what format it accepts, and exactly what fields the returned record will contain. The tool's simple scope means no additional setup, prerequisite, or postcondition disclosure is necessary.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema already names the parameter 'slug_or_name' and describes it, so baseline is 3. The description adds meaningful value by specifying a 'Perfume Picks slug' and giving the concrete example 'Bleu de Chanel', which clarifies formatting, exact-match expectations, and the acceptable vocabulary for the identifier.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific resource ('detailed record for one fragrance') and enumerates its distinct content (note pyramid, accords, concentration, community scores, MSRP). It clearly differentiates from sibling tools like search_fragrances by emphasizing lookup-by-slug-or-name of a single item rather than discovery or comparison.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives clear context for when to use the tool: when you have a specific fragrance slug or name and need the full detailed record. It does not explicitly say when not to use it or name alternatives, but the 'one fragrance' framing combined with the accepted inputs implies it is for bounded lookup operations rather than broader exploration.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_recommendationsGet personalized recommendationsARead-onlyIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Max results (default 5) | |
| budget | No | Max MSRP in USD | |
| gender | No | Marketed gender category of the fragrance; omit to include all | |
| occasion | No | What the fragrance is for | |
| preferences | Yes | Notes or accords the wearer enjoys, e.g. ['vanilla','amber','rose'] |
TDQS
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 the input scope of recommendation but does not describe response shape, ranking behavior, or side effects, and there is no output schema to fill that gap.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence, front-loaded with the main behavior, and packs parameter semantics through compact examples. Each phrase adds meaning without raw repetition of the schema.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only, idempotent recommendation tool with a small required parameter set, this description is mostly complete: it explains the recommendation basis and optional dimensions. Without an output schema, a brief note on the returned list structure would be helpful, but 'fragrance picks' already implies the general shape.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Since schema description coverage is 100%, the schema already owns formal parameter documentation. The description adds useful gloss by giving concrete values for preferences, budget units, and occasion examples, which helps an agent form realistic call payloads.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific task: returning personalized fragrance picks based on taste preferences, budget, occasion, and gender category. It distinguishes this from the sibling search, dupe, similar, and trending tools by centering on recommendation-style filtering by personal context.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives a clear use case and names the relevant inputs: notes, budget, occasion, and gender. It does not explicitly tell an agent when not to use this tool or name sibling alternatives, but the personalization angle makes the intended context reasonably obvious.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_fragrancesSearch the Perfume Picks catalogARead-onlyIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| brand | No | Brand name filter, e.g. 'Dior' | |
| limit | No | Max results (default 10) | |
| query | No | Free-text search: fragrance or brand name | |
| gender | No | Marketed gender category of the fragrance; omit to include all | |
| price_max | No | Maximum MSRP in USD | |
| price_min | No | Minimum MSRP in USD | |
| fragrance_family | No | Family filter, e.g. 'woody', 'amber', 'fresh' |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already indicate a read-only, idempotent, non-destructive operation, so the safety profile is covered. The description adds useful behavioral context by naming the catalog size, filterable dimensions, and return content (note pyramids, accords, community wear scores, source attribution), but it does not disclose deeper behavior like matching semantics or edge cases.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a compact two-sentence structure: an action-oriented opening followed by filter detail and return-value detail. Every sentence adds information with no filler or redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given 7 optional parameters, full schema coverage, and no output schema, the description provides meaningful context about scope and result content. It is missing some explicit guidance on query behavior when no filters are provided, but it is otherwise complete enough for an agent to decide whether to invoke this search tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
All 7 parameters have descriptions in the input schema, and schema coverage is 100%. The description briefly restates common filters like brand, fragrance_family, gender, and MSRP, but it neither conflicts with the schema nor adds meaning beyond it, so the baseline score of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with 'Full-text search across 13,000+ fragrances in the Perfume Picks database', naming the exact verb, resource, and scope. It also lists filters and return fields, making it clearly distinct from sibling tools like get_fragrance or find_similar.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description says this is for full-text search with filters, which implicitly identifies a general search use case. However, it never explicitly states when to prefer this over alternative sibling tools such as find_similar or get_recommendations, leaving some selection burden on the agent.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
trending_fragrancesTrending fragrancesARead-onlyIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Max results (default 10) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate the operation is readOnly, idempotent, and non-destructive. The description adds meaningful behavioral detail beyond those annotations, including the fallback to catalog popularity when live data is unavailable and the fact that the chosen method is labeled in the response.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single tight sentence that includes key details with no filler. The sentence reads slightly awkwardly, but it is efficient and front-loaded with the core concept.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a low-complexity tool with only one optional parameter, the description covers the data source, time window, fallback behavior, and response labeling. While there is no output schema, the basic return type is clearly implied, and the annotation covers the safety profile.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has full coverage for the only parameter, 'limit', including its min, max, default, and description. The tool description adds no additional meaning about the parameter, so the baseline score of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly identifies the resource (fragrances) and the specific ranking signal (fragrance users are adding to their wardrobes over the last 30 days), so an agent can understand what is returned. It doesn't include an explicit verb like 'lists' and does not directly name siblings, but the title and content together make the purpose unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides useful context about when the data is available and when it falls back to catalog popularity, but it never explicitly states when to choose this tool over the other fragrance tools. Usage is implied by the word 'trending' and the 30-day framing, not explicitly defined.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
what_to_wear_tonightWhat should I wear tonight?ARead-onlyIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| mood | No | How you're feeling | |
| gender | No | Marketed gender category of the fragrance; omit to include all | |
| season | No | Season to weight the pick toward — heavier, warmer scents in winter; fresher in summer | |
| occasion | No | The setting |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare read-only, idempotent, and non-destructive behavior, so the safety profile is covered. The description adds value by revealing that recommendations are scored with community compliment, office-safety, and versatility data, but it does not explain potential output variations or edge behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single, front-loaded sentence expresses the tool's purpose, decision inputs, and scoring context. It includes helpful examples without lengthy padding, making it easy for an agent to scan.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description explains the reason for being and the key decision variables, and it notes the data source behind scoring. However, with no output schema, it does not clarify whether the response is a single fragrance, a ranked list, or requires additional follow-up, which would help an agent set expectations.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so parameters are already documented at the schema level. The tool description reinforces the spirit of occasion and season with examples, but it does not add any required meaning beyond what the schema already states.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly presents the tool as a time-sensitive fragrance suggestion driven by mood, occasion, and season. It distinguishes itself from search/get/similar siblings by emphasizing 'for right now', but it does not use an explicit verb like 'recommends' and does not name the most similar sibling, get_recommendations.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The occasion examples ('date', 'office tomorrow', 'night out', 'cozy evening in') and the 'right now' framing signal when this tool should be used. It does not explicitly state when not to use it or draw a contrast with get_recommendations, but the intended context is clear enough for an agent to spend some time.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
TDQS
Each tool targets a distinct read-only fragrance discovery step: lookup, search, dupes, similar scents, recommendations, comparison, trends, and a now-oriented suggestion. There is minor overlap between get_recommendations and what_to_wear_tonight, and between find_similar and find_dupes, but the descriptions clarify their different inputs and intents.
Most tool names follow a readable snake_case action_noun pattern such as get_fragrance, search_fragrances, and compare_fragrances. The main deviations are trending_fragrances and what_to_wear_tonight, which are still understandable but break the consistent verb-first pattern.
Eight tools is a well-balanced size for a fragrance discovery server. Each tool covers a meaningful step in the experience—exploring, understanding, comparing, recommending, and discovering—without unnecessary duplication.
The tool set covers the core discovery loop thoroughly: search the catalog, fetch details, compare fragrances, find alternatives, get personalized recommendations, check trends, and get a contextual suggestion. Any omitted write-oriented operations are outside the server's apparent read-only scope.
Maintenance
Related MCP Connectors
Fragrance & perfume MCP: search fragrances, notes, accords, brands, perfumers, reviews & charts.
Read-only MCP server for verified book recommendations and reading lists.
Public read-only MCP server to discover and compare maternity and nursing fashion.
Fragrance encyclopedia: note pyramids, accords, perfumers and dupes (parfica.com).
Related MCP Servers
- FlicenseNot gradedqualityBmaintenanceRead-only X/Twitter research MCP server allowing AI assistants to search viral content, analyze accounts, track trends, and discover niche leaders without requiring the official X API.48
- FlicenseAqualityCmaintenanceRead-only MCP server for finding Discord messages. It enables searching guild messages, locating messages from jump URLs, and reading context around results.71
- AlicenseNot gradedqualityCmaintenanceRead-only MCP server for Discord that lists guilds, channels, and reads or searches messages using a self-bot account via discord.py-self.MIT

Noteboxd MCPofficial
AlicenseAqualityCmaintenanceMCP server that lets AI assistants query the Noteboxd fragrance encyclopedia for fragrances, notes, accords, brands, perfumers, reviews, and charts. Enables natural-language queries like comparisons, recommendations, and review digests.19931MIT
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/bguillow-rgb/perfume-picks-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server