Scento Perfume API (MCP server)
OfficialA free, read-only MCP server that lets AI assistants answer perfume questions from Scento's verified 1,400+ fragrance database, always with scento.com source links.
Search perfumes, houses and raw materials by name, house, note or mood word (with kind filter and paging)
Get a full perfume portrait: pyramid, Scento family, character and when it wears best
Find structurally similar scents (scent neighbours), optionally limited to the same house
Contrast 2–4 perfumes side by side on family, pyramid, character and season
Explain a note or raw material: what it is, where it comes from, how it reads on skin
Find perfumes containing 1–4 given materials, optionally in one pyramid tier or family
Get a house portrait: origin, founding year, style and signature perfumes
Explore Scento's fragrance-family system, or one family with subfamilies and exemplars
Pull a short edit for an occasion, season or climate, with an optional gender lean
Compose a 3–5 perfume wardrobe around what someone already loves, with exclusions
Look up perfumery terms (sillage, drydown, chypre, EDP vs EDT)
Search Scento journal articles on perfumes, houses, materials or topics
Every tool is read-only and idempotent;
langreturns localized scento.com links, and list tools support continuation paging
Click on "Deploy 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., "@Scento Perfume API (MCP server)compare Bleu de Chanel and Dior Sauvage side by side"
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.
Scento Perfume API (MCP server): Perfume API, Fragrance API and Perfume MCP Server
A free perfume and fragrance API and MCP server for AI assistants, built on Scento's verified perfume database. From Scento, a perfume decant house founded in Paris in 2024.
Ask Claude, ChatGPT, Cursor or any MCP client for a perfume's notes and family, the difference between two you are torn over, similar scents built on the same structure, or what a raw material such as ambroxan smells like. The perfume database covers 1,400+ designer and niche perfumes, 400+ raw materials, 140+ houses and Scento's own fragrance-family system, and every answer is tied to a page on scento.com. No key, no account, read-only.
Remote server: https://www.scento.com/mcp (streamable HTTP, no authentication)
Docs: https://www.scento.com/developers
Connect the perfume MCP server
Client | How |
Claude (web, desktop, mobile) | Settings, Connectors, Add custom connector. Paste |
ChatGPT | Settings, Connectors, create a connector in developer mode. Server URL |
Cursor | Add to |
VS Code | Add to |
Claude Code |
|
Clients that only run local servers can use the stdio bridge in this repo:
npx -y scento-perfume-api # Node 18+
uvx scento-perfume-api # Python 3.9+Both accept --endpoint <url> (or SCENTO_PERFUME_API_ENDPOINT). The same bridge is also published as perfume-mcp-server and perfume-database on npm and PyPI.
Related MCP server: Vuntum MCP Server
Twelve perfume and fragrance tools
Tool | What it does |
| Find perfumes, houses and raw materials by name, house, note or mood word. |
| The full portrait of one perfume: pyramid, Scento family, character and when it wears best. |
| Perfumes that share the most structure with a given one, with the shared materials named. |
| Set two to four perfumes side by side on family, pyramid, character and season. |
| What a note or raw material is, where it comes from and how it reads on skin. |
| Perfumes that contain every material given, optionally in one tier of the pyramid. |
| A perfume house: origin, founding year, style and its signature perfumes. |
| Scento's own fragrance-family system, or one family with its subfamilies and exemplars. |
| A short edit of perfumes for an occasion, season or climate, with a line on each. |
| Three to five perfumes that cover different moments, built around what the person already loves. |
| Plain-language meaning of a perfumery term such as sillage, chypre, fougère or EDP versus EDT. |
| Scento journal articles on a perfume, house, material or topic. |
Pass lang (de, fr, es, it, ro, el, hu, cs, pl) to receive scento.com links in that language.
Fragrance API (REST)
The same answers are available as a perfume API over plain HTTP.
API base: https://www.scento.com/api/perfume/v1
Examples
Three raw JSON-RPC calls are in examples/.
Repository layout
npm/: the Node stdio bridge, published asscento-perfume-apion npmpypi/: the Python stdio bridge, published asscento-perfume-apion PyPIserver.json: metadata for the Official MCP Registry (com.scento/perfume-api)
Licence
MIT for the bridge code in this repository. The perfume database content is served from scento.com under its terms.
Available Tools
12 toolsfamily-mapExplore fragrance familiesARead-onlyIdempotentInspect
Use this when the user asks how fragrances are grouped or what a scent family is (for example woody, floral, amber, fresh, citrus), or wants the exemplar perfumes of one family (synonyms: scent families, fragrance categories, olfactive families). Returns Scento's own family system: the whole tree, or one family with its definition, subfamilies, exemplar perfumes and neighbouring families, with the scento.com guide. Don't use for one perfume's family (perfume-portrait), a perfumery term (perfumery-lexicon) or an occasion (occasion-edit).
| Name | Required | Description | Default |
|---|---|---|---|
| lang | No | Language of the scento.com links and labels; answers stay in English. Use the language the user writes in, for example "de" (German), "fr" (French), "es" (Spanish) or "it" (Italian). Default "en". | en |
| family | No | Optional family name or id. Examples: "Amber & Resin", "Wood & Root" or "white-bloom". Leave empty for the whole map. |
Output Schema
| Name | Required | Description |
|---|---|---|
| cite | Yes | |
| lede | Yes | |
| folio | Yes | |
| detail | Yes | |
| scento_page | Yes | |
| continuation | Yes | |
| further_reading | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, non-destructive and closed-world, so the safety profile is covered. The description adds genuine behavioral context beyond that: the source is Scento's own proprietary taxonomy (not a generic standard), and it discloses the payload shape — definition, subfamilies, exemplars, neighbouring families, and the scento.com guide. It doesn't discuss pagination or edge cases like an unknown family name, which keeps it from a 5.
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?
Front-loaded with the primary trigger and concrete examples before the return-value detail, which is the right ordering. The synonym parenthetical and the long return sentence are dense but each earns its place; only the synonym list is slightly redundant.
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?
An output schema exists, so return values need no further explanation, and annotations carry the safety profile. With only two fully documented optional parameters and explicit sibling routing, nothing an agent needs in order to invoke this correctly is missing.
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 both parameters are already documented, including the enum for lang and the 'leave empty for the whole map' default behavior for family. The description restates the family-name examples but adds no syntax or format guidance beyond the schema, so the baseline 3 applies.
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 resource (Scento's own fragrance family system) and precisely what it returns: the whole tree, or one family with definition, subfamilies, exemplar perfumes and neighbouring families. It also names boundary cases (single-perfume family, term, occasion) so the agent can tell it apart from perfume-portrait, perfumery-lexicon and occasion-edit.
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?
Opens with an explicit trigger ('when the user asks how fragrances are grouped or what a scent family is') plus concrete examples (woody, floral, amber, fresh, citrus) and a second trigger for exemplars of one family. It closes with explicit when-not-to-use routing to three named siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
house-portraitProfile a perfume houseARead-onlyIdempotentInspect
Use this when the user asks about a perfume house, brand or maison (for example Creed, Le Labo, Amouage): where it is from, when it was founded, its style and its signature perfumes. Returns country, founding year, style, signature perfumes with their families and the scento.com house page in the user's language. Don't use for one perfume (use perfume-portrait) or to list perfumes with a given note (material-match). If the house name is uncertain, call perfume-search with kind "house" first.
| Name | Required | Description | Default |
|---|---|---|---|
| lang | No | Language of the scento.com links and labels; answers stay in English. Use the language the user writes in, for example "de" (German), "fr" (French), "es" (Spanish) or "it" (Italian). Default "en". | en |
| house | Yes | One perfume house or brand, by name. Examples: "Maison Francis Kurkdjian", "Le Labo", "Amouage", "Parfums de Marly". |
Output Schema
| Name | Required | Description |
|---|---|---|
| cite | Yes | |
| lede | Yes | |
| folio | Yes | |
| detail | Yes | |
| scento_page | Yes | |
| continuation | Yes | |
| further_reading | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, destructiveHint=false and openWorldHint=false, so safety is covered. The description adds real context beyond that: the exact payload shape returned and the subtle language behavior (links/labels localized while answers stay in English). It doesn't discuss limits on ambiguous multi-house names beyond the search fallback, so it stops short of a 5.
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?
Three sentences, each doing distinct work: trigger, return shape, exclusions plus fallback. The trigger is front-loaded and there is no filler or repetition of the tool title.
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?
An output schema exists, so return values need no elaboration, and the description still sketches them. Combined with the routing guidance for siblings and the uncertain-name fallback, an agent has everything needed to select and invoke this tool correctly.
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% and the lang parameter's schema text already explains the links-vs-answers language split, so the description's mention of "the user's language" largely restates structured data. Baseline 3 is appropriate when the schema carries the parameter semantics.
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 verb+resource (profile a perfume house/brand/maison) and enumerates the returned fields: country, founding year, style, signature perfumes with families, and the scento.com house page. It explicitly distinguishes itself from perfume-portrait and material-match, so an agent can route correctly without opening any schema.
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?
Gives the triggering condition (user asks about a house/brand/maison), two explicit exclusions with the named alternatives (perfume-portrait for one perfume, material-match for listing perfumes by note), and a recovery path when the house name is uncertain (perfume-search with kind "house"). Nothing is left to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
journal-searchSearch the Scento journalARead-onlyIdempotentInspect
Use this when the user wants articles, guides or background reading on a perfume, fragrance, cologne, house, note or topic (for example layering, vetiver, how to make a scent last). Returns matching Scento journal articles with title, one-line summary and scento.com link in the user's language. Use it to give the reader something to read on. Don't use for a perfume's notes (perfume-portrait), a house profile (house-portrait) or a term's meaning (perfumery-lexicon).
| Name | Required | Description | Default |
|---|---|---|---|
| q | Yes | A perfume, house, note or topic to find articles on. Examples: "vetiver", "layering", "Creed Aventus", "make a scent last". | |
| lang | No | Language of the scento.com links and labels; answers stay in English. Use the language the user writes in, for example "de" (German), "fr" (French), "es" (Spanish) or "it" (Italian). Default "en". | en |
| continuation | No | The "continuation" value from a previous answer, passed back unchanged to get the next part of the list. |
Output Schema
| Name | Required | Description |
|---|---|---|
| cite | Yes | |
| lede | Yes | |
| folio | Yes | |
| detail | Yes | |
| scento_page | Yes | |
| continuation | Yes | |
| further_reading | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, non-destructive and closed-world, so the safety profile is covered. The description adds real context beyond them: the exact return payload (title, one-line summary, scento.com link), the localization behavior (links in the user's language, answers in English), and the reader-facing intent. It does not mention pagination, which is the one behavioral 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?
Four sentences, front-loaded with the trigger condition, then return shape, then exclusions. Every clause carries load — the examples, the output fields and the sibling routing all serve selection or invocation.
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 3-parameter read-only search with full schema coverage and an output schema, the description supplies everything an agent needs: trigger, exclusions, sibling routing and localization behavior. Return values are already covered by the output schema, so nothing material is missing.
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 the baseline is 3 and the schema already documents q, lang and continuation thoroughly. The description reinforces the localization nuance ('in the user's language') but adds no syntax, format or constraint detail beyond the schema, so it earns no more than baseline.
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 verb and resource ('search the Scento journal'), names the artifact returned (articles with title, one-line summary and link), and explicitly contrasts itself with three siblings. An agent can distinguish it from perfume-portrait, house-portrait and perfumery-lexicon without opening any schema.
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?
Gives an explicit when-to-use trigger ('user wants articles, guides or background reading on a perfume, fragrance, cologne, house, note or topic') with concrete examples, plus explicit when-not-to-use routing to three named alternatives. Nothing is left to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
material-matchFind perfumes by noteARead-onlyIdempotentInspect
Use this when the user wants perfumes, fragrances or colognes that contain specific notes or raw materials, optionally in the top, heart or base (synonyms: with notes of, built on, smells of, containing; for example vanilla and tobacco in the base). Returns the perfumes that have every material given, with house, where each sits in the pyramid and scento.com links in the user's language. Don't use to explain one material (note-portrait), to find perfumes like a named perfume (scent-neighbours) or for a mood or occasion (occasion-edit).
| Name | Required | Description | Default |
|---|---|---|---|
| lang | No | Language of the scento.com links and labels; answers stay in English. Use the language the user writes in, for example "de" (German), "fr" (French), "es" (Spanish) or "it" (Italian). Default "en". | en |
| tier | No | Where in the pyramid the materials must sit: "top", "heart" or "base". Example: "base" for a vanilla-and-tobacco drydown. Default "any". | any |
| family | No | Optional Scento family to stay within, for example “Wood & Root”. | |
| materials | Yes | One to four notes or raw materials that must all be present. Examples: ["vanilla", "tobacco"] or ["oud"]. | |
| continuation | No | The "continuation" value from a previous answer, passed back unchanged to get the next part of the list. |
Output Schema
| Name | Required | Description |
|---|---|---|
| cite | Yes | |
| lede | Yes | |
| folio | Yes | |
| detail | Yes | |
| scento_page | Yes | |
| continuation | Yes | |
| further_reading | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover read-only, idempotent and non-destructive safety, so the bar is lower. The description adds real behavioral detail beyond that: results must contain EVERY material given (conjunction, not union), the payoff fields (house, pyramid position, scento.com links), and that labels/links localize while answers stay English. It stops short of disclosing result count or pagination behavior, hence not a 5.
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?
Front-loaded with the trigger, then output, then exclusions — a sensible ordering. The synonym parenthetical is dense but earns its place by catching varied user phrasing. Slightly long overall, but no sentence is wasted.
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?
With an output schema present, return values need not be re-explained. The description covers trigger, semantics, localization, alternatives and the continuation mechanism, leaving nothing an agent needs in order to call this correctly.
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 the baseline is 3 and the schema already documents lang, tier, family, materials and continuation. The description nonetheless reinforces the AND semantics of the materials array, pairs it with a concrete tier example ('vanilla and tobacco in the base'), and explains the language split between links and answers, adding usable meaning above the schema text.
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 verb (find), resource (perfumes/fragrances/colognes) and constraint (containing specific notes or raw materials), plus the optional pyramid tiers. It names and distinguishes itself from three siblings (note-portrait, scent-neighbours, occasion-edit), so an agent can route correctly without opening any schema.
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?
Gives an explicit trigger ('when the user wants perfumes... that contain specific notes'), a list of natural-language synonyms to match, and explicit negative routing to note-portrait, scent-neighbours and occasion-edit. Nothing about when/when-not is left to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
note-portraitExplain a note or ingredientARead-onlyIdempotentInspect
Use this when the user asks what a note or raw material smells like or is (for example vetiver, oud, vanilla, iris, ambroxan, bergamot), whether it is natural or synthetic, or what it pairs with (synonyms: what does X smell like, ingredient, note). Returns how it smells, its family, natural or synthetic, pairings and perfumes that show it, with the scento.com page in the user's language. Don't use to find perfumes containing notes (use material-match) or to define a perfumery term such as sillage (perfumery-lexicon).
| Name | Required | Description | Default |
|---|---|---|---|
| lang | No | Language of the scento.com links and labels; answers stay in English. Use the language the user writes in, for example "de" (German), "fr" (French), "es" (Spanish) or "it" (Italian). Default "en". | en |
| material | Yes | One note or raw material, by common name. Examples: "vetiver", "orris", "ambroxan", "pink pepper", "oud". |
Output Schema
| Name | Required | Description |
|---|---|---|
| cite | Yes | |
| lede | Yes | |
| folio | Yes | |
| detail | Yes | |
| scento_page | Yes | |
| continuation | Yes | |
| further_reading | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false and openWorldHint=false, so safety is covered. The description adds real value beyond that by disclosing the returned payload (smell, family, natural/synthetic, pairings, example perfumes, localized scento.com page) and the language behavior. It does not discuss auth, rate limits, or lookup-miss behavior, which keeps it short of a 5.
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 sentences, front-loaded with the use case, then the return contents, then the exclusions. Every clause carries information — the example list, the synonym list, and the two sibling redirects all reduce agent ambiguity rather than 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?
An output schema exists, so return values need not be spelled out, yet the description still summarizes them usefully. Combined with the sibling routing and the language note, an agent has everything needed to select and call this tool correctly.
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 both parameters are already documented, and the baseline of 3 applies. The description's example materials and the 'in the user's language' clause loosely reinforce the schema but add no syntax or constraint detail beyond it (e.g. no guidance on ambiguous or multi-word material names).
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 verb and resource — explaining what a note or raw material smells like or is — with concrete examples (vetiver, oud, ambroxan). It explicitly names the sibling tools it is not (material-match, perfumery-lexicon), so an agent can distinguish it without opening any schema.
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?
Gives explicit trigger conditions ('user asks what a note smells like', 'whether it is natural or synthetic', 'what it pairs with'), user-phrasing synonyms, and two named exclusions with the correct alternative for each. This is a complete when/when-not/alternative routing statement.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
occasion-editPick perfumes for an occasionARead-onlyIdempotentInspect
Use this when the user asks which perfume, fragrance or cologne to wear for one occasion, season or climate: wedding, office, date night, night out, weekend, everyday, gym or sport (workout), summer days, cold weather, first impressions, long-lasting or under-the-radar. Returns a short edit of perfumes with a line on why each fits and a scento.com link for each, in the user's language. The occasion is a fixed list, so pick the nearest value; omit gender_lean unless the user states one. For several occasions call it once per occasion. Don't use for a collection built around perfumes the user already loves (wardrobe-composer) or for similar scents (scent-neighbours).
| Name | Required | Description | Default |
|---|---|---|---|
| lang | No | Language of the scento.com links and labels; answers stay in English. Use the language the user writes in, for example "de" (German), "fr" (French), "es" (Spanish) or "it" (Italian). Default "en". | en |
| occasion | Yes | The occasion, season or climate. Examples: "wedding" for a wedding guest, "office" for work, "weekend" for relaxed days, "gym" for sport, "date-night" for an evening out for two, "summer-days" for heat, "cold-weather" for winter. A summer wedding is "wedding". | |
| gender_lean | No | Omit unless the user states one ("cologne" or "perfume" alone is not a request). Lean read from the materials by convention: "feminine", "masculine" or "shared". Example: "masculine" when the user asks for a men's fragrance. It reorders the edit and never excludes a perfume. |
Output Schema
| Name | Required | Description |
|---|---|---|
| cite | Yes | |
| lede | Yes | |
| folio | Yes | |
| detail | Yes | |
| scento_page | Yes | |
| continuation | Yes | |
| further_reading | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyIdempotent non-destructive behavior, so the safety profile is covered. The description still adds behavioral context beyond them: the response is a 'short edit' with a per-perfume rationale and a scento.com link, links follow the user's language while answers stay English, and the occasion input is a closed list requiring nearest-value snapping. The return-shape detail overlaps the existing output schema, which keeps this short of a 5.
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?
Front-loaded with the trigger, then constraints, then exclusions, so an agent can stop reading early. It is dense rather than bloated, though the long inline enumeration of occasions partly duplicates the enum values already in 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?
Purpose, trigger, parameter resolution, multi-call behavior, output shape, and sibling routing are all present for a 3-param read-only tool with an output schema. An agent has everything needed to select and invoke it correctly, including the gender_lean omission default.
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% and the schema already documents all three parameters with enums, defaults and examples. The description only adds the closed-list resolution rule ('pick the nearest value') and 'omit gender_lean unless the user states one', both of which largely restate the schema. Baseline 3 is right when the schema does the heavy lifting.
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 verb and resource (pick perfumes for an occasion) and enumerates the exact occasion space it covers. It explicitly names two siblings it is NOT (wardrobe-composer, scent-neighbours), so an agent can route between them without opening any schema.
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?
Gives explicit trigger conditions ('when the user asks which perfume... to wear for one occasion, season or climate'), exclusion conditions (wardrobe-composer for a collection built around loved perfumes, scent-neighbours for similar scents), and a multi-call rule ('for several occasions call it once per occasion'). Nothing about when to use it is left to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
perfume-contrastCompare perfumes side by sideARead-onlyIdempotentInspect
Use this when the user asks to compare, contrast or choose between two to four named perfumes, fragrances or colognes (synonyms: versus, vs, difference between, which one). Returns the perfumes side by side on house, Scento family, top, heart and base notes, shared materials, character, seasons, hours, year and concentration, with scento.com links in the user's language. Don't use to find new perfumes (scent-neighbours or perfume-search) or to explain a single perfume (perfume-portrait).
| Name | Required | Description | Default |
|---|---|---|---|
| lang | No | Language of the scento.com links and labels; answers stay in English. Use the language the user writes in, for example "de" (German), "fr" (French), "es" (Spanish) or "it" (Italian). Default "en". | en |
| perfumes | Yes | Two to four perfumes to compare, by name (with house if needed) or slug. Examples: ["Mojave Ghost", "Santal 33"] or ["Oud Wood", "Layton", "Grand Soir"]. |
Output Schema
| Name | Required | Description |
|---|---|---|
| cite | Yes | |
| lede | Yes | |
| folio | Yes | |
| detail | Yes | |
| scento_page | Yes | |
| continuation | Yes | |
| further_reading | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false and openWorldHint=false, so the safety profile is covered. The description adds behavioral context beyond that: the comparison dimensions returned, that shared materials are computed, and that scento.com links follow the user's language while answers stay English. Some of the return enumeration overlaps the existing output schema, which slightly dilutes the added value.
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 sentences, front-loaded with the trigger condition and followed by exclusions. The long enumeration of returned fields ('house, Scento family, top, heart and base notes, shared materials, character, seasons, hours, year and concentration') is heavy and partially redundant given the output schema, but the rest is tight and earns its place.
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 with full schema coverage and an output schema, the description supplies everything missing: trigger phrasing, cardinality limits, sibling disambiguation, language behavior and return breadth. An agent has enough to select and invoke it correctly.
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%: both `perfumes` (2-4 items, name or slug, with examples) and `lang` (enum values, default, language semantics) are fully documented in the schema. The description corroborates the 2-4 constraint but adds no syntax or format detail beyond it, so the baseline of 3 applies.
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 verb and resource ('compare... two to four named perfumes, fragrances or colognes') and enumerates trigger synonyms (versus, vs, difference between, which one). It also names the sibling tools it is not (scent-neighbours, perfume-search, perfume-portrait), so an agent can distinguish it without opening any schema.
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?
Explicit when-to-use ('user asks to compare, contrast or choose between two to four named perfumes') and explicit when-not-to-use with the correct alternatives named for each exclusion case. Nothing is left to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
perfume-portraitGet a perfume's notes and profileARead-onlyIdempotentInspect
Use this when the user asks what a specific perfume, fragrance or cologne smells like, what its notes or pyramid (top, heart, base) are, its family, perfumer, year or concentration (eau de parfum, eau de toilette), or when to wear it (synonyms: notes of, what's in it, how does it smell). Returns the verified note pyramid, Scento family and subfamily, character, seasons and hours, signature materials and the scento.com page in the user's language. Don't use to find similar perfumes (use scent-neighbours), compare perfumes (perfume-contrast) or search by mood (perfume-search).
| Name | Required | Description | Default |
|---|---|---|---|
| lang | No | Language of the scento.com links and labels; answers stay in English. Use the language the user writes in, for example "de" (German), "fr" (French), "es" (Spanish) or "it" (Italian). Default "en". | en |
| perfume | Yes | One perfume, by name as the user writes it, optionally with its house, or its slug. Examples: "Oud Wood", "Tom Ford Oud Wood", "Creed Aventus", "santal-33-le-labo". |
Output Schema
| Name | Required | Description |
|---|---|---|
| cite | Yes | |
| lede | Yes | |
| folio | Yes | |
| detail | Yes | |
| scento_page | Yes | |
| continuation | Yes | |
| further_reading | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the safety profile (readOnly, idempotent, non-destructive, closed-world), so the bar is lower. The description still adds useful behavior: it discloses that answers stay in English while the scento.com page and labels follow the lang parameter, and that notes are "verified" — context an agent cannot get from the annotations alone. It stops short of describing pagination or failure behavior when the perfume is ambiguous.
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?
Front-loaded with the trigger condition, then returns, then exclusions — a sensible ordering. The middle clause is a long enumeration of attributes and synonyms that borders on padding, but each item maps to a real user asking pattern rather than repeating structured fields.
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 an output schema exists, the description need not explain return shapes, yet it still summarises them usefully. Trigger, localization behavior, and sibling disambiguation are all present; nothing an agent needs to call this correctly is missing.
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 both parameters are fully documented in the schema itself, making 3 the baseline. The description confirms the lang effect ("page in the user's language") and the free-form name-or-slug input, but adds no syntax, disambiguation or matching-behavior detail 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?
States a specific verb and resource (retrieve a perfume's notes and profile) and enumerates the exact attributes covered: notes/pyramid, family, perfumer, year, concentration, occasion. It explicitly names the three siblings it is not and the condition distinguishing each, so an agent can route without opening any schema.
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?
Gives explicit when-to-use triggers phrased as user utterances ("what does X smell like", synonym list) and explicit when-not-to-use cases mapped to named alternatives: scent-neighbours for similar, perfume-contrast for comparison, perfume-search for mood. Nothing is left to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
perfumery-lexiconExplain a perfumery termARead-onlyIdempotentInspect
Use this when the user asks what a perfume or fragrance term means: sillage, projection, longevity, drydown, top, heart and base notes, accord, chypre, fougère, gourmand, oud, layering, eau de parfum versus eau de toilette (EDP vs EDT), concentration, flanker or niche versus designer. Returns a plain-language meaning, example perfumes and related terms, with the matching scento.com guide in the user's language. Don't use for a specific note (use note-portrait) or a specific perfume (perfume-portrait).
| Name | Required | Description | Default |
|---|---|---|---|
| lang | No | Language of the scento.com links and labels; answers stay in English. Use the language the user writes in, for example "de" (German), "fr" (French), "es" (Spanish) or "it" (Italian). Default "en". | en |
| term | Yes | The term to explain, as the user wrote it. Examples: "sillage", "drydown", "chypre", "EDP vs EDT". |
Output Schema
| Name | Required | Description |
|---|---|---|
| cite | Yes | |
| lede | Yes | |
| folio | Yes | |
| detail | Yes | |
| scento_page | Yes | |
| continuation | Yes | |
| further_reading | Yes |
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 safety is covered. The description adds real value beyond them by disclosing what a call returns (plain-language meaning, example perfumes, related terms) and the language behavior of the linked guide versus the answer body, though it says nothing about rate limits or fallback behavior for unknown terms.
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?
Front-loaded with the trigger condition, then the return contract, then the exclusions – a sensible order with no filler sentences. The long inline term list is somewhat heavy but it doubles as disambiguation evidence, so it earns its space; only the sheer length keeps it from a 5.
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?
An output schema exists, so return-value detail is not strictly required, yet the description still summarizes the response shape. Combined with the 100%-covered input schema and the read-only annotations, an agent has everything needed to select and invoke this tool correctly.
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 the baseline is 3, but the description goes slightly beyond the schema by enumerating representative 'term' values ('sillage', 'drydown', 'chypre', 'EDP vs EDT'), which tells the agent how to phrase multi-word or acronym-style terms. The lang guidance largely mirrors the schema text, so the gain is modest rather than substantial.
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 verb and resource ('Explain a perfumery term') and enumerates the exact term space it covers (sillage, drydown, chypre, EDP vs EDT, etc.), so an agent knows precisely what class of query belongs here. It also names the siblings it is not (note-portrait, perfume-portrait), making it distinguishable without opening any schema.
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?
Opens with an explicit trigger ('Use this when the user asks what a perfume or fragrance term means') and closes with explicit exclusions routing to alternatives ('Don't use for a specific note (use note-portrait) or a specific perfume (perfume-portrait)'). Both the when and the when-not plus the named fallbacks are present.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
perfume-searchSearch perfumes, houses and notesARead-onlyIdempotentInspect
Use this when the user asks to find a perfume, fragrance, cologne or scent by name, house, note or mood, or when a name is uncertain (synonyms: perfume, fragrance, cologne, eau de parfum, scent, brand, notes, smells like). Returns matching perfumes, houses and raw materials with house, Scento family and a scento.com link in the user's language, ten per page. Call this first when a name is ambiguous. Don't use for a perfume's full notes (use perfume-portrait), similar scents (scent-neighbours) or articles (journal-search).
| Name | Required | Description | Default |
|---|---|---|---|
| q | Yes | What to look for: a perfume, house or material name, or a mood word. Examples: "Baccarat Rouge 540", "Le Labo", "vetiver", "smoky vanilla". | |
| kind | No | Limit the results to one kind: "perfume", "house" or "material". Example: "house" to resolve a brand name. Default "any". | any |
| lang | No | Language of the scento.com links and labels; answers stay in English. Use the language the user writes in, for example "de" (German), "fr" (French), "es" (Spanish) or "it" (Italian). Default "en". | en |
| continuation | No | The "continuation" value from a previous answer, passed back unchanged to get the next part of the list. |
Output Schema
| Name | Required | Description |
|---|---|---|
| cite | Yes | |
| lede | Yes | |
| folio | Yes | |
| detail | Yes | |
| scento_page | Yes | |
| continuation | Yes | |
| further_reading | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the safety profile (readOnly, idempotent, non-destructive), so the bar is lower. The description still adds real behavior: results include house, Scento family and a scento.com link, ten items per page, and pagination is continued via the continuation token. It does not mention rate limits or failure modes, keeping it short of a 5.
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?
Front-loaded with the trigger condition, then result shape, then the disambiguation rule, then exclusions. Dense and largely waste-free, though the parenthetical synonym list is long and slightly crowds the opening sentence.
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?
An output schema exists, so return values need not be detailed, yet the description still summarizes result composition, page size and pagination. Combined with full schema coverage and clear routing to alternatives, an agent has everything needed to call this correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents q, kind, lang and continuation, including examples and enum meanings. The description reinforces the q scope ('name is uncertain', synonyms) and the language behavior, but adds little syntax or format beyond the schema. Baseline 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?
States a specific verb (search/find) and resource (perfumes, houses, notes/materials) and enumerates the trigger inputs: name, house, note, or mood. It is immediately distinguishable from siblings like perfume-portrait or journal-search.
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?
Explicit when-to-use ('user asks to find a perfume... by name, house, note or mood'), an explicit disambiguation rule ('Call this first when a name is ambiguous'), and explicit when-not with named alternatives (perfume-portrait, scent-neighbours, journal-search). Nothing is left to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
scent-neighboursFind similar perfumesARead-onlyIdempotentInspect
Use this when the user asks for perfumes similar to, like or in the same style as a given perfume, fragrance or cologne, or what else to try if they love it (synonyms: similar to, smells like, more like, if I like X). Returns the perfumes that share the most notes and structure with it, with the shared materials named, one line on how each differs and scento.com links in the user's language. Don't use for one perfume's own notes (perfume-portrait), a side-by-side of named perfumes (perfume-contrast) or a whole collection (wardrobe-composer).
| Name | Required | Description | Default |
|---|---|---|---|
| lang | No | Language of the scento.com links and labels; answers stay in English. Use the language the user writes in, for example "de" (German), "fr" (French), "es" (Spanish) or "it" (Italian). Default "en". | en |
| perfume | Yes | The perfume the user already knows or loves, by name (with its house if needed) or slug. Examples: "Aventus", "Layton Parfums de Marly", "Santal 33". | |
| same_house | No | Set true to stay within the perfume's own house, for example when asked for "other Creed scents like Aventus". Default false. | |
| continuation | No | The "continuation" value from a previous answer, passed back unchanged to get the next part of the list. |
Output Schema
| Name | Required | Description |
|---|---|---|
| cite | Yes | |
| lede | Yes | |
| folio | Yes | |
| detail | Yes | |
| scento_page | Yes | |
| continuation | Yes | |
| further_reading | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, openWorldHint=false and destructiveHint=false, so safety is covered. The description adds real behavioral context beyond that: results share the most notes and structure, shared materials are named, each entry gets a one-line difference note, and links come back in the user's language. It does not cover pagination/continuation behavior, keeping it short of a 5.
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 sentences, front-loaded with the trigger and closed with the exclusions, so the routing information appears before the exclusions. The synonym parenthetical and the three named alternatives make it dense, but each clause carries routing value rather than filler.
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?
With an output schema present and annotations covering the safety profile, the description only needs to add routing and intent, which it does fully: trigger phrases, return semantics, and explicit exclusions naming three siblings. Nothing an agent needs to select or call this tool is missing.
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 all four parameters are already documented in the schema, including the lang enum and the perfume examples. The description's mention of
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 verb+resource (find perfumes similar to a given one) with the
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?
Explicit when-to-use with synonyms (
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
wardrobe-composerBuild a fragrance wardrobeARead-onlyIdempotentInspect
Use this when the user wants a small fragrance wardrobe or collection (three to five perfumes for different moments) built around perfumes or notes they already love, or asks what to add next (synonyms: signature scents, collection, rotation, what else should I own). Returns roles such as daytime, evening and warm weather, each with a perfume, its house, why it fits and a scento.com link in the user's language. Don't use for a single occasion (occasion-edit) or the neighbours of one perfume (scent-neighbours).
| Name | Required | Description | Default |
|---|---|---|---|
| lang | No | Language of the scento.com links and labels; answers stay in English. Use the language the user writes in, for example "de" (German), "fr" (French), "es" (Spanish) or "it" (Italian). Default "en". | en |
| size | No | How many perfumes the wardrobe holds, 3 to 5. Example: 4. Default 3. | |
| avoid | No | Perfumes, notes or families to leave out, up to six. Examples: ["oud"] or ["Sauvage", "Velvet Sweet"]. | |
| loves | Yes | Perfumes or notes the person already loves, one to six. Examples: ["Aventus", "iris"] or ["Santal 33"]. |
Output Schema
| Name | Required | Description |
|---|---|---|
| cite | Yes | |
| lede | Yes | |
| folio | Yes | |
| detail | Yes | |
| scento_page | Yes | |
| continuation | Yes | |
| further_reading | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare the safety profile (readOnly, idempotent, non-destructive, closed-world), so the bar is lower. The description adds behavioral context by sketching the return shape (roles like daytime/evening/warm weather, each with perfume, house, rationale, and a scento.com link) and the language behavior; it does not discuss limits or failure modes, but little is needed for a safe read tool.
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 primary purpose and trigger lead, followed by the return shape, then the exclusions — good front-loading in two sentences. The parenthetical synonym list is slightly dense but earns its place for retrieval matching.
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?
With four parameters, an output schema present, and rich annotations, the description supplies everything an agent needs: trigger conditions, synonyms, return structure, and explicit routing to sibling tools. No information gap remains that would cause a wrong call.
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 every parameter is already documented in the schema (lang, size 3-5, avoid up to six, loves one to six). The description echoes 'three to five perfumes' and 'perfumes or notes they already love' but adds no syntax or format meaning beyond the schema, so the baseline 3 applies.
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 verb and resource ('build a small fragrance wardrobe or collection, three to five perfumes for different moments') and explicitly differentiates itself from siblings occasion-edit and scent-neighbours. An agent can select this tool without opening any schema.
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?
It gives an explicit trigger ('when the user wants... or asks what to add next'), lists synonyms to catch alternate phrasings, and states the negative case by naming the two sibling tools to use instead. Both when-to-use and when-not-to-use are covered.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
13 tool updates
v0.1.1- Removed
compendium-search - Changed
family-map2 fields changed- changed
Input schema / properties / family / descriptionPrevious value: -"Optional family name or id, for example “Amber & Resin” or “white-bloom”. Leave empty for the whole map."New value: +"Optional family name or id. Examples: \"Amber & Resin\", \"Wood & Root\" or \"white-bloom\". Leave empty for the whole map." - changed
Input schema / properties / lang / descriptionPrevious value: -"Language of the scento.com links (answers stay in English)."New value: +"Language of the scento.com links and labels; answers stay in English. Use the language the user writes in, for example \"de\" (German), \"fr\" (French), \"es\" (Spanish) or \"it\" (Italian). Default \"en\"."
- Changed
house-portrait2 fields changed- changed
Input schema / properties / house / descriptionPrevious value: -"House name, for example Maison Francis Kurkdjian, Le Labo or Amouage."New value: +"One perfume house or brand, by name. Examples: \"Maison Francis Kurkdjian\", \"Le Labo\", \"Amouage\", \"Parfums de Marly\"." - changed
Input schema / properties / lang / descriptionPrevious value: -"Language of the scento.com links (answers stay in English)."New value: +"Language of the scento.com links and labels; answers stay in English. Use the language the user writes in, for example \"de\" (German), \"fr\" (French), \"es\" (Spanish) or \"it\" (Italian). Default \"en\"."
- Changed
journal-search3 fields changed- changed
Input schema / properties / continuation / descriptionPrevious value: -"From a previous answer, for the next part of the list."New value: +"The \"continuation\" value from a previous answer, passed back unchanged to get the next part of the list." - changed
Input schema / properties / lang / descriptionPrevious value: -"Language of the scento.com links (answers stay in English)."New value: +"Language of the scento.com links and labels; answers stay in English. Use the language the user writes in, for example \"de\" (German), \"fr\" (French), \"es\" (Spanish) or \"it\" (Italian). Default \"en\"." - changed
Input schema / properties / q / descriptionPrevious value: -"A perfume, house, material or topic, for example “vetiver”, “layering” or “Creed Aventus”."New value: +"A perfume, house, note or topic to find articles on. Examples: \"vetiver\", \"layering\", \"Creed Aventus\", \"make a scent last\"."
- Changed
material-match4 fields changed- changed
Input schema / properties / continuation / descriptionPrevious value: -"From a previous answer, for the next part of the list."New value: +"The \"continuation\" value from a previous answer, passed back unchanged to get the next part of the list." - changed
Input schema / properties / lang / descriptionPrevious value: -"Language of the scento.com links (answers stay in English)."New value: +"Language of the scento.com links and labels; answers stay in English. Use the language the user writes in, for example \"de\" (German), \"fr\" (French), \"es\" (Spanish) or \"it\" (Italian). Default \"en\"." - changed
Input schema / properties / materials / descriptionPrevious value: -"One to four notes or raw materials that must all be present."New value: +"One to four notes or raw materials that must all be present. Examples: [\"vanilla\", \"tobacco\"] or [\"oud\"]." - changed
Input schema / properties / tier / descriptionPrevious value: -"Where in the pyramid the materials must sit."New value: +"Where in the pyramid the materials must sit: \"top\", \"heart\" or \"base\". Example: \"base\" for a vanilla-and-tobacco drydown. Default \"any\"."
- Changed
note-portrait2 fields changed- changed
Input schema / properties / lang / descriptionPrevious value: -"Language of the scento.com links (answers stay in English)."New value: +"Language of the scento.com links and labels; answers stay in English. Use the language the user writes in, for example \"de\" (German), \"fr\" (French), \"es\" (Spanish) or \"it\" (Italian). Default \"en\"." - changed
Input schema / properties / material / descriptionPrevious value: -"A note or raw material, for example vetiver, orris, ambroxan or pink pepper."New value: +"One note or raw material, by common name. Examples: \"vetiver\", \"orris\", \"ambroxan\", \"pink pepper\", \"oud\"."
- Changed
occasion-edit4 fields changed- changed
Input schema / properties / gender_lean / descriptionPrevious value: -"Optional lean, read from the materials by convention; it reorders the edit and never excludes a perfume."New value: +"Omit unless the user states one (\"cologne\" or \"perfume\" alone is not a request). Lean read from the materials by convention: \"feminine\", \"masculine\" or \"shared\". Example: \"masculine\" when the user asks for a men's fragrance. It reorders the edit and never excludes a perfume." - changed
Input schema / properties / lang / descriptionPrevious value: -"Language of the scento.com links (answers stay in English)."New value: +"Language of the scento.com links and labels; answers stay in English. Use the language the user writes in, for example \"de\" (German), \"fr\" (French), \"es\" (Spanish) or \"it\" (Italian). Default \"en\"." - changed
Input schema / properties / occasion / descriptionPrevious value: -"The occasion to edit for."New value: +"The occasion, season or climate. Examples: \"wedding\" for a wedding guest, \"office\" for work, \"weekend\" for relaxed days, \"gym\" for sport, \"date-night\" for an evening out for two, \"summer-days\" for heat, \"cold-weather\" for winter. A summer wedding is \"wedding\"." - changed
Input schema / properties / occasion / enumPrevious value: -[ - "office", - "date-night", - "night-out", - "everyday", - "summer-days", - "cold-weather", - "workout", - "first-impressions", - "long-lasting", - "under-the-radar" -]New value: +[ + "office", + "date-night", + "night-out", + "everyday", + "summer-days", + "cold-weather", + "workout", + "wedding", + "weekend", + "first-impressions", + "long-lasting", + "under-the-radar", + "gym", + "sport" +]
- Changed
perfume-contrast2 fields changed- changed
Input schema / properties / lang / descriptionPrevious value: -"Language of the scento.com links (answers stay in English)."New value: +"Language of the scento.com links and labels; answers stay in English. Use the language the user writes in, for example \"de\" (German), \"fr\" (French), \"es\" (Spanish) or \"it\" (Italian). Default \"en\"." - changed
Input schema / properties / perfumes / descriptionPrevious value: -"Two to four perfume names (with their houses if needed) or slugs."New value: +"Two to four perfumes to compare, by name (with house if needed) or slug. Examples: [\"Mojave Ghost\", \"Santal 33\"] or [\"Oud Wood\", \"Layton\", \"Grand Soir\"]."
- Changed
perfume-portrait2 fields changed- changed
Input schema / properties / lang / descriptionPrevious value: -"Language of the scento.com links (answers stay in English)."New value: +"Language of the scento.com links and labels; answers stay in English. Use the language the user writes in, for example \"de\" (German), \"fr\" (French), \"es\" (Spanish) or \"it\" (Italian). Default \"en\"." - changed
Input schema / properties / perfume / descriptionPrevious value: -"Perfume name, optionally with its house (for example “Oud Wood” or “Tom Ford Oud Wood”), or its slug."New value: +"One perfume, by name as the user writes it, optionally with its house, or its slug. Examples: \"Oud Wood\", \"Tom Ford Oud Wood\", \"Creed Aventus\", \"santal-33-le-labo\"."
- Added
perfume-search - Changed
perfumery-lexicon2 fields changed- changed
Input schema / properties / lang / descriptionPrevious value: -"Language of the scento.com links (answers stay in English)."New value: +"Language of the scento.com links and labels; answers stay in English. Use the language the user writes in, for example \"de\" (German), \"fr\" (French), \"es\" (Spanish) or \"it\" (Italian). Default \"en\"." - changed
Input schema / properties / term / descriptionPrevious value: -"The term to explain, for example sillage, drydown, chypre or EDP vs EDT."New value: +"The term to explain, as the user wrote it. Examples: \"sillage\", \"drydown\", \"chypre\", \"EDP vs EDT\"."
- Changed
scent-neighbours4 fields changed- changed
Input schema / properties / continuation / descriptionPrevious value: -"From a previous answer, for the next part of the list."New value: +"The \"continuation\" value from a previous answer, passed back unchanged to get the next part of the list." - changed
Input schema / properties / lang / descriptionPrevious value: -"Language of the scento.com links (answers stay in English)."New value: +"Language of the scento.com links and labels; answers stay in English. Use the language the user writes in, for example \"de\" (German), \"fr\" (French), \"es\" (Spanish) or \"it\" (Italian). Default \"en\"." - changed
Input schema / properties / perfume / descriptionPrevious value: -"The perfume to start from, by name (with its house if needed) or slug."New value: +"The perfume the user already knows or loves, by name (with its house if needed) or slug. Examples: \"Aventus\", \"Layton Parfums de Marly\", \"Santal 33\"." - changed
Input schema / properties / same_house / descriptionPrevious value: -"Only look within the same house."New value: +"Set true to stay within the perfume's own house, for example when asked for \"other Creed scents like Aventus\". Default false."
- Changed
wardrobe-composer4 fields changed- changed
Input schema / properties / avoid / descriptionPrevious value: -"Perfumes, materials or families to leave out."New value: +"Perfumes, notes or families to leave out, up to six. Examples: [\"oud\"] or [\"Sauvage\", \"Velvet Sweet\"]." - changed
Input schema / properties / lang / descriptionPrevious value: -"Language of the scento.com links (answers stay in English)."New value: +"Language of the scento.com links and labels; answers stay in English. Use the language the user writes in, for example \"de\" (German), \"fr\" (French), \"es\" (Spanish) or \"it\" (Italian). Default \"en\"." - changed
Input schema / properties / loves / descriptionPrevious value: -"Perfumes or materials the person already loves."New value: +"Perfumes or notes the person already loves, one to six. Examples: [\"Aventus\", \"iris\"] or [\"Santal 33\"]." - changed
Input schema / properties / size / descriptionPrevious value: -"How many perfumes the wardrobe holds."New value: +"How many perfumes the wardrobe holds, 3 to 5. Example: 4. Default 3."
12 tool updates
v0.1.0- First observed
compendium-search - First observed
family-map - First observed
house-portrait - First observed
journal-search - First observed
material-match - First observed
note-portrait - First observed
occasion-edit - First observed
perfume-contrast - First observed
perfume-portrait - First observed
perfumery-lexicon - First observed
scent-neighbours - First observed
wardrobe-composer
TDQS
Scored across 12 tools
Every tool targets a distinct fragrance-information need (search, portrait, similar, compare, notes, materials, houses, families, occasions, wardrobe, lexicon, journal). Descriptions explicitly cross-reference alternatives with 'Don't use for X (use Y)' guidance, eliminating overlap. An agent can reliably select the right tool.
All twelve names use consistent lowercase kebab-case with a predictable domain-first pattern (perfume-search, perfume-portrait, note-portrait, house-portrait, family-map, etc.). While not verb_noun, the convention is uniform and readable throughout. No mixed casing or verb styles.
Twelve tools is well within the ideal 3-15 range and each covers a meaningful, non-redundant facet of fragrance exploration. No tool feels padded or missing a partner. The set is tightly scoped to the perfume domain.
The surface covers the full fragrance lifecycle: search, detailed profiles, similarity, comparison, note/material explanation, house profiles, family taxonomy, occasion recommendations, wardrobe building, terminology, and editorial articles. No obvious dead ends for the stated informational purpose. Minor gaps like pricing or retail availability are outside the apparent scope.
Maintenance
Related MCP Connectors
Free perfume MCP server and fragrance API: 6,000+ perfumes, note pyramids, accords, similar scents.
Fragrance & perfume MCP: search fragrances, notes, accords, brands, perfumers, reviews & charts.
Perfumery materials, IFRA Category 4, EU allergens, and your formulas and shelf via OAuth.
Fragrance encyclopedia: note pyramids, accords, perfumers and dupes (parfica.com).
Related MCP Servers
AlicenseNot gradedqualityAmaintenanceEnables AI assistants and MCP clients to search a free, citation-backed encyclopedia of over 300k articles and read full articles or topic listings as Markdown, with optional citation formatting. It is read-only and requires no key or sign-up, connecting over Streamable HTTP.MIT- AlicenseNot gradedqualityCmaintenanceEnables AI assistants to retrieve sourced, dated data on consumer robots and physical AI: full-text search of robot sheets, side-by-side comparisons, and lookups of claims, prices, availability, capabilities, programmability and recent changes, with every value traceable to an evidence-graded source. Read-only and free with no key required, served over Streamable HTTP.MIT
- AlicenseNot gradedqualityCmaintenanceEnables AI assistants to search and retrieve structured peptide research profiles with cited, tier-labelled evidence, safety and regulatory status, and to compare two or three peptides side by side without ranking. Also provides research article and FAQ search, category and trend lookups, plus unit conversion, solution concentration, blend and cost-per-amount calculators, all read-only and anonymous.MIT
- AlicenseAqualityCmaintenanceEnables AI assistants to fetch sourced, citable face measurement percentiles, face type definitions and threshold rules, methodology and citation details, and to classify a face shape from four distances using the site's seven rules in order. Read-only and takes no photo.7MIT