Give Claude a perfumer's memory in 30 seconds A developer connected the Scento Perfume Compendium, a free reference of 700+ perfumes, 400+ raw materials and 120+ houses, to Claude and other assistants via a remote Model Context Protocol server at scento.com/mcp, with no install or API key required. The server exposes 13 read-only, idempotent tools such as perfume-portrait and perfume-contrast that return a structured 'folio' including a quotable lede, source page and citation string, so models ground answers in the reference instead of inventing perfume names and seasons. Setup is a single URL pasted into Claude's connectors, ChatGPT's developer-mode apps, or an mcpServers config entry, with npm and PyPI proxies for clients that only launch local commands. 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. The reference is the Scento Perfume Compendium: 700+ perfumes, 400+ raw materials and 120+ houses, free, no key, no account. It speaks MCP, and it also speaks plain HTTP. 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. The Compendium server is remote, so there is nothing to install on your machine: one URL, https://www.scento.com/mcp . Claude web or desktop . Settings → Connectors → Add custom connector → paste the URL. ChatGPT. Settings → Apps → Advanced → turn on developer mode → Create → paste the same URL, authentication None. Claude Code. One line: claude mcp add --transport http scento-perfume-compendium https://www.scento.com/mcp Cursor, Windsurf and other mcpServers clients. Add this entry to the client's MCP config for Cursor, ~/.cursor/mcp.json or the project's .cursor/mcp.json : { "mcpServers": { "scento-perfume-compendium": { "type": "http", "url": "https://www.scento.com/mcp" } } } VS Code. Same entry, but .vscode/mcp.json names the top-level key servers : { "servers": { "scento-perfume-compendium": { "type": "http", "url": "https://www.scento.com/mcp" } } } Clients that only launch local commands. The same server is published as a thin proxy on npm and PyPI: npx -y scento-perfume-compendium or uvx scento-perfume-compendium Either one forwards to the remote URL, so you get identical answers. compendium-search , perfume-portrait , scent-neighbours , perfume-contrast , note-portrait , material-match , house-portrait , family-map , occasion-edit , wardrobe-composer , perfumery-lexicon and journal-search . Every tool is annotated read-only and idempotent, so a client can treat repeat calls as safe. Every tool returns the same shape, which the server calls a folio: a quotable lede , a detail object, the scento page it came from, further reading links, and a cite string. That last part matters. The model has something to quote and a page to point at. Prompt: "What is Tom Ford Oud Wood like, and when would I wear it?" The assistant calls perfume-portrait : { "name": "perfume-portrait", "arguments": { "perfume": "Tom Ford Oud Wood" } } The text half of the response live, 21 Oct 2026; the name, house and further-reading lines are trimmed : 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 Compendium, scento.com 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. Prompt: "Byredo Mojave Ghost versus Gypsy Water, what actually differs?" { "name": "perfume-contrast", "arguments": { "perfumes": "Byredo Mojave Ghost", "Byredo Gypsy Water" } } The lede, the shared materials and the response's detail.axes laid out in two columns Mojave Ghost left, Gypsy Water right; the house, season, hour, year and concentration axes are left out : Mojave Ghost and Gypsy Water share sandalwood, but part ways on family. shared: Sandalwood family: Wood & Root | Green Leaf / Amber & 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 The tool returns the axes already aligned, so the model does not have to line up two pyramids itself. A verdict 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. Prompt: "Which perfumes have tobacco and vanilla in the base?" { "name": "material-match", "arguments": { "materials": "tobacco", "vanilla" , "tier": "base" } } The text half, with links trimmed: 5 perfumes in the Scento Compendium contain tobacco and vanilla in the base, Naxos first. Perfumes: - Naxos Xerjoff — family: Velvet Sweet; Tobacco base, Vanilla base - Red Tobacco Mancera — family: Wood & Root; Tobacco base, Vanilla base - Spicebomb Extreme Viktor&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 materials takes one to four names that must all be present, tier accepts top, heart, base or any the default , and family narrows the list further. If a list is longer than one page, the answer carries a continuation token to pass back in. The same twelve answers are available over HTTP under /api/compendium/v1 , with an OpenAPI 3.1 description. the contrast from session 2 curl -s "https://www.scento.com/api/compendium/v1/contrast?perfumes=byredo-mojave-ghost,gypsy-water" the match from session 3 curl -s "https://www.scento.com/api/compendium/v1/materials/match?materials=tobacco,vanilla&tier=base" the spec, for codegen or a custom GPT action curl -s https://www.scento.com/api/compendium/v1/openapi.json Other routes follow the same pattern: /search?q= , /perfumes/{perfume} , /perfumes/{perfume}/neighbours , /materials/{material} , /houses/{house} , /families , /edits/{occasion} , /wardrobe?loves=a,b , /lexicon/{term} and /journal?q= . Every route takes lang , and list routes take continuation . Each response is the bare folio JSON, the same object an MCP tool returns in structuredContent . A small Python wrapper: python import requests BASE = "https://www.scento.com/api/compendium/v1" def match materials, tier="base" : r = requests.get f"{BASE}/materials/match", params={"materials": ",".join materials , "tier": tier}, timeout=20 r.raise for status folio = r.json return folio "lede" , folio "detail" "perfumes" , folio "cite" lede, perfumes, cite = match "tobacco", "vanilla" print lede for p in perfumes: print "-", p "name" , p "house" , p "page" print cite Keep the cite string and the scento page URL in whatever you render. That is the point of the exercise. 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. It also changes how you can phrase prompts. Instead of "recall everything you know about", try "use the Compendium 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. If you are building your own agent loop, treat the folio as the contract. Pass lede and detail to the model, keep scento page and cite for the UI, and use continuation when a list runs past one page. 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 Compendium has no entry for something you ask about, it says so look for the missing field in a contrast rather than inventing one. 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. lang 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. oud-wood-tom-ford . Include the house when the name is common. Tried it with a client we did not list? Tell us which one and what the config looked like. Scento