About scentindex
scentindex is an MCP server and CLI for querying the public 10ml Fragrance Index. It supports perfume, note, house, and guide searches, plus similarity and alternative discovery, without requiring an API key.
Key features
- 01Search perfumes by text and filters
- 02View perfume details and notes
- 03Find similar scents and alternatives
- 04Browse perfumes by note
- 05Explain notes and search guides
Use cases
- 01Explore perfumes matching selected notes or styles
- 02Find alternatives from other fragrance houses
- 03Look up a note's scent profile
- 04Browse fragrance houses and guides
MCP support
Exposes nine tools to MCP clients for searching and retrieving perfumes, notes, houses, and guides. It also supports similarity and alternative searches.
Configuration
Local server config is the same for every client. Copy it into your client’s MCP config file.
Tools
9Saved tool list · updated 1w ago
| Parameter | Type | Required | Description |
|---|---|---|---|
| q | string | No | |
| house | string | No | |
| limit | integer | No | Page size (default 20, max 100). |
| style | string | No | |
| cursor | string | No | Opaque cursor from a previous response. |
| family | string | No | |
| gender | string | No | |
| iconic | boolean | No | |
| locale | string | No | Response language (en, es, fr, de, it, pt, nl, pl, ru, ja, ko, zh, ar, hi, tr, sv, id). |
| season | string | No | |
| accords | string | No | |
| occasion | string | No | |
| notes_exclude | string | No | |
| notes_include | string | No | |
| response_format | enum | No | concise (default) or detailed.concise | detailed |
Details
From the project READMEscentindex
A window onto a large fragrance index. scentindex queries the public 10ml Fragrance Index — perfumes, the notes inside them, the houses that make them, and the guides that explain the vocabulary — and returns what the index returns, unchanged. No account and no API key are involved; it is a thin, honest client over a public API.
What you can do with it:
- Search perfumes by free text, house, notes included or excluded, accords, family, gender, season, occasion or style, and page through the results with a cursor.
- Open one perfume in full to see its notes, accords and metadata.
- Start from a perfume, a note set or an accord profile and find similar scents, or look for alternatives — the same scent profile from other houses.
- Browse perfumes by a single note, for example everything containing oud.
- Ask what a note actually smells like and where it tends to appear.
- List and open fragrance houses, filtered by type or country, and search the index's guides and glossary content.
Most tools accept a locale for the response language and,
where the underlying operation supports it, a
response_format of concise (the API's default) or
detailed. List tools page with limit (1–100) and an
opaque cursor taken from a previous response.
Labelled subset: 9 of 15 tools
This rebuild implements 9 of the original tool set's 15 tools — the nine that map onto operations published in the upstream OpenAPI document:
search_perfumes, get_perfume, find_similar_perfumes,
find_perfume_alternatives, perfumes_by_note,
explain_note, list_houses, get_house, search_guides.
The remaining six are omitted, because they have no operation in the published OpenAPI and their argument shapes are not published anywhere reachable:
compare_perfumes, recommend_perfumes,
explain_perfume_term, suggest_layering,
pick_for_occasion, find_gift.
Configuration
The API base defaults to https://mcp.10ml.com/api/v1 and
can be overridden with the PERFUME_API_BASE environment
variable. No API key is required.
CLI
Each tool is a subcommand taking one JSON argument string:
npx @reneturcios/scentindex search_perfumes '{"q":"oud","limit":10}'
npx @reneturcios/scentindex get_perfume '{"id":"<perfume id>"}'
npx @reneturcios/scentindex find_similar_perfumes '{"perfume":"<name>"}'
npx @reneturcios/scentindex find_perfume_alternatives '{"perfume":"<name>"}'
npx @reneturcios/scentindex perfumes_by_note '{"note":"oud"}'
npx @reneturcios/scentindex explain_note '{"id":"oud"}'
npx @reneturcios/scentindex list_houses '{"country":"FR"}'
npx @reneturcios/scentindex get_house '{"id":"<house id>"}'
npx @reneturcios/scentindex search_guides '{"q":"layering"}'
npx @reneturcios/scentindex --version
Output is the upstream JSON, verbatim. Exit codes: 0 on
success, 1 on a runtime error (including a validation or
upstream failure), 2 on a usage error.
MCP server
npx -y @reneturcios/scentindex mcp
MCP client config:
{
"mcpServers": {
"scentindex": {
"command": "npx",
"args": ["-y", "@reneturcios/scentindex", "mcp"]
}
}
}
Docker
docker run -i ghcr.io/cloudcorprecords/scentindex
docker run --rm ghcr.io/cloudcorprecords/scentindex perfumes_by_note '{"note":"oud"}'
Development
npm install
npm run build # tsc -> dist/
npm test # tsx --test test/*.test.ts (fake fetch only, no network)
npm run dev # run the CLI from source
License
MIT — Copyright (c) 2026 Rene Turcios
Comments
New to MCP?
From what the protocol is to installing your first server, these answers cover most first questions.
An open protocol that defines how AI applications connect to external tools and data in a uniform way. Clients talk to the model; MCP servers provide tools, resources and prompt templates. They exchange standard messages, so one server can be reused by many clients.