{"data":{"name":"app.perfumate/perfumate","title":"PerfuMate","description":"Perfumery materials, IFRA Category 4, EU allergens, and your formulas and shelf via OAuth.","version":"1.1.0","websiteUrl":"https://perfumate.app/chatgpt","repositoryUrl":null,"remotes":[{"url":"https://perfumate.app/mcp","type":"streamable-http"}],"packages":[],"status":"active","isLatest":true,"publishedAt":"2026-10-18T18:18:41.358Z","updatedAt":"2026-10-18T18:18:41.358Z","source":"official-registry","verification":"official","confidence":100,"stars":null,"sources":[{"stars":null,"title":"PerfuMate","source":"official-registry","sourceId":"app.perfumate/perfumate","updatedAt":"2026-10-18T18:18:41.358Z","confidence":100,"websiteUrl":"https://perfumate.app/chatgpt","description":"Perfumery materials, IFRA Category 4, EU allergens, and your formulas and shelf via OAuth.","verification":"official","repositoryUrl":null}],"toolIndex":{"tools":[{"serverName":"app.perfumate/perfumate","endpointFingerprint":"479809bee5e727aeb5b3ba4280b2b2759396fa7f57e1c023e19f58727733c40b","name":"add_to_shelf","title":"Add materials to your shelf","description":"Use this when the user says they have bought or own materials and wants them on their shelf. Adds catalog materials by name or CAS, or their own new ones; each item can carry the bottle strength, solvent, stock in grams, price per gram, supplier and lot. Without a strength, a catalog material gets its usual working dilution (in DPG unless a solvent is given), else neat. A list can also come as pasted text or an attached file: one material per line, or a table whose header row names the columns. Names that match nothing come back with suggestions.","inputSchema":{"type":"object","properties":{"items":{"maxItems":300,"type":"array","items":{"type":"object","properties":{"material":{"type":"string","minLength":1,"maxLength":160},"cas":{"type":"string","maxLength":40},"dilutionPct":{"type":"number","exclusiveMinimum":0,"maximum":100},"solvent":{"type":"string","maxLength":40},"stockGrams":{"type":"number","minimum":0,"maximum":1000000},"pricePerGram":{"type":"number","minimum":0,"maximum":1000000},"supplier":{"type":"string","maxLength":80},"lot":{"type":"string","maxLength":80},"lowStockGrams":{"type":"number","minimum":0,"maximum":1000000},"newMaterial":{"description":"Only for a material the catalog does not have: create it as the user's own material.","anyOf":[{"type":"boolean","const":true},{"type":"object","properties":{"family":{"type":"string","maxLength":40},"note":{"type":"string","enum":["top","heart","base","none"]},"cas":{"type":"string","maxLength":40},"odor":{"type":"string","maxLength":500},"natural":{"type":"boolean"}}}]}},"required":["material"]}},"text":{"type":"string","maxLength":100000},"file":{"description":"A list the user attached in the chat: CSV, TSV, TXT or Excel (.xlsx).","type":"object","properties":{"download_url":{"type":"string","format":"uri"},"file_id":{"type":"string"},"mime_type":{"type":"string"},"file_name":{"type":"string"}},"required":["download_url","file_id"]}},"$schema":"https://json-schema.org/draft/2020-12/schema"},"annotations":{"title":"Add materials to your shelf","readOnlyHint":false,"destructiveHint":false,"idempotentHint":false,"openWorldHint":false},"definitionHash":"4c8735490e16e7456b3594adaefe53ad1b08c324a703f7e4997caced20472afa","schemaStatus":"valid","origin":"official-registry","observedAt":"2026-11-02T13:46:16.879Z","metadataTrust":"untrusted"},{"serverName":"app.perfumate/perfumate","endpointFingerprint":"479809bee5e727aeb5b3ba4280b2b2759396fa7f57e1c023e19f58727733c40b","name":"branch_version","title":"Branch from a version","description":"Use this when the user wants to start a new line of work from a past version; the old working copy stays in the tree.","inputSchema":{"type":"object","properties":{"formula":{"type":"string","minLength":1,"maxLength":200,"description":"The formula: its id (from list_formulas) or its exact name."},"version":{"type":"string","minLength":1,"maxLength":60}},"required":["formula","version"],"$schema":"https://json-schema.org/draft/2020-12/schema"},"annotations":{"title":"Branch from a version","readOnlyHint":false,"destructiveHint":false,"idempotentHint":false,"openWorldHint":false},"definitionHash":"95536ae6776516357e53e81cb4709f046b2192169087c7c1ee07ad27c66cc928","schemaStatus":"valid","origin":"official-registry","observedAt":"2026-11-02T13:46:16.879Z","metadataTrust":"untrusted"},{"serverName":"app.perfumate/perfumate","endpointFingerprint":"479809bee5e727aeb5b3ba4280b2b2759396fa7f57e1c023e19f58727733c40b","name":"check_formula","title":"Check a formula (IFRA and EU allergens)","description":"Use this when the user has a perfume or accord formula, pasted or drafted earlier in this conversation, and wants to know whether it is IFRA compliant, how much of the finished product it may be, which line to reduce, or which EU allergens the label must declare. Checks IFRA Category 4 (fine fragrance) at the concentration the user chooses, finds the highest safe concentration and says how far to reduce a line that is over a limit. Give the formula as pasted text (one material per line with an amount) or as structured lines, every line in grams or every line in percent. Lines that match no catalog material are listed and not counted. Does not save anything and does not change the amounts. Returns a link that opens the formula in PerfuMate. For one material's limit use get_material; for a starting recipe use find_starting_formula.","inputSchema":{"type":"object","properties":{"formula":{"description":"The formula as text, one line per material, e.g. \"Hedione 4 g\" or \"Ambroxan 10% in DPG 2 g\".","type":"string","maxLength":20000},"lines":{"maxItems":200,"type":"array","items":{"type":"object","properties":{"material":{"type":"string","minLength":1,"maxLength":160,"description":"Material name as written, e.g. \"Iso E Super\"."},"amount":{"type":"number","exclusiveMinimum":0,"maximum":100000},"unit":{"default":"g","type":"string","enum":["g","mg","kg","%"]},"dilutionPct":{"description":"Strength of the bottle used, e.g. 10 for a 10% dilution. Omit for neat.","type":"number","exclusiveMinimum":0,"maximum":100}},"required":["material","amount"]}},"concentrationPct":{"default":20,"description":"How much of the finished product the formula is, e.g. 20 for an eau de parfum.","type":"number","minimum":0.1,"maximum":100}},"$schema":"https://json-schema.org/draft/2020-12/schema"},"annotations":{"title":"Check a formula (IFRA and EU allergens)","readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false},"definitionHash":"82c42bcc9fb597c5fa0859e72d852ce47c0a6b14dc4d38b1ce355f5160d2a41e","schemaStatus":"valid","origin":"official-registry","observedAt":"2026-11-02T13:46:16.879Z","metadataTrust":"untrusted"},{"serverName":"app.perfumate/perfumate","endpointFingerprint":"479809bee5e727aeb5b3ba4280b2b2759396fa7f57e1c023e19f58727733c40b","name":"confirm_delete","title":"Delete (step 2 of 2)","description":"Use this only after the user has said yes to the list delete_items showed. Deletes exactly that list, with its token. If the list included a protected item, confirmName must be the formula's name as the user typed it. Items stay restorable for 30 days.","inputSchema":{"type":"object","properties":{"token":{"type":"string","minLength":10,"maxLength":20000},"confirmName":{"type":"string","maxLength":200}},"required":["token"],"$schema":"https://json-schema.org/draft/2020-12/schema"},"annotations":{"title":"Delete (step 2 of 2)","readOnlyHint":false,"destructiveHint":true,"idempotentHint":false,"openWorldHint":false},"definitionHash":"0509b306ca896a573541b5c949bb7bd6857b2220fd20eb8bf0109dc255dc4366","schemaStatus":"valid","origin":"official-registry","observedAt":"2026-11-02T13:46:16.879Z","metadataTrust":"untrusted"},{"serverName":"app.perfumate/perfumate","endpointFingerprint":"479809bee5e727aeb5b3ba4280b2b2759396fa7f57e1c023e19f58727733c40b","name":"create_formula","title":"Create a formula on your bench","description":"Use this when the user wants a new formula on their PerfuMate bench, empty or with lines they give (structured, pasted text or an attached file), for example after building one together in this chat. Lines are matched to the catalog and the user's own materials; if any line does not match, nothing is saved and the unmatched names come back with suggestions. Bottles the user does not own are added off the shelf, as an import does. To only check a formula without saving it use check_formula.","inputSchema":{"type":"object","properties":{"name":{"type":"string","maxLength":120},"description":{"type":"string","maxLength":2000},"kind":{"type":"string","enum":["perfume","accord"]},"targetConcentrationPct":{"type":"number","minimum":0.01,"maximum":100},"folder":{"type":"string","maxLength":80},"lines":{"maxItems":200,"type":"array","items":{"type":"object","properties":{"material":{"type":"string","minLength":1,"maxLength":160,"description":"Name, trade name or CAS as written, e.g. \"Iso E Super\" or \"Ambroxan 10% in DPG\"."},"grams":{"description":"Weighed amount in grams. Never send together with percent.","type":"number","minimum":0,"maximum":100000},"percent":{"description":"Weighed share of the formula, when every line is percent. Never send together with grams. Not the bottle dilution.","type":"number","minimum":0,"maximum":100},"dilutionPct":{"description":"Strength of the bottle weighed, e.g. 10 for a 10% dilution.","type":"number","exclusiveMinimum":0,"maximum":100},"solvent":{"description":"The dilution's solvent, e.g. DPG, IPM, ethanol.","type":"string","maxLength":40},"newMaterial":{"description":"Only for a material the catalog does not have: create it as the user's own material.","anyOf":[{"type":"boolean","const":true},{"type":"object","properties":{"family":{"type":"string","maxLength":40},"note":{"type":"string","enum":["top","heart","base","none"]},"cas":{"type":"string","maxLength":40},"odor":{"type":"string","maxLength":500},"natural":{"type":"boolean"}}}]},"note":{"type":"string","maxLength":500},"flag":{"type":"string","enum":["too_strong","too_weak","replace"]}},"required":["material"],"additionalProperties":false}},"text":{"description":"The formula as pasted text, one material per line with an amount.","type":"string","maxLength":20000},"file":{"description":"A file the user attached in the chat: CSV, TSV, TXT, JSON or Excel (.xlsx).","type":"object","properties":{"download_url":{"type":"string","format":"uri"},"file_id":{"type":"string"},"mime_type":{"type":"string"},"file_name":{"type":"string"}},"required":["download_url","file_id"]},"batchGrams":{"description":"Batch size when lines are in percent. Default 10 g.","type":"number","exclusiveMinimum":0,"maximum":100000}},"$schema":"https://json-schema.org/draft/2020-12/schema"},"annotations":{"title":"Create a formula on your bench","readOnlyHint":false,"destructiveHint":false,"idempotentHint":false,"openWorldHint":false},"definitionHash":"7ccfbffb61698b3f9cac0d8abe3e6ef4707f9b0b3c2a1c7ab51248e0fc6aee9c","schemaStatus":"valid","origin":"official-registry","observedAt":"2026-11-02T13:46:16.879Z","metadataTrust":"untrusted"},{"serverName":"app.perfumate/perfumate","endpointFingerprint":"479809bee5e727aeb5b3ba4280b2b2759396fa7f57e1c023e19f58727733c40b","name":"decompose_accord","title":"Decompose an accord","description":"Use this when the user wants an accord line replaced by the materials it holds, at the same dose, in place (undo_last_change takes it back).","inputSchema":{"type":"object","properties":{"formula":{"type":"string","minLength":1,"maxLength":200,"description":"The formula: its id (from list_formulas) or its exact name."},"line":{"type":"string","minLength":1,"maxLength":200,"description":"The line: its material name or line id."}},"required":["formula","line"],"$schema":"https://json-schema.org/draft/2020-12/schema"},"annotations":{"title":"Decompose an accord","readOnlyHint":false,"destructiveHint":false,"idempotentHint":false,"openWorldHint":false},"definitionHash":"a187768a0af656d6c042229422b4c2bbb9a73e6f1b3b286bdebf069a89866371","schemaStatus":"valid","origin":"official-registry","observedAt":"2026-11-02T13:46:16.879Z","metadataTrust":"untrusted"},{"serverName":"app.perfumate/perfumate","endpointFingerprint":"479809bee5e727aeb5b3ba4280b2b2759396fa7f57e1c023e19f58727733c40b","name":"delete_items","title":"Prepare a deletion (step 1 of 2)","description":"Use this when the user asks to delete a formula, version, material, bottle, batch or note. It is step 1 of 2 and deletes NOTHING: it shows exactly what would be removed, with any protection, and returns a confirmation token valid for 10 minutes. Show the list to the user; only after they agree, call confirm_delete. Locked formulas cannot be deleted here.","inputSchema":{"type":"object","properties":{"items":{"minItems":1,"maxItems":50,"type":"array","items":{"type":"object","properties":{"kind":{"type":"string","enum":["formula","version","material","bottle","batch","note","journal_note"]},"ref":{"type":"string","minLength":1,"maxLength":200,"description":"Id or name."},"formula":{"description":"For a version: its formula.","type":"string","maxLength":200},"material":{"type":"string","maxLength":160},"dilutionPct":{"type":"number","exclusiveMinimum":0,"maximum":100}},"required":["kind","ref"]}}},"required":["items"],"$schema":"https://json-schema.org/draft/2020-12/schema"},"annotations":{"title":"Prepare a deletion (step 1 of 2)","readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false},"definitionHash":"06327ada93307b8d7bf7ed7eb28214bba33703dab57aa3b482c10a87e42a83e4","schemaStatus":"valid","origin":"official-registry","observedAt":"2026-11-02T13:46:16.879Z","metadataTrust":"untrusted"},{"serverName":"app.perfumate/perfumate","endpointFingerprint":"479809bee5e727aeb5b3ba4280b2b2759396fa7f57e1c023e19f58727733c40b","name":"duplicate_formula","title":"Duplicate a formula","description":"Use this when the user wants a copy of a formula to try changes on: an independent copy of its working copy with the same bottles, named \"<name> copy\" unless named.","inputSchema":{"type":"object","properties":{"formula":{"type":"string","minLength":1,"maxLength":200,"description":"The formula: its id (from list_formulas) or its exact name."},"name":{"type":"string","maxLength":120}},"required":["formula"],"$schema":"https://json-schema.org/draft/2020-12/schema"},"annotations":{"title":"Duplicate a formula","readOnlyHint":false,"destructiveHint":false,"idempotentHint":false,"openWorldHint":false},"definitionHash":"541e49d5430dc5801cdbba0e6297467eca54a19227215cf651d885ff067fdcec","schemaStatus":"valid","origin":"official-registry","observedAt":"2026-11-02T13:46:16.879Z","metadataTrust":"untrusted"},{"serverName":"app.perfumate/perfumate","endpointFingerprint":"479809bee5e727aeb5b3ba4280b2b2759396fa7f57e1c023e19f58727733c40b","name":"edit_formula","title":"Edit a formula's lines","description":"Use this when the user wants to change a formula on their bench: add or remove a material, set an amount or a bottle strength, swap a material, flag or note a line, reorder, or scale the whole formula. Changes the working copy in place, as one hand edit in the editor does. No version is made; undo_last_change reverses the change, save_version keeps a version when the user asks. Only when a batch was made from the working copy does the first change start one new working version (the result says so). A formula open in the app updates within seconds. Lines are named by material or id. For add/set_amount always specify unit: g is a weighed amount; % is the final weighed share of the whole formula (including solvent, not the pure aromatic relative/absolute percent). Other weighed lines are held fixed; several % targets are solved together. Never copy relativePct or absolutePct as grams. Read get_formula first and use weighedPct for this kind of percentage edit.","inputSchema":{"type":"object","properties":{"formula":{"type":"string","minLength":1,"maxLength":200,"description":"The formula: its id (from list_formulas) or its exact name."},"operations":{"minItems":1,"maxItems":100,"type":"array","items":{"type":"object","properties":{"op":{"type":"string","enum":["add","remove","set_amount","set_dilution","swap","set_flag","set_note","reorder","scale"]},"line":{"description":"The line: its material name or line id.","type":"string","maxLength":200},"material":{"type":"string","maxLength":160},"amount":{"description":"Amount in the explicit unit; never infer grams from a percentage.","type":"number","minimum":0,"maximum":100000},"unit":{"description":"For add/set_amount: g or % for a weighed formula, part/drop only for a line already in that native unit. Legacy omission keeps its native unit, never percent.","type":"string","enum":["g","%","part","drop"]},"dilutionPct":{"type":"number","exclusiveMinimum":0,"maximum":100},"solvent":{"type":"string","maxLength":40},"newMaterial":{"description":"Only for a material the catalog does not have: create it as the user's own material.","anyOf":[{"type":"boolean","const":true},{"type":"object","properties":{"family":{"type":"string","maxLength":40},"note":{"type":"string","enum":["top","heart","base","none"]},"cas":{"type":"string","maxLength":40},"odor":{"type":"string","maxLength":500},"natural":{"type":"boolean"}}}]},"flag":{"anyOf":[{"type":"string","enum":["too_strong","too_weak","replace"]},{"type":"null"}]},"note":{"type":"string","maxLength":500},"lines":{"description":"For reorder: lines in their new order.","maxItems":200,"type":"array","items":{"type":"string","maxLength":200}},"totalGrams":{"type":"number","exclusiveMinimum":0,"maximum":100000},"factor":{"type":"number","exclusiveMinimum":0,"maximum":1000}},"required":["op"],"additionalProperties":false}}},"required":["formula","operations"],"$schema":"https://json-schema.org/draft/2020-12/schema"},"annotations":{"title":"Edit a formula's lines","readOnlyHint":false,"destructiveHint":false,"idempotentHint":false,"openWorldHint":false},"definitionHash":"49deab1be6a68928e26a35c90d43646484d68deedd4ed13965fd5e12b99f68b8","schemaStatus":"valid","origin":"official-registry","observedAt":"2026-11-02T13:46:16.879Z","metadataTrust":"untrusted"},{"serverName":"app.perfumate/perfumate","endpointFingerprint":"479809bee5e727aeb5b3ba4280b2b2759396fa7f57e1c023e19f58727733c40b","name":"find_starting_formula","title":"Find a starting formula","description":"Use this when the user wants to build, create, compose or formulate a perfume, fragrance or accord and needs a starting recipe (a rose, a citrus cologne, a clean musk, an amber), or asks what they could make with materials they list. Matches the idea to PerfuMate's reference accords, the vetted recipes published at perfumate.app/accords, and returns the closest match with its percentages and grams for a batch, already checked against IFRA Category 4 at the concentration given (verdict, highest safe concentration, allergens to declare), plus a link that opens it in PerfuMate and a few alternatives. The ratios are the library's own; nothing is invented, and an idea no accord fits returns the list of available accords instead. Re-check any edited version with check_formula. Not for copying a named commercial perfume. Does not save anything.","inputSchema":{"type":"object","properties":{"idea":{"description":"What the user wants to make, in their words, e.g. \"fresh citrus cologne\", \"rose\", \"clean laundry musk\".","type":"string","maxLength":200},"haveMaterials":{"description":"Materials the user already has; accords they can make with them rank first and the missing ones are listed.","maxItems":60,"type":"array","items":{"type":"string","minLength":1,"maxLength":160}},"concentrationPct":{"default":20,"description":"How much of the finished product these lines would be, for the IFRA check, e.g. 20 for an eau de parfum.","type":"number","minimum":0.1,"maximum":100},"batchGrams":{"default":100,"description":"Batch size in grams for the amounts.","type":"number","minimum":0.1,"maximum":100000}},"$schema":"https://json-schema.org/draft/2020-12/schema"},"annotations":{"title":"Find a starting formula","readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false},"definitionHash":"c317ca61101ee316dc78ece3539f9cea314a68c16b9ed4eba407c988650e5830","schemaStatus":"valid","origin":"official-registry","observedAt":"2026-11-02T13:46:16.879Z","metadataTrust":"untrusted"},{"serverName":"app.perfumate/perfumate","endpointFingerprint":"479809bee5e727aeb5b3ba4280b2b2759396fa7f57e1c023e19f58727733c40b","name":"find_substitutes","title":"Find a stand-in on your shelf","description":"Use this when the user lacks a material in a formula, or asks what they could use instead from the materials they own: the app's Find on shelf for one line, with single bottles and two- or three-bottle blends from the shelf that can play that material's part, best first, with a match percent and what each carries or misses. Never offers an IFRA-prohibited material. Changes nothing; use_substitute swaps one in.","inputSchema":{"type":"object","properties":{"formula":{"type":"string","minLength":1,"maxLength":200,"description":"The formula: its id (from list_formulas) or its exact name."},"line":{"type":"string","minLength":1,"maxLength":200,"description":"The line: its material name or line id."}},"required":["formula","line"],"$schema":"https://json-schema.org/draft/2020-12/schema"},"annotations":{"title":"Find a stand-in on your shelf","readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false},"definitionHash":"c27d21af8856978e2718b68ab7e0b9bb3c941c8fba8b9d30d753be96cd42b3bd","schemaStatus":"valid","origin":"official-registry","observedAt":"2026-11-02T13:46:16.879Z","metadataTrust":"untrusted"},{"serverName":"app.perfumate/perfumate","endpointFingerprint":"479809bee5e727aeb5b3ba4280b2b2759396fa7f57e1c023e19f58727733c40b","name":"get_formula","title":"Show one of your formulas","description":"Use this when the user wants to see one of their formulas: every line with material, bottle strength, amount, relative and absolute percent, flags and notes, plus totals, concentration, cost and the note pyramid. Optionally adds an IFRA Category 4 and EU allergen check of it (\"is my formula IFRA compliant\"). Can read a past version by number or id.","inputSchema":{"type":"object","properties":{"formula":{"type":"string","minLength":1,"maxLength":200,"description":"The formula: its id (from list_formulas) or its exact name."},"version":{"description":"A version number such as \"3\", or its id. Omit for the working copy.","type":"string","maxLength":60},"checkIfra":{"type":"boolean"},"ifraConcentrationPct":{"description":"How much of the finished product the formula is, for the IFRA check. Default: its target, else 20.","type":"number","minimum":0.1,"maximum":100}},"required":["formula"],"$schema":"https://json-schema.org/draft/2020-12/schema"},"annotations":{"title":"Show one of your formulas","readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false},"definitionHash":"7d341097aa4097202edb94b4f0ca1860142c13439f1ae2390d59b0dd0c5e945d","schemaStatus":"valid","origin":"official-registry","observedAt":"2026-11-02T13:46:16.879Z","metadataTrust":"untrusted"},{"serverName":"app.perfumate/perfumate","endpointFingerprint":"479809bee5e727aeb5b3ba4280b2b2759396fa7f57e1c023e19f58727733c40b","name":"get_material","title":"Show a perfumery material","description":"Use this when the user asks what one perfumery material smells like, how it is used, how strong or long-lasting it is, or how much of it IFRA allows (its Category 4 fine-fragrance limit, e.g. \"how much Iso E Super can I use\"). Returns the odour description, family, note, impact, blotter life, synonyms, whether IFRA restricts it and its limit, whether the EU prohibits it, and a link to start a formula with it. The limit is the regulatory ceiling in the finished product, not a recommended dose. Without an exact match it returns the closest catalog names. To check a whole formula use check_formula.","inputSchema":{"type":"object","properties":{"name":{"type":"string","minLength":1,"maxLength":160,"description":"Canonical name, synonym or CAS number."}},"required":["name"],"$schema":"https://json-schema.org/draft/2020-12/schema"},"annotations":{"title":"Show a perfumery material","readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false},"definitionHash":"9797df9068c0efc99cfbc99b03469f4b3fd024df957032eeff8fd133a3afd628","schemaStatus":"valid","origin":"official-registry","observedAt":"2026-11-02T13:46:16.879Z","metadataTrust":"untrusted"},{"serverName":"app.perfumate/perfumate","endpointFingerprint":"479809bee5e727aeb5b3ba4280b2b2759396fa7f57e1c023e19f58727733c40b","name":"get_scent_profile","title":"Scent profile of a formula","description":"Use this when the user asks what a formula of theirs will smell like, how it evolves or how long it lasts, by PerfuMate's own scent model, exactly as the app's scent profile sheet shows it: families and sub-notes by weight and by perceived impact, the drydown at 0, 1, 4, 8 and 24 hours, the wear line (projection and longevity, e.g. \"Bold · moderate wear\") with its confidence, the genre, and the five-part note pyramid. Accords count by what they hold.","inputSchema":{"type":"object","properties":{"formula":{"type":"string","minLength":1,"maxLength":200,"description":"The formula: its id (from list_formulas) or its exact name."}},"required":["formula"],"$schema":"https://json-schema.org/draft/2020-12/schema"},"annotations":{"title":"Scent profile of a formula","readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false},"definitionHash":"0a6d6da61255a45f46bf3e264a27de5d7ab2370d0681de4077e02f0d48526407","schemaStatus":"valid","origin":"official-registry","observedAt":"2026-11-02T13:46:16.879Z","metadataTrust":"untrusted"},{"serverName":"app.perfumate/perfumate","endpointFingerprint":"479809bee5e727aeb5b3ba4280b2b2759396fa7f57e1c023e19f58727733c40b","name":"get_shelf_material","title":"Show one of your materials","description":"Use this when the user asks about one material they own: their notes, its bottles with recent stock movements, and the formulas that use it.","inputSchema":{"type":"object","properties":{"material":{"type":"string","minLength":1,"maxLength":200,"description":"The material: name, CAS, or its id from list_shelf."}},"required":["material"],"$schema":"https://json-schema.org/draft/2020-12/schema"},"annotations":{"title":"Show one of your materials","readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false},"definitionHash":"66b860a5c6c99a31badc0436c552c3eadb84cfef453d527ab3b2b51ddb9f6c27","schemaStatus":"valid","origin":"official-registry","observedAt":"2026-11-02T13:46:16.879Z","metadataTrust":"untrusted"},{"serverName":"app.perfumate/perfumate","endpointFingerprint":"479809bee5e727aeb5b3ba4280b2b2759396fa7f57e1c023e19f58727733c40b","name":"insert_accord","title":"Use a formula as an accord","description":"Use this when the user wants to use one of their saved formulas as a single ingredient inside another, as the app's accords do: a virtual material carrying the flattened composition (so IFRA, allergens, cost and the scent profile see what is inside) on a bottle at the accord's own aromatic strength. Optionally at an amount in grams.","inputSchema":{"type":"object","properties":{"formula":{"type":"string","minLength":1,"maxLength":200,"description":"The formula that receives the accord: its id or exact name."},"source":{"type":"string","minLength":1,"maxLength":200,"description":"The formula to use as the accord: its id or exact name."},"grams":{"type":"number","minimum":0,"maximum":100000}},"required":["formula","source"],"$schema":"https://json-schema.org/draft/2020-12/schema"},"annotations":{"title":"Use a formula as an accord","readOnlyHint":false,"destructiveHint":false,"idempotentHint":false,"openWorldHint":false},"definitionHash":"f3672493b541929821b2736442bbbc2adde17dc6ae06726e7951078abd425636","schemaStatus":"valid","origin":"official-registry","observedAt":"2026-11-02T13:46:16.879Z","metadataTrust":"untrusted"},{"serverName":"app.perfumate/perfumate","endpointFingerprint":"479809bee5e727aeb5b3ba4280b2b2759396fa7f57e1c023e19f58727733c40b","name":"journal_note","title":"Write in a batch's journal","description":"Use this when the user wants to add a dated line to a batch's maceration journal, or correct one.","inputSchema":{"type":"object","properties":{"batch":{"type":"string","maxLength":60},"noteId":{"type":"string","maxLength":60},"text":{"type":"string","minLength":1,"maxLength":2000},"date":{"type":"string","maxLength":30}},"required":["text"],"$schema":"https://json-schema.org/draft/2020-12/schema"},"annotations":{"title":"Write in a batch's journal","readOnlyHint":false,"destructiveHint":false,"idempotentHint":false,"openWorldHint":false},"definitionHash":"458cb101763bdb011589b55ef35cc95f99c7980e1b377347d752581b12fde1f6","schemaStatus":"valid","origin":"official-registry","observedAt":"2026-11-02T13:46:16.879Z","metadataTrust":"untrusted"},{"serverName":"app.perfumate/perfumate","endpointFingerprint":"479809bee5e727aeb5b3ba4280b2b2759396fa7f57e1c023e19f58727733c40b","name":"list_batches","title":"List your batches","description":"Use this when the user asks about batches they have made, all or one formula's, with their maceration journal and days resting.","inputSchema":{"type":"object","properties":{"formula":{"type":"string","minLength":1,"maxLength":200,"description":"The formula: its id (from list_formulas) or its exact name."}},"$schema":"https://json-schema.org/draft/2020-12/schema"},"annotations":{"title":"List your batches","readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false},"definitionHash":"4b92dd6b90109c2c17e85012dc2baac48c3927b3b2058e4704ab142a462e1ffe","schemaStatus":"valid","origin":"official-registry","observedAt":"2026-11-02T13:46:16.879Z","metadataTrust":"untrusted"},{"serverName":"app.perfumate/perfumate","endpointFingerprint":"479809bee5e727aeb5b3ba4280b2b2759396fa7f57e1c023e19f58727733c40b","name":"list_deleted","title":"Recently deleted","description":"Use this when the user wants to see what they deleted in the last 30 days and can still restore.","inputSchema":{"type":"object","properties":{"kind":{"type":"string","enum":["formula","version","material","bottle","batch","note","journal_note","shopping_item"]}},"$schema":"https://json-schema.org/draft/2020-12/schema"},"annotations":{"title":"Recently deleted","readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false},"definitionHash":"1a85f2a5cd811f1aafebf372bc062eb9ff655f4a094d97c1cae1b7886d8c0b3a","schemaStatus":"valid","origin":"official-registry","observedAt":"2026-11-02T13:46:16.879Z","metadataTrust":"untrusted"},{"serverName":"app.perfumate/perfumate","endpointFingerprint":"479809bee5e727aeb5b3ba4280b2b2759396fa7f57e1c023e19f58727733c40b","name":"list_formulas","title":"List your formulas","description":"Use this when the user asks what formulas they have, wants to find one by name, folder or favourite, or before you read or change a formula (it returns the ids the other tools use). Lists the formulas on the user's PerfuMate bench, pinned first then most recently edited, with folders. Locked formulas show their name only.","inputSchema":{"type":"object","properties":{"query":{"type":"string","maxLength":80},"folder":{"description":"A folder name; \"\" for unfiled.","type":"string","maxLength":80},"favoritesOnly":{"type":"boolean"},"kind":{"type":"string","enum":["perfume","accord"]}},"$schema":"https://json-schema.org/draft/2020-12/schema"},"annotations":{"title":"List your formulas","readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false},"definitionHash":"37b418f7bb66a8bfcde976d832fb304d95ba8d6d833df5aba7a0360fd3f26ca4","schemaStatus":"valid","origin":"official-registry","observedAt":"2026-11-02T13:46:16.879Z","metadataTrust":"untrusted"},{"serverName":"app.perfumate/perfumate","endpointFingerprint":"479809bee5e727aeb5b3ba4280b2b2759396fa7f57e1c023e19f58727733c40b","name":"list_notes","title":"Read your notebooks","description":"Use this when the user asks to read their PerfuMate notebooks: titles and previews, or one notebook in full by id.","inputSchema":{"type":"object","properties":{"id":{"type":"string","maxLength":60},"query":{"type":"string","maxLength":80}},"$schema":"https://json-schema.org/draft/2020-12/schema"},"annotations":{"title":"Read your notebooks","readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false},"definitionHash":"0db9324d42f7af2e3dcf642976c514d65d566fee7bb78b707d6ea7ec9f08924f","schemaStatus":"valid","origin":"official-registry","observedAt":"2026-11-02T13:46:16.879Z","metadataTrust":"untrusted"},{"serverName":"app.perfumate/perfumate","endpointFingerprint":"479809bee5e727aeb5b3ba4280b2b2759396fa7f57e1c023e19f58727733c40b","name":"list_shelf","title":"List your shelf","description":"Use this when the user asks which materials they own, what is in stock or running low, or as the first step to suggest what they can make with their shelf. Lists the materials on the user's shelf, each with its bottles: strength, solvent, stock, price, supplier, lot and running low.","inputSchema":{"type":"object","properties":{"query":{"type":"string","maxLength":80},"lowOnly":{"type":"boolean"}},"$schema":"https://json-schema.org/draft/2020-12/schema"},"annotations":{"title":"List your shelf","readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false},"definitionHash":"7aab859421b198ed5c91f8a20ada2a4b75fdcdf5ae83bcd8687532fa70f99995","schemaStatus":"valid","origin":"official-registry","observedAt":"2026-11-02T13:46:16.879Z","metadataTrust":"untrusted"},{"serverName":"app.perfumate/perfumate","endpointFingerprint":"479809bee5e727aeb5b3ba4280b2b2759396fa7f57e1c023e19f58727733c40b","name":"list_shopping","title":"Your shopping cart","description":"Use this when the user asks what they need to buy: the Shopping cart's lists and their items (with list and category), and the materials running low. Optionally one list only.","inputSchema":{"type":"object","properties":{"list":{"description":"A list name or id; omit for every list.","type":"string","maxLength":120}},"$schema":"https://json-schema.org/draft/2020-12/schema"},"annotations":{"title":"Your shopping cart","readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false},"definitionHash":"2a75ae398968f676999ea969ac65cbec687d1ba6787e4ce35909e2bd25774de9","schemaStatus":"valid","origin":"official-registry","observedAt":"2026-11-02T13:46:16.879Z","metadataTrust":"untrusted"},{"serverName":"app.perfumate/perfumate","endpointFingerprint":"479809bee5e727aeb5b3ba4280b2b2759396fa7f57e1c023e19f58727733c40b","name":"list_versions","title":"List a formula's versions","description":"Use this when the user asks about a formula's history: its version tree with notes and parents, which version is the working copy and which have batches.","inputSchema":{"type":"object","properties":{"formula":{"type":"string","minLength":1,"maxLength":200,"description":"The formula: its id (from list_formulas) or its exact name."}},"required":["formula"],"$schema":"https://json-schema.org/draft/2020-12/schema"},"annotations":{"title":"List a formula's versions","readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false},"definitionHash":"3ae5c62954404a9bc05864ea05f3cceffeedde5a76490a7625bc3a03964b0d27","schemaStatus":"valid","origin":"official-registry","observedAt":"2026-11-02T13:46:16.879Z","metadataTrust":"untrusted"},{"serverName":"app.perfumate/perfumate","endpointFingerprint":"479809bee5e727aeb5b3ba4280b2b2759396fa7f57e1c023e19f58727733c40b","name":"log_batch","title":"Log a batch","description":"Use this when the user has made a batch of a formula and wants it recorded: total weight, date, label and notes, optionally at a weaker strength, and optionally deducting what it used from stock. Works from the working copy or a version.","inputSchema":{"type":"object","properties":{"formula":{"type":"string","minLength":1,"maxLength":200,"description":"The formula: its id (from list_formulas) or its exact name."},"version":{"type":"string","maxLength":60},"totalGrams":{"type":"number","exclusiveMinimum":0,"maximum":1000000},"madeAt":{"description":"ISO date, default today.","type":"string","maxLength":30},"code":{"type":"string","maxLength":60},"notes":{"type":"string","maxLength":2000},"concentrationPct":{"type":"number","exclusiveMinimum":0,"maximum":100},"deductStock":{"type":"boolean"}},"required":["formula","totalGrams"],"$schema":"https://json-schema.org/draft/2020-12/schema"},"annotations":{"title":"Log a batch","readOnlyHint":false,"destructiveHint":false,"idempotentHint":false,"openWorldHint":false},"definitionHash":"f9aa1712300b698c1de4f2d67fba3b37e2d99cccab698424e1ebc88caf133edd","schemaStatus":"valid","origin":"official-registry","observedAt":"2026-11-02T13:46:16.879Z","metadataTrust":"untrusted"}],"endpoints":[{"endpointFingerprint":"479809bee5e727aeb5b3ba4280b2b2759396fa7f57e1c023e19f58727733c40b","protocol":"streamable-http","status":"indexed","toolCount":45,"observedAt":"2026-11-02T13:46:16.879Z"}],"authentication":"unknown"},"connectionConfigurations":{"status":"ready","authentication":"not embedded","clients":{"Claude Desktop":{"mcpServers":{"app.perfumate/perfumate":{"url":"https://perfumate.app/mcp"}}},"Cursor":{"mcpServers":{"app.perfumate/perfumate":{"url":"https://perfumate.app/mcp"}}},"VS Code":{"servers":{"app.perfumate/perfumate":{"type":"http","url":"https://perfumate.app/mcp"}}}}},"resourceType":"mcp-server","callable":true,"runtime":{"callable":true,"protocols":["mcp"]},"interfaces":[{"protocol":"mcp","transport":"streamable-http","url":"https://perfumate.app/mcp"}],"profile":{"apiVersion":"1","schemaVersion":"1","id":"mcp-server:app.perfumate%2Fperfumate","resourceType":"mcp-server","canonicalUrl":"https://www.agentsjunction.com/api/v1/servers/app.perfumate%2Fperfumate","name":"app.perfumate/perfumate","description":"Perfumery materials, IFRA Category 4, EU allergens, and your formulas and shelf via OAuth.","interfaces":[{"protocol":"mcp","transport":"streamable-http","url":"https://perfumate.app/mcp"}],"capabilities":[],"identity":{"source":"official-registry","websiteUrl":"https://perfumate.app/chatgpt","repositoryUrl":null,"version":"1.1.0"},"verification":{"state":"official","confidence":100},"operations":{"resourceType":"mcp-server","name":"app.perfumate/perfumate","status":"online","lastCheckedAt":"2026-11-03T20:15:47.469Z","lastSuccessfulCheck":"2026-11-03T20:15:47.469Z","latencyMs":471,"consecutiveFailures":0,"isStale":false,"checks":{"endpointReachable":true,"protocolValid":true,"agentCardValid":null,"mcpHandshakeValid":true},"lastSeen":null,"lastSuccessfulInteraction":null,"lastHealthCheck":"2026-11-03T20:15:47.469Z","source":{"type":"health-check","url":null},"observedAt":"2026-11-03T20:15:47.469Z"},"security":null,"timestamps":{"createdAt":"2026-10-18T18:18:41.358Z","updatedAt":"2026-10-18T18:18:41.358Z","observedAt":"2026-11-03T20:15:47.469Z"},"compatibility":{"serverVersion":"1.1.0","protocolVersions":[{"protocol":"mcp","version":null}]}}}}