<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Scento</title>
    <description>The latest articles on DEV Community by Scento (@scento).</description>
    <link>https://dev.to/scento</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F4197136%2F136467ad-d4c0-48dd-bb37-dc92921b8c94.png</url>
      <title>DEV Community: Scento</title>
      <link>https://dev.to/scento</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/scento"/>
    <language>en</language>
    <item>
      <title>Give Claude a perfumer's memory in 30 seconds</title>
      <dc:creator>Scento</dc:creator>
      <pubDate>Wed, 21 Oct 2026 01:41:36 +0000</pubDate>
      <link>https://dev.to/scento/give-claude-a-perfumers-memory-in-30-seconds-32bh</link>
      <guid>https://dev.to/scento/give-claude-a-perfumers-memory-in-30-seconds-32bh</guid>
      <description>&lt;p&gt;Ask a language model which perfumes share a tobacco-and-vanilla base and you get a confident paragraph with a few names in it, some of which may not exist. This tutorial wires a model to a reference it can query instead, so the answer comes back with a source attached.&lt;/p&gt;

&lt;p&gt;The reference is the Scento Perfume API: 1,400+ perfumes, 400+ raw materials and 140+ houses, free, no key, no account. It speaks MCP, and it also speaks plain HTTP.&lt;/p&gt;

&lt;h2&gt;
  
  
  MCP in two lines
&lt;/h2&gt;

&lt;p&gt;The Model Context Protocol lets an assistant call tools that live outside the chat. A server lists its tools, the assistant picks one, and the result lands back in the conversation as text plus structured data.&lt;/p&gt;

&lt;p&gt;The Scento Perfume API server is remote, so there is nothing to install on your machine: one URL, &lt;code&gt;https://www.scento.com/mcp&lt;/code&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Connect it
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Claude (web or desktop).&lt;/strong&gt; Settings → Connectors → Add custom connector → paste the URL.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;ChatGPT.&lt;/strong&gt; Settings → Apps → Advanced → turn on developer mode → Create → paste the same URL, authentication None.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Claude Code.&lt;/strong&gt; One line:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;claude mcp add &lt;span class="nt"&gt;--transport&lt;/span&gt; http scento-perfume-api https://www.scento.com/mcp
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Cursor, Windsurf and other &lt;code&gt;mcpServers&lt;/code&gt; clients.&lt;/strong&gt; Add this entry to the client's MCP config (for Cursor, &lt;code&gt;~/.cursor/mcp.json&lt;/code&gt; or the project's &lt;code&gt;.cursor/mcp.json&lt;/code&gt;):&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"mcpServers"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"scento-perfume-api"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"type"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"http"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"url"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"https://www.scento.com/mcp"&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;VS Code.&lt;/strong&gt; Same entry, but &lt;code&gt;.vscode/mcp.json&lt;/code&gt; names the top-level key &lt;code&gt;servers&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"servers"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"scento-perfume-api"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"type"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"http"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"url"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"https://www.scento.com/mcp"&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Clients that only launch local commands.&lt;/strong&gt; The same server is published as a thin proxy on npm and PyPI:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npx &lt;span class="nt"&gt;-y&lt;/span&gt; scento-perfume-api
&lt;span class="c"&gt;# or&lt;/span&gt;
uvx scento-perfume-api
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Either one forwards to the remote URL, so you get identical answers.&lt;/p&gt;

&lt;h2&gt;
  
  
  What you get: twelve read-only tools
&lt;/h2&gt;

&lt;p&gt;&lt;code&gt;perfume-search&lt;/code&gt;, &lt;code&gt;perfume-portrait&lt;/code&gt;, &lt;code&gt;scent-neighbours&lt;/code&gt;, &lt;code&gt;perfume-contrast&lt;/code&gt;, &lt;code&gt;note-portrait&lt;/code&gt;, &lt;code&gt;material-match&lt;/code&gt;, &lt;code&gt;house-portrait&lt;/code&gt;, &lt;code&gt;family-map&lt;/code&gt;, &lt;code&gt;occasion-edit&lt;/code&gt;, &lt;code&gt;wardrobe-composer&lt;/code&gt;, &lt;code&gt;perfumery-lexicon&lt;/code&gt; and &lt;code&gt;journal-search&lt;/code&gt;. Every tool is annotated read-only and idempotent, so a client can treat repeat calls as safe.&lt;/p&gt;

&lt;p&gt;Every tool returns the same shape, which the server calls a folio: a quotable &lt;code&gt;lede&lt;/code&gt;, a &lt;code&gt;detail&lt;/code&gt; object, the &lt;code&gt;scento_page&lt;/code&gt; it came from, &lt;code&gt;further_reading&lt;/code&gt; links, and a &lt;code&gt;cite&lt;/code&gt; string. That last part matters. The model has something to quote and a page to point at.&lt;/p&gt;

&lt;h2&gt;
  
  
  Session 1: one perfume
&lt;/h2&gt;

&lt;p&gt;Prompt: &lt;em&gt;"What is Tom Ford Oud Wood like, and when would I wear it?"&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;The assistant calls &lt;code&gt;perfume-portrait&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"name"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"perfume-portrait"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"arguments"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"perfume"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Tom Ford Oud Wood"&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The text half of the response (live, 21 Oct 2026; the name, house and further-reading lines are trimmed):&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Oud Wood by Tom Ford belongs to Scento’s Spice Route family, built on cardamom, pink pepper, patchouli and amber.

**Family:** Spice Route
**Notes:** Cardamom, Pink Pepper, Patchouli, Amber, Oud, Tonka Bean
**Character:** Smooth woods and spice: cardamom and pink pepper open into patchouli, amber and oud, warmed by tonka bean.
**Wears:** seasons: autumn, winter; hours: evening, night

Read on scento.com: https://www.scento.com/perfumes/oud-wood-tom-ford
Source: Scento Perfume API, scento.com
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The model answers with the family, the notes and the autumn-evening guidance, and links the page. It did not have to guess a season.&lt;/p&gt;

&lt;h2&gt;
  
  
  Session 2: two perfumes side by side
&lt;/h2&gt;

&lt;p&gt;Prompt: &lt;em&gt;"Byredo Mojave Ghost versus Gypsy Water, what actually differs?"&lt;/em&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"name"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"perfume-contrast"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"arguments"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"perfumes"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"Byredo Mojave Ghost"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Byredo Gypsy Water"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The lede, the shared materials and the response's &lt;code&gt;detail.axes&lt;/code&gt; laid out in two columns (Mojave Ghost left, Gypsy Water right; the house, season, hour, year and concentration axes are left out):&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Mojave Ghost and Gypsy Water share sandalwood, but part ways on family.

shared:    Sandalwood
family:    Wood &amp;amp; Root  |  Green Leaf / Amber &amp;amp; Resin
top:       Ambrette, Naseberry  |  Bergamot, Juniper, Lemon, Pepper
heart:     Magnolia, Sandalwood, Violet  |  Incense, Iris, Pine Needle
base:      Cedarwood, Musk, Vetiver  |  Amber, Sandalwood, Vanilla
character: woody, musky, floral, powdery  |  warm, fresh, citrusy, green
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The tool returns the axes already aligned, so the model does not have to line up two pyramids itself. A &lt;code&gt;verdict&lt;/code&gt; array adds a one-line "suits" for each perfume, for example "Someone after something woody and musky, worn in spring, summer and autumn by day or evening." for Mojave Ghost.&lt;/p&gt;

&lt;h2&gt;
  
  
  Session 3: search by material, not by name
&lt;/h2&gt;

&lt;p&gt;Prompt: &lt;em&gt;"Which perfumes have tobacco and vanilla in the base?"&lt;/em&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"name"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"material-match"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"arguments"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"materials"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"tobacco"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"vanilla"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"tier"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"base"&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The text half, with links trimmed:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;5 perfumes in Scento's verified perfume database contain tobacco and vanilla in the base, Naxos first.

**Perfumes:**
- Naxos (Xerjoff) — family: Velvet Sweet; Tobacco base, Vanilla base
- Red Tobacco (Mancera) — family: Wood &amp;amp; Root; Tobacco base, Vanilla base
- Spicebomb Extreme (Viktor&amp;amp;Rolf) — family: Spice Route; Tobacco base, Vanilla base
- Memoir Man (Amouage) — family: Green Leaf; Tobacco base, Vanilla base
- Phi Une Rose de Kandahar (Tauer Perfumes) — family: Petal Garden; Tobacco base, Vanilla base
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;code&gt;materials&lt;/code&gt; takes one to four names that must all be present, &lt;code&gt;tier&lt;/code&gt; accepts top, heart, base or any (the default), and &lt;code&gt;family&lt;/code&gt; narrows the list further. If a list is longer than one page, the answer carries a &lt;code&gt;continuation&lt;/code&gt; token to pass back in.&lt;/p&gt;

&lt;h2&gt;
  
  
  No MCP client? Use the REST API
&lt;/h2&gt;

&lt;p&gt;The same twelve answers are available over HTTP under &lt;code&gt;/api/perfume/v1&lt;/code&gt;, with an OpenAPI 3.1 description.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# the contrast from session 2&lt;/span&gt;
curl &lt;span class="nt"&gt;-s&lt;/span&gt; &lt;span class="s2"&gt;"https://www.scento.com/api/perfume/v1/contrast?perfumes=byredo-mojave-ghost,gypsy-water"&lt;/span&gt;

&lt;span class="c"&gt;# the match from session 3&lt;/span&gt;
curl &lt;span class="nt"&gt;-s&lt;/span&gt; &lt;span class="s2"&gt;"https://www.scento.com/api/perfume/v1/materials/match?materials=tobacco,vanilla&amp;amp;tier=base"&lt;/span&gt;

&lt;span class="c"&gt;# the spec, for codegen or a custom GPT action&lt;/span&gt;
curl &lt;span class="nt"&gt;-s&lt;/span&gt; https://www.scento.com/api/perfume/v1/openapi.json
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Other routes follow the same pattern: &lt;code&gt;/search?q=&lt;/code&gt;, &lt;code&gt;/perfumes/{perfume}&lt;/code&gt;, &lt;code&gt;/perfumes/{perfume}/neighbours&lt;/code&gt;, &lt;code&gt;/materials/{material}&lt;/code&gt;, &lt;code&gt;/houses/{house}&lt;/code&gt;, &lt;code&gt;/families&lt;/code&gt;, &lt;code&gt;/edits/{occasion}&lt;/code&gt;, &lt;code&gt;/wardrobe?loves=a,b&lt;/code&gt;, &lt;code&gt;/lexicon/{term}&lt;/code&gt; and &lt;code&gt;/journal?q=&lt;/code&gt;. Every route takes &lt;code&gt;lang&lt;/code&gt;, and list routes take &lt;code&gt;continuation&lt;/code&gt;. Each response is the bare folio JSON, the same object an MCP tool returns in &lt;code&gt;structuredContent&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;A small Python wrapper:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;requests&lt;/span&gt;

&lt;span class="n"&gt;BASE&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;https://www.scento.com/api/perfume/v1&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;

&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;match&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;materials&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;tier&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;base&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="n"&gt;r&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;requests&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;BASE&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt;/materials/match&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
                     &lt;span class="n"&gt;params&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;materials&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;,&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;join&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;materials&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;tier&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;tier&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;
                     &lt;span class="n"&gt;timeout&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;20&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="n"&gt;r&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;raise_for_status&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
    &lt;span class="n"&gt;folio&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;r&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;json&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;folio&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;lede&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="n"&gt;folio&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;detail&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;][&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;perfumes&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="n"&gt;folio&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;cite&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;

&lt;span class="n"&gt;lede&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;perfumes&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;cite&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;match&lt;/span&gt;&lt;span class="p"&gt;([&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;tobacco&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;vanilla&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt;
&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;lede&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;p&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;perfumes&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;-&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;p&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;name&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="n"&gt;p&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;house&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="n"&gt;p&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;page&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt;
&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;cite&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Keep the &lt;code&gt;cite&lt;/code&gt; string and the &lt;code&gt;scento_page&lt;/code&gt; URL in whatever you render. That is the point of the exercise.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why a tool call beats a pasted table
&lt;/h2&gt;

&lt;p&gt;You could paste a spreadsheet of perfumes into a system prompt. It would go stale, eat context, and the model would still have to find the right row. A tool call does the lookup on the server and returns only the folio that matters, usually a few hundred tokens. The model decides when to call it; you do not have to route the question yourself.&lt;/p&gt;

&lt;p&gt;It also changes how you can phrase prompts. Instead of "recall everything you know about", try "use the Scento Perfume API to compare these two and quote the cite line". Models follow that well, and the output gets easy to check: every claim has a page behind it.&lt;/p&gt;

&lt;p&gt;If you are building your own agent loop, treat the folio as the contract. Pass &lt;code&gt;lede&lt;/code&gt; and &lt;code&gt;detail&lt;/code&gt; to the model, keep &lt;code&gt;scento_page&lt;/code&gt; and &lt;code&gt;cite&lt;/code&gt; for the UI, and use &lt;code&gt;continuation&lt;/code&gt; when a list runs past one page.&lt;/p&gt;

&lt;h2&gt;
  
  
  Where the answers come from
&lt;/h2&gt;

&lt;p&gt;Entries are drawn from the houses' own official pages and from authorized retailers. Each entry is traceable to a saved source, and every answer points to the Scento page that covers it. When the database has no entry for something you ask about, it says so (look for the &lt;code&gt;missing&lt;/code&gt; field in a contrast) rather than inventing one.&lt;/p&gt;

&lt;p&gt;That is also why the answers are plain: notes, family, character and when a perfume wears best. It is a reference, not an opinion engine.&lt;/p&gt;

&lt;h2&gt;
  
  
  Practical notes
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;The &lt;code&gt;lang&lt;/code&gt; argument switches the scento.com links to one of ten languages (en, de, fr, es, it, ro, el, hu, cs, pl). Answers themselves stay in English.&lt;/li&gt;
&lt;li&gt;Perfume names can include the house ("Tom Ford Oud Wood") or be a slug (&lt;code&gt;oud-wood-tom-ford&lt;/code&gt;). Include the house when the name is common.&lt;/li&gt;
&lt;li&gt;Nothing needs a key, and nothing writes anything. Safe to leave enabled in an agent.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Links
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Developer page: &lt;a href="https://www.scento.com/developers" rel="noopener noreferrer"&gt;https://www.scento.com/developers&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Source and install notes: &lt;a href="https://github.com/Scento-com/perfume-mcp-server" rel="noopener noreferrer"&gt;https://github.com/Scento-com/perfume-mcp-server&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;OpenAPI: &lt;a href="https://www.scento.com/api/perfume/v1/openapi.json" rel="noopener noreferrer"&gt;https://www.scento.com/api/perfume/v1/openapi.json&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Scento: &lt;a href="https://www.scento.com" rel="noopener noreferrer"&gt;https://www.scento.com&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Tried it with a client we did not list? Tell us which one and what the config looked like.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Scento&lt;/em&gt;&lt;/p&gt;

</description>
      <category>mcp</category>
      <category>ai</category>
      <category>api</category>
      <category>tutorial</category>
    </item>
  </channel>
</rss>
