{"$schema":"https://wellknown.network/schemas/agent-record-v1.json","schemaVersion":"1","id":"ag_errqq5kr8b6u","handle":"perfumate","url":"https://wellknown.network/agents/perfumate","links":{"self":"https://wellknown.network/agents/perfumate/record.json","html":"https://wellknown.network/agents/perfumate","markdown":"https://wellknown.network/agents/perfumate/record.md","api":"https://wellknown.network/api/v1/agents/perfumate","status":"https://wellknown.network/api/v1/agents/perfumate/status","claim":"https://wellknown.network/agents/perfumate/claim","claimApi":"https://wellknown.network/api/v1/claims","claimDescriptor":"https://wellknown.network/agents/perfumate/claim.json","badge":"https://wellknown.network/agents/perfumate/badge.svg","openapi":"https://wellknown.network/openapi.json","history":"https://wellknown.network/api/v1/agents/perfumate/history","tools":"https://wellknown.network/api/v1/agents/perfumate/tools"},"ard":{"identifier":"urn:air:perfumate.app:server:perfumate","type":"application/mcp-server-card+json"},"kind":"mcp_server","declared":{"name":"PerfuMate","summary":"Perfumery materials, IFRA Category 4, EU allergens, and your formulas and shelf via OAuth.","description":"Perfumery materials, IFRA Category 4, EU allergens, and your formulas and shelf via OAuth.","publisher":{"name":"app.perfumate","url":null},"homepage":"https://perfumate.app/chatgpt","repository":null,"version":"1.1.0","license":null,"protocols":["mcp"],"tags":[],"pricing":null,"endpoints":[{"url":"https://perfumate.app/mcp","type":"mcp_streamable_http","auth":null,"probeable":true}],"skills":null,"tools":null,"extra":{"updatedAt":"2026-10-18T18:18:41.358332Z","publishedAt":"2026-10-18T18:18:41.358332Z","registryName":"app.perfumate/perfumate"},"attribution":{"kind":"mcp_registry","name":"mcp_registry","summary":"mcp_registry","version":"mcp_registry","description":"mcp_registry","homepageUrl":"mcp_registry","publisherName":"mcp_registry"}},"derived":{"capabilities":[{"slug":"content.writing","name":"Writing & Editing","confidence":0.51,"provenance":"derived"},{"slug":"commerce.ecommerce","name":"E-commerce Operations","confidence":0.51,"provenance":"derived"}],"categories":["commerce","content"],"language":"en"},"observed":{"status":"live","statusReason":"Responded 2h ago.","lastOkAt":"2026-11-03T03:29:48.305Z","lastProbedAt":"2026-11-03T03:29:48.305Z","statusComputedAt":"2026-11-03T03:33:25.222Z","reliability30d":{"probes":43,"successRate":1,"p50Ms":1227,"basis":"service","measures":{"availability":"availability","latency":"response time","tools":"tool surface observed","summary":"Checks reached the service itself."},"checks":{"total":43,"ok":43,"authBoundaryOk":0,"serviceOk":43,"note":"Counted from the observation rows for the window, checks of the server only (HTTP, A2A card, MCP initialize). ok = authBoundaryOk + serviceOk. `probes` is the sum of daily rollups and includes registry checks, so it can differ from `total`."}},"latestObservations":[{"at":"2026-11-03T03:29:48.305Z","kind":"mcp_initialize","ok":true,"httpStatus":200,"latencyMs":1360,"error":null,"detail":{"tools":[{"name":"search_materials","description":"Use this when the user wants to find perfumery materials by scent, family, name or CAS number, for example musks, woods or citrus to put in a formula, or the ca"},{"name":"get_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 Catego"},{"name":"check_formula","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"},{"name":"find_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 clea"},{"name":"my_account","description":"Use this when the user asks about their PerfuMate account or how big their bench is. Returns the linked account's plan (\"unlimited\" or \"ai_studio\") and its coun"},{"name":"list_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 "},{"name":"get_formula","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, pl"},{"name":"list_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."},{"name":"create_formula","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 af"},{"name":"edit_formula","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 l"},{"name":"update_formula","description":"Use this when the user wants to rename a formula or change its description, bench notes, kind (perfume or accord), folder, favourite star, pin, target concentra"},{"name":"rename_folder","description":"Use this when the user wants to rename a formula folder: every formula filed in it moves (an empty name unfiles them)."},{"name":"duplicate_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 na"},{"name":"save_version","description":"Use this when the user wants to keep the current state of a formula as a named version in its evolution tree and carry on editing on a fresh copy."},{"name":"branch_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."},{"name":"open_version","description":"Use this when the user wants to go back and edit a past version directly, without cloning it. Refused for a version a batch was made from."},{"name":"rename_version","description":"Use this when the user wants to change a version's note or the number it carries."},{"name":"list_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. List"},{"name":"get_shelf_material","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."},{"name":"add_to_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 "},{"name":"update_bottle","description":"Use this when the user wants to record stock for a bottle (a weighed count, or grams bought or used, through the stock ledger) or change its price per gram, sup"},{"name":"make_dilution","description":"Use this when the user has made, or wants to record, a dilution from a bottle they own; the material used is taken from the source bottle's stock."},{"name":"update_material","description":"Use this when the user wants to change a material on their bench: their notes, odour description, families, note, impact, blotter hours, shelf life, synonyms, f"},{"name":"list_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."},{"name":"log_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"},{"name":"journal_note","description":"Use this when the user wants to add a dated line to a batch's maceration journal, or correct one."},{"name":"list_notes","description":"Use this when the user asks to read their PerfuMate notebooks: titles and previews, or one notebook in full by id."},{"name":"write_note","description":"Use this when the user wants to create a notebook or change one: its title, body, appended text or pin."},{"name":"list_shopping","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"},{"name":"shopping_list","description":"Use this when the user wants to add materials or free text to a Shopping cart list (the default list unless one is named; a new name makes that list), tick item"},{"name":"set_preferences","description":"Use this when the user wants to change the account's currency symbol or its default low-stock warning (grams; 0 turns it off)."},{"name":"delete_items","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"},{"name":"confirm_delete","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, con"},{"name":"list_deleted","description":"Use this when the user wants to see what they deleted in the last 30 days and can still restore."},{"name":"restore_deleted","description":"Use this when the user wants something back from Recently deleted (deleted in the last 30 days)."},{"name":"undo_last_change","description":"Use this when the user wants to take back the last change made from the chat, to one formula or the last of any, from any chat. Pass the exact changeId from a w"},{"name":"get_scent_profile","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 "},{"name":"find_substitutes","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, wit"},{"name":"use_substitute","description":"Use this when the user picks one of find_substitutes' suggestions: replaces the line with it (pass its member names), in place, with the app's own amounts, the "},{"name":"rebuild_from_shelf","description":"Use this when the user asks what they can make with the materials they own, or wants a formula rebuilt using only their shelf: the app's Replace with materials "},{"name":"insert_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 "},{"name":"view_accord","description":"Use this when the user asks what is inside an accord line of a formula: its materials at the dose it is used in, each with its share of the accord, read live fr"},{"name":"decompose_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)."},{"name":"resync_accord","description":"Use this when the source formula of an accord has changed and the user wants the accord line to follow: re-reads its composition, families and price as it is no"},{"name":"scale_to_concentration","description":"Use this when the user wants to change a formula's concentration (for example from an eau de parfum to an eau de toilette) or its finished weight: the app's Sca"}],"toolCount":45,"toolsHash":"6d7945900ac3648e1756ecc27a1e6046122df9f4fd53587ba87525b32f705f60","serverName":"perfumate","capabilities":["tools"],"serverVersion":"1.1.0","protocolVersion":"2025-06-18"}},{"at":"2026-11-02T19:22:54.517Z","kind":"mcp_initialize","ok":true,"httpStatus":200,"latencyMs":496,"error":null,"detail":{"tools":[{"name":"search_materials","description":"Use this when the user wants to find perfumery materials by scent, family, name or CAS number, for example musks, woods or citrus to put in a formula, or the ca"},{"name":"get_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 Catego"},{"name":"check_formula","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"},{"name":"find_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 clea"},{"name":"my_account","description":"Use this when the user asks about their PerfuMate account or how big their bench is. Returns the linked account's plan (\"unlimited\" or \"ai_studio\") and its coun"},{"name":"list_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 "},{"name":"get_formula","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, pl"},{"name":"list_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."},{"name":"create_formula","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 af"},{"name":"edit_formula","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 l"},{"name":"update_formula","description":"Use this when the user wants to rename a formula or change its description, bench notes, kind (perfume or accord), folder, favourite star, pin, target concentra"},{"name":"rename_folder","description":"Use this when the user wants to rename a formula folder: every formula filed in it moves (an empty name unfiles them)."},{"name":"duplicate_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 na"},{"name":"save_version","description":"Use this when the user wants to keep the current state of a formula as a named version in its evolution tree and carry on editing on a fresh copy."},{"name":"branch_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."},{"name":"open_version","description":"Use this when the user wants to go back and edit a past version directly, without cloning it. Refused for a version a batch was made from."},{"name":"rename_version","description":"Use this when the user wants to change a version's note or the number it carries."},{"name":"list_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. List"},{"name":"get_shelf_material","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."},{"name":"add_to_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 "},{"name":"update_bottle","description":"Use this when the user wants to record stock for a bottle (a weighed count, or grams bought or used, through the stock ledger) or change its price per gram, sup"},{"name":"make_dilution","description":"Use this when the user has made, or wants to record, a dilution from a bottle they own; the material used is taken from the source bottle's stock."},{"name":"update_material","description":"Use this when the user wants to change a material on their bench: their notes, odour description, families, note, impact, blotter hours, shelf life, synonyms, f"},{"name":"list_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."},{"name":"log_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"},{"name":"journal_note","description":"Use this when the user wants to add a dated line to a batch's maceration journal, or correct one."},{"name":"list_notes","description":"Use this when the user asks to read their PerfuMate notebooks: titles and previews, or one notebook in full by id."},{"name":"write_note","description":"Use this when the user wants to create a notebook or change one: its title, body, appended text or pin."},{"name":"list_shopping","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"},{"name":"shopping_list","description":"Use this when the user wants to add materials or free text to a Shopping cart list (the default list unless one is named; a new name makes that list), tick item"},{"name":"set_preferences","description":"Use this when the user wants to change the account's currency symbol or its default low-stock warning (grams; 0 turns it off)."},{"name":"delete_items","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"},{"name":"confirm_delete","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, con"},{"name":"list_deleted","description":"Use this when the user wants to see what they deleted in the last 30 days and can still restore."},{"name":"restore_deleted","description":"Use this when the user wants something back from Recently deleted (deleted in the last 30 days)."},{"name":"undo_last_change","description":"Use this when the user wants to take back the last change made from the chat, to one formula or the last of any, from any chat. Pass the exact changeId from a w"},{"name":"get_scent_profile","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 "},{"name":"find_substitutes","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, wit"},{"name":"use_substitute","description":"Use this when the user picks one of find_substitutes' suggestions: replaces the line with it (pass its member names), in place, with the app's own amounts, the "},{"name":"rebuild_from_shelf","description":"Use this when the user asks what they can make with the materials they own, or wants a formula rebuilt using only their shelf: the app's Replace with materials "},{"name":"insert_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 "},{"name":"view_accord","description":"Use this when the user asks what is inside an accord line of a formula: its materials at the dose it is used in, each with its share of the accord, read live fr"},{"name":"decompose_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)."},{"name":"resync_accord","description":"Use this when the source formula of an accord has changed and the user wants the accord line to follow: re-reads its composition, families and price as it is no"},{"name":"scale_to_concentration","description":"Use this when the user wants to change a formula's concentration (for example from an eau de parfum to an eau de toilette) or its finished weight: the app's Sca"}],"toolCount":45,"toolsHash":"6d7945900ac3648e1756ecc27a1e6046122df9f4fd53587ba87525b32f705f60","serverName":"perfumate","capabilities":["tools"],"serverVersion":"1.1.0","protocolVersion":"2025-06-18"}},{"at":"2026-11-02T11:26:11.650Z","kind":"mcp_initialize","ok":true,"httpStatus":200,"latencyMs":481,"error":null,"detail":{"tools":[{"name":"search_materials","description":"Use this when the user wants to find perfumery materials by scent, family, name or CAS number, for example musks, woods or citrus to put in a formula, or the ca"},{"name":"get_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 Catego"},{"name":"check_formula","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"},{"name":"find_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 clea"},{"name":"my_account","description":"Use this when the user asks about their PerfuMate account or how big their bench is. Returns the linked account's plan (\"unlimited\" or \"ai_studio\") and its coun"},{"name":"list_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 "},{"name":"get_formula","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, pl"},{"name":"list_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."},{"name":"create_formula","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 af"},{"name":"edit_formula","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 l"},{"name":"update_formula","description":"Use this when the user wants to rename a formula or change its description, bench notes, kind (perfume or accord), folder, favourite star, pin, target concentra"},{"name":"rename_folder","description":"Use this when the user wants to rename a formula folder: every formula filed in it moves (an empty name unfiles them)."},{"name":"duplicate_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 na"},{"name":"save_version","description":"Use this when the user wants to keep the current state of a formula as a named version in its evolution tree and carry on editing on a fresh copy."},{"name":"branch_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."},{"name":"open_version","description":"Use this when the user wants to go back and edit a past version directly, without cloning it. Refused for a version a batch was made from."},{"name":"rename_version","description":"Use this when the user wants to change a version's note or the number it carries."},{"name":"list_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. List"},{"name":"get_shelf_material","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."},{"name":"add_to_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 "},{"name":"update_bottle","description":"Use this when the user wants to record stock for a bottle (a weighed count, or grams bought or used, through the stock ledger) or change its price per gram, sup"},{"name":"make_dilution","description":"Use this when the user has made, or wants to record, a dilution from a bottle they own; the material used is taken from the source bottle's stock."},{"name":"update_material","description":"Use this when the user wants to change a material on their bench: their notes, odour description, families, note, impact, blotter hours, shelf life, synonyms, f"},{"name":"list_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."},{"name":"log_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"},{"name":"journal_note","description":"Use this when the user wants to add a dated line to a batch's maceration journal, or correct one."},{"name":"list_notes","description":"Use this when the user asks to read their PerfuMate notebooks: titles and previews, or one notebook in full by id."},{"name":"write_note","description":"Use this when the user wants to create a notebook or change one: its title, body, appended text or pin."},{"name":"list_shopping","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"},{"name":"shopping_list","description":"Use this when the user wants to add materials or free text to a Shopping cart list (the default list unless one is named; a new name makes that list), tick item"},{"name":"set_preferences","description":"Use this when the user wants to change the account's currency symbol or its default low-stock warning (grams; 0 turns it off)."},{"name":"delete_items","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"},{"name":"confirm_delete","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, con"},{"name":"list_deleted","description":"Use this when the user wants to see what they deleted in the last 30 days and can still restore."},{"name":"restore_deleted","description":"Use this when the user wants something back from Recently deleted (deleted in the last 30 days)."},{"name":"undo_last_change","description":"Use this when the user wants to take back the last change made from the chat, to one formula or the last of any, from any chat. Pass the exact changeId from a w"},{"name":"get_scent_profile","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 "},{"name":"find_substitutes","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, wit"},{"name":"use_substitute","description":"Use this when the user picks one of find_substitutes' suggestions: replaces the line with it (pass its member names), in place, with the app's own amounts, the "},{"name":"rebuild_from_shelf","description":"Use this when the user asks what they can make with the materials they own, or wants a formula rebuilt using only their shelf: the app's Replace with materials "},{"name":"insert_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 "},{"name":"view_accord","description":"Use this when the user asks what is inside an accord line of a formula: its materials at the dose it is used in, each with its share of the accord, read live fr"},{"name":"decompose_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)."},{"name":"resync_accord","description":"Use this when the source formula of an accord has changed and the user wants the accord line to follow: re-reads its composition, families and price as it is no"},{"name":"scale_to_concentration","description":"Use this when the user wants to change a formula's concentration (for example from an eau de parfum to an eau de toilette) or its finished weight: the app's Sca"}],"toolCount":45,"toolsHash":"6d7945900ac3648e1756ecc27a1e6046122df9f4fd53587ba87525b32f705f60","serverName":"perfumate","capabilities":["tools"],"serverVersion":"1.1.0","protocolVersion":"2025-06-18"}},{"at":"2026-11-02T03:26:50.466Z","kind":"mcp_initialize","ok":true,"httpStatus":200,"latencyMs":1440,"error":null,"detail":{"tools":[{"name":"search_materials","description":"Use this when the user wants to find perfumery materials by scent, family, name or CAS number, for example musks, woods or citrus to put in a formula, or the ca"},{"name":"get_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 Catego"},{"name":"check_formula","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"},{"name":"find_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 clea"},{"name":"my_account","description":"Use this when the user asks about their PerfuMate account or how big their bench is. Returns the linked account's plan (\"unlimited\" or \"ai_studio\") and its coun"},{"name":"list_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 "},{"name":"get_formula","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, pl"},{"name":"list_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."},{"name":"create_formula","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 af"},{"name":"edit_formula","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 l"},{"name":"update_formula","description":"Use this when the user wants to rename a formula or change its description, bench notes, kind (perfume or accord), folder, favourite star, pin, target concentra"},{"name":"rename_folder","description":"Use this when the user wants to rename a formula folder: every formula filed in it moves (an empty name unfiles them)."},{"name":"duplicate_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 na"},{"name":"save_version","description":"Use this when the user wants to keep the current state of a formula as a named version in its evolution tree and carry on editing on a fresh copy."},{"name":"branch_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."},{"name":"open_version","description":"Use this when the user wants to go back and edit a past version directly, without cloning it. Refused for a version a batch was made from."},{"name":"rename_version","description":"Use this when the user wants to change a version's note or the number it carries."},{"name":"list_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. List"},{"name":"get_shelf_material","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."},{"name":"add_to_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 "},{"name":"update_bottle","description":"Use this when the user wants to record stock for a bottle (a weighed count, or grams bought or used, through the stock ledger) or change its price per gram, sup"},{"name":"make_dilution","description":"Use this when the user has made, or wants to record, a dilution from a bottle they own; the material used is taken from the source bottle's stock."},{"name":"update_material","description":"Use this when the user wants to change a material on their bench: their notes, odour description, families, note, impact, blotter hours, shelf life, synonyms, f"},{"name":"list_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."},{"name":"log_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"},{"name":"journal_note","description":"Use this when the user wants to add a dated line to a batch's maceration journal, or correct one."},{"name":"list_notes","description":"Use this when the user asks to read their PerfuMate notebooks: titles and previews, or one notebook in full by id."},{"name":"write_note","description":"Use this when the user wants to create a notebook or change one: its title, body, appended text or pin."},{"name":"list_shopping","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"},{"name":"shopping_list","description":"Use this when the user wants to add materials or free text to a Shopping cart list (the default list unless one is named; a new name makes that list), tick item"},{"name":"set_preferences","description":"Use this when the user wants to change the account's currency symbol or its default low-stock warning (grams; 0 turns it off)."},{"name":"delete_items","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"},{"name":"confirm_delete","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, con"},{"name":"list_deleted","description":"Use this when the user wants to see what they deleted in the last 30 days and can still restore."},{"name":"restore_deleted","description":"Use this when the user wants something back from Recently deleted (deleted in the last 30 days)."},{"name":"undo_last_change","description":"Use this when the user wants to take back the last change made from the chat, to one formula or the last of any, from any chat. Pass the exact changeId from a w"},{"name":"get_scent_profile","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 "},{"name":"find_substitutes","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, wit"},{"name":"use_substitute","description":"Use this when the user picks one of find_substitutes' suggestions: replaces the line with it (pass its member names), in place, with the app's own amounts, the "},{"name":"rebuild_from_shelf","description":"Use this when the user asks what they can make with the materials they own, or wants a formula rebuilt using only their shelf: the app's Replace with materials "},{"name":"insert_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 "},{"name":"view_accord","description":"Use this when the user asks what is inside an accord line of a formula: its materials at the dose it is used in, each with its share of the accord, read live fr"},{"name":"decompose_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)."},{"name":"resync_accord","description":"Use this when the source formula of an accord has changed and the user wants the accord line to follow: re-reads its composition, families and price as it is no"},{"name":"scale_to_concentration","description":"Use this when the user wants to change a formula's concentration (for example from an eau de parfum to an eau de toilette) or its finished weight: the app's Sca"}],"toolCount":45,"toolsHash":"6d7945900ac3648e1756ecc27a1e6046122df9f4fd53587ba87525b32f705f60","serverName":"perfumate","capabilities":["tools"],"serverVersion":"1.1.0","protocolVersion":"2025-06-18"}},{"at":"2026-11-01T19:23:52.481Z","kind":"mcp_initialize","ok":true,"httpStatus":200,"latencyMs":1236,"error":null,"detail":{"tools":[{"name":"search_materials","description":"Use this when the user wants to find perfumery materials by scent, family, name or CAS number, for example musks, woods or citrus to put in a formula, or the ca"},{"name":"get_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 Catego"},{"name":"check_formula","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"},{"name":"find_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 clea"},{"name":"my_account","description":"Use this when the user asks about their PerfuMate account or how big their bench is. Returns the linked account's plan (\"unlimited\" or \"ai_studio\") and its coun"},{"name":"list_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 "},{"name":"get_formula","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, pl"},{"name":"list_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."},{"name":"create_formula","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 af"},{"name":"edit_formula","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 l"},{"name":"update_formula","description":"Use this when the user wants to rename a formula or change its description, bench notes, kind (perfume or accord), folder, favourite star, pin, target concentra"},{"name":"rename_folder","description":"Use this when the user wants to rename a formula folder: every formula filed in it moves (an empty name unfiles them)."},{"name":"duplicate_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 na"},{"name":"save_version","description":"Use this when the user wants to keep the current state of a formula as a named version in its evolution tree and carry on editing on a fresh copy."},{"name":"branch_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."},{"name":"open_version","description":"Use this when the user wants to go back and edit a past version directly, without cloning it. Refused for a version a batch was made from."},{"name":"rename_version","description":"Use this when the user wants to change a version's note or the number it carries."},{"name":"list_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. List"},{"name":"get_shelf_material","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."},{"name":"add_to_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 "},{"name":"update_bottle","description":"Use this when the user wants to record stock for a bottle (a weighed count, or grams bought or used, through the stock ledger) or change its price per gram, sup"},{"name":"make_dilution","description":"Use this when the user has made, or wants to record, a dilution from a bottle they own; the material used is taken from the source bottle's stock."},{"name":"update_material","description":"Use this when the user wants to change a material on their bench: their notes, odour description, families, note, impact, blotter hours, shelf life, synonyms, f"},{"name":"list_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."},{"name":"log_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"},{"name":"journal_note","description":"Use this when the user wants to add a dated line to a batch's maceration journal, or correct one."},{"name":"list_notes","description":"Use this when the user asks to read their PerfuMate notebooks: titles and previews, or one notebook in full by id."},{"name":"write_note","description":"Use this when the user wants to create a notebook or change one: its title, body, appended text or pin."},{"name":"list_shopping","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"},{"name":"shopping_list","description":"Use this when the user wants to add materials or free text to a Shopping cart list (the default list unless one is named; a new name makes that list), tick item"},{"name":"set_preferences","description":"Use this when the user wants to change the account's currency symbol or its default low-stock warning (grams; 0 turns it off)."},{"name":"delete_items","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"},{"name":"confirm_delete","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, con"},{"name":"list_deleted","description":"Use this when the user wants to see what they deleted in the last 30 days and can still restore."},{"name":"restore_deleted","description":"Use this when the user wants something back from Recently deleted (deleted in the last 30 days)."},{"name":"undo_last_change","description":"Use this when the user wants to take back the last change made from the chat, to one formula or the last of any, from any chat. Pass the exact changeId from a w"},{"name":"get_scent_profile","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 "},{"name":"find_substitutes","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, wit"},{"name":"use_substitute","description":"Use this when the user picks one of find_substitutes' suggestions: replaces the line with it (pass its member names), in place, with the app's own amounts, the "},{"name":"rebuild_from_shelf","description":"Use this when the user asks what they can make with the materials they own, or wants a formula rebuilt using only their shelf: the app's Replace with materials "},{"name":"insert_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 "},{"name":"view_accord","description":"Use this when the user asks what is inside an accord line of a formula: its materials at the dose it is used in, each with its share of the accord, read live fr"},{"name":"decompose_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)."},{"name":"resync_accord","description":"Use this when the source formula of an accord has changed and the user wants the accord line to follow: re-reads its composition, families and price as it is no"},{"name":"scale_to_concentration","description":"Use this when the user wants to change a formula's concentration (for example from an eau de parfum to an eau de toilette) or its finished weight: the app's Sca"}],"toolCount":45,"toolsHash":"6d7945900ac3648e1756ecc27a1e6046122df9f4fd53587ba87525b32f705f60","serverName":"perfumate","capabilities":["tools"],"serverVersion":"1.1.0","protocolVersion":"2025-06-18"}},{"at":"2026-11-01T11:25:45.387Z","kind":"mcp_initialize","ok":true,"httpStatus":200,"latencyMs":1214,"error":null,"detail":{"tools":[{"name":"search_materials","description":"Use this when the user wants to find perfumery materials by scent, family, name or CAS number, for example musks, woods or citrus to put in a formula, or the ca"},{"name":"get_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 Catego"},{"name":"check_formula","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"},{"name":"find_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 clea"},{"name":"my_account","description":"Use this when the user asks about their PerfuMate account or how big their bench is. Returns the linked account's plan (\"unlimited\" or \"ai_studio\") and its coun"},{"name":"list_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 "},{"name":"get_formula","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, pl"},{"name":"list_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."},{"name":"create_formula","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 af"},{"name":"edit_formula","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 l"},{"name":"update_formula","description":"Use this when the user wants to rename a formula or change its description, bench notes, kind (perfume or accord), folder, favourite star, pin, target concentra"},{"name":"rename_folder","description":"Use this when the user wants to rename a formula folder: every formula filed in it moves (an empty name unfiles them)."},{"name":"duplicate_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 na"},{"name":"save_version","description":"Use this when the user wants to keep the current state of a formula as a named version in its evolution tree and carry on editing on a fresh copy."},{"name":"branch_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."},{"name":"open_version","description":"Use this when the user wants to go back and edit a past version directly, without cloning it. Refused for a version a batch was made from."},{"name":"rename_version","description":"Use this when the user wants to change a version's note or the number it carries."},{"name":"list_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. List"},{"name":"get_shelf_material","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."},{"name":"add_to_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 "},{"name":"update_bottle","description":"Use this when the user wants to record stock for a bottle (a weighed count, or grams bought or used, through the stock ledger) or change its price per gram, sup"},{"name":"make_dilution","description":"Use this when the user has made, or wants to record, a dilution from a bottle they own; the material used is taken from the source bottle's stock."},{"name":"update_material","description":"Use this when the user wants to change a material on their bench: their notes, odour description, families, note, impact, blotter hours, shelf life, synonyms, f"},{"name":"list_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."},{"name":"log_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"},{"name":"journal_note","description":"Use this when the user wants to add a dated line to a batch's maceration journal, or correct one."},{"name":"list_notes","description":"Use this when the user asks to read their PerfuMate notebooks: titles and previews, or one notebook in full by id."},{"name":"write_note","description":"Use this when the user wants to create a notebook or change one: its title, body, appended text or pin."},{"name":"list_shopping","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"},{"name":"shopping_list","description":"Use this when the user wants to add materials or free text to a Shopping cart list (the default list unless one is named; a new name makes that list), tick item"},{"name":"set_preferences","description":"Use this when the user wants to change the account's currency symbol or its default low-stock warning (grams; 0 turns it off)."},{"name":"delete_items","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"},{"name":"confirm_delete","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, con"},{"name":"list_deleted","description":"Use this when the user wants to see what they deleted in the last 30 days and can still restore."},{"name":"restore_deleted","description":"Use this when the user wants something back from Recently deleted (deleted in the last 30 days)."},{"name":"undo_last_change","description":"Use this when the user wants to take back the last change made from the chat, to one formula or the last of any, from any chat. Pass the exact changeId from a w"},{"name":"get_scent_profile","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 "},{"name":"find_substitutes","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, wit"},{"name":"use_substitute","description":"Use this when the user picks one of find_substitutes' suggestions: replaces the line with it (pass its member names), in place, with the app's own amounts, the "},{"name":"rebuild_from_shelf","description":"Use this when the user asks what they can make with the materials they own, or wants a formula rebuilt using only their shelf: the app's Replace with materials "},{"name":"insert_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 "},{"name":"view_accord","description":"Use this when the user asks what is inside an accord line of a formula: its materials at the dose it is used in, each with its share of the accord, read live fr"},{"name":"decompose_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)."},{"name":"resync_accord","description":"Use this when the source formula of an accord has changed and the user wants the accord line to follow: re-reads its composition, families and price as it is no"},{"name":"scale_to_concentration","description":"Use this when the user wants to change a formula's concentration (for example from an eau de parfum to an eau de toilette) or its finished weight: the app's Sca"}],"toolCount":45,"toolsHash":"6d7945900ac3648e1756ecc27a1e6046122df9f4fd53587ba87525b32f705f60","serverName":"perfumate","capabilities":["tools"],"serverVersion":"1.1.0","protocolVersion":"2025-06-18"}},{"at":"2026-11-01T02:27:06.984Z","kind":"mcp_initialize","ok":true,"httpStatus":200,"latencyMs":552,"error":null,"detail":{"tools":[{"name":"search_materials","description":"Use this when the user wants to find perfumery materials by scent, family, name or CAS number, for example musks, woods or citrus to put in a formula, or the ca"},{"name":"get_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 Catego"},{"name":"check_formula","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"},{"name":"find_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 clea"},{"name":"my_account","description":"Use this when the user asks about their PerfuMate account or how big their bench is. Returns the linked account's plan (\"unlimited\" or \"ai_studio\") and its coun"},{"name":"list_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 "},{"name":"get_formula","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, pl"},{"name":"list_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."},{"name":"create_formula","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 af"},{"name":"edit_formula","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 l"},{"name":"update_formula","description":"Use this when the user wants to rename a formula or change its description, bench notes, kind (perfume or accord), folder, favourite star, pin, target concentra"},{"name":"rename_folder","description":"Use this when the user wants to rename a formula folder: every formula filed in it moves (an empty name unfiles them)."},{"name":"duplicate_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 na"},{"name":"save_version","description":"Use this when the user wants to keep the current state of a formula as a named version in its evolution tree and carry on editing on a fresh copy."},{"name":"branch_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."},{"name":"open_version","description":"Use this when the user wants to go back and edit a past version directly, without cloning it. Refused for a version a batch was made from."},{"name":"rename_version","description":"Use this when the user wants to change a version's note or the number it carries."},{"name":"list_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. List"},{"name":"get_shelf_material","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."},{"name":"add_to_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 "},{"name":"update_bottle","description":"Use this when the user wants to record stock for a bottle (a weighed count, or grams bought or used, through the stock ledger) or change its price per gram, sup"},{"name":"make_dilution","description":"Use this when the user has made, or wants to record, a dilution from a bottle they own; the material used is taken from the source bottle's stock."},{"name":"update_material","description":"Use this when the user wants to change a material on their bench: their notes, odour description, families, note, impact, blotter hours, shelf life, synonyms, f"},{"name":"list_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."},{"name":"log_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"},{"name":"journal_note","description":"Use this when the user wants to add a dated line to a batch's maceration journal, or correct one."},{"name":"list_notes","description":"Use this when the user asks to read their PerfuMate notebooks: titles and previews, or one notebook in full by id."},{"name":"write_note","description":"Use this when the user wants to create a notebook or change one: its title, body, appended text or pin."},{"name":"list_shopping","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"},{"name":"shopping_list","description":"Use this when the user wants to add materials or free text to a Shopping cart list (the default list unless one is named; a new name makes that list), tick item"},{"name":"set_preferences","description":"Use this when the user wants to change the account's currency symbol or its default low-stock warning (grams; 0 turns it off)."},{"name":"delete_items","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"},{"name":"confirm_delete","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, con"},{"name":"list_deleted","description":"Use this when the user wants to see what they deleted in the last 30 days and can still restore."},{"name":"restore_deleted","description":"Use this when the user wants something back from Recently deleted (deleted in the last 30 days)."},{"name":"undo_last_change","description":"Use this when the user wants to take back the last change made from the chat, to one formula or the last of any, from any chat. Pass the exact changeId from a w"},{"name":"get_scent_profile","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 "},{"name":"find_substitutes","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, wit"},{"name":"use_substitute","description":"Use this when the user picks one of find_substitutes' suggestions: replaces the line with it (pass its member names), in place, with the app's own amounts, the "},{"name":"rebuild_from_shelf","description":"Use this when the user asks what they can make with the materials they own, or wants a formula rebuilt using only their shelf: the app's Replace with materials "},{"name":"insert_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 "},{"name":"view_accord","description":"Use this when the user asks what is inside an accord line of a formula: its materials at the dose it is used in, each with its share of the accord, read live fr"},{"name":"decompose_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)."},{"name":"resync_accord","description":"Use this when the source formula of an accord has changed and the user wants the accord line to follow: re-reads its composition, families and price as it is no"},{"name":"scale_to_concentration","description":"Use this when the user wants to change a formula's concentration (for example from an eau de parfum to an eau de toilette) or its finished weight: the app's Sca"}],"toolCount":45,"toolsHash":"6d7945900ac3648e1756ecc27a1e6046122df9f4fd53587ba87525b32f705f60","serverName":"perfumate","capabilities":["tools"],"serverVersion":"1.1.0","protocolVersion":"2025-06-18"}},{"at":"2026-10-31T18:27:00.418Z","kind":"mcp_initialize","ok":true,"httpStatus":200,"latencyMs":1515,"error":null,"detail":{"tools":[{"name":"search_materials","description":"Use this when the user wants to find perfumery materials by scent, family, name or CAS number, for example musks, woods or citrus to put in a formula, or the ca"},{"name":"get_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 Catego"},{"name":"check_formula","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"},{"name":"find_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 clea"},{"name":"my_account","description":"Use this when the user asks about their PerfuMate account or how big their bench is. Returns the linked account's plan (\"unlimited\" or \"ai_studio\") and its coun"},{"name":"list_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 "},{"name":"get_formula","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, pl"},{"name":"list_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."},{"name":"create_formula","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 af"},{"name":"edit_formula","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 l"},{"name":"update_formula","description":"Use this when the user wants to rename a formula or change its description, bench notes, kind (perfume or accord), folder, favourite star, pin, target concentra"},{"name":"rename_folder","description":"Use this when the user wants to rename a formula folder: every formula filed in it moves (an empty name unfiles them)."},{"name":"duplicate_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 na"},{"name":"save_version","description":"Use this when the user wants to keep the current state of a formula as a named version in its evolution tree and carry on editing on a fresh copy."},{"name":"branch_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."},{"name":"open_version","description":"Use this when the user wants to go back and edit a past version directly, without cloning it. Refused for a version a batch was made from."},{"name":"rename_version","description":"Use this when the user wants to change a version's note or the number it carries."},{"name":"list_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. List"},{"name":"get_shelf_material","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."},{"name":"add_to_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 "},{"name":"update_bottle","description":"Use this when the user wants to record stock for a bottle (a weighed count, or grams bought or used, through the stock ledger) or change its price per gram, sup"},{"name":"make_dilution","description":"Use this when the user has made, or wants to record, a dilution from a bottle they own; the material used is taken from the source bottle's stock."},{"name":"update_material","description":"Use this when the user wants to change a material on their bench: their notes, odour description, families, note, impact, blotter hours, shelf life, synonyms, f"},{"name":"list_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."},{"name":"log_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"},{"name":"journal_note","description":"Use this when the user wants to add a dated line to a batch's maceration journal, or correct one."},{"name":"list_notes","description":"Use this when the user asks to read their PerfuMate notebooks: titles and previews, or one notebook in full by id."},{"name":"write_note","description":"Use this when the user wants to create a notebook or change one: its title, body, appended text or pin."},{"name":"list_shopping","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"},{"name":"shopping_list","description":"Use this when the user wants to add materials or free text to a Shopping cart list (the default list unless one is named; a new name makes that list), tick item"},{"name":"set_preferences","description":"Use this when the user wants to change the account's currency symbol or its default low-stock warning (grams; 0 turns it off)."},{"name":"delete_items","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"},{"name":"confirm_delete","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, con"},{"name":"list_deleted","description":"Use this when the user wants to see what they deleted in the last 30 days and can still restore."},{"name":"restore_deleted","description":"Use this when the user wants something back from Recently deleted (deleted in the last 30 days)."},{"name":"undo_last_change","description":"Use this when the user wants to take back the last change made from the chat, to one formula or the last of any, from any chat. Pass the exact changeId from a w"},{"name":"get_scent_profile","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 "},{"name":"find_substitutes","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, wit"},{"name":"use_substitute","description":"Use this when the user picks one of find_substitutes' suggestions: replaces the line with it (pass its member names), in place, with the app's own amounts, the "},{"name":"rebuild_from_shelf","description":"Use this when the user asks what they can make with the materials they own, or wants a formula rebuilt using only their shelf: the app's Replace with materials "},{"name":"insert_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 "},{"name":"view_accord","description":"Use this when the user asks what is inside an accord line of a formula: its materials at the dose it is used in, each with its share of the accord, read live fr"},{"name":"decompose_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)."},{"name":"resync_accord","description":"Use this when the source formula of an accord has changed and the user wants the accord line to follow: re-reads its composition, families and price as it is no"},{"name":"scale_to_concentration","description":"Use this when the user wants to change a formula's concentration (for example from an eau de parfum to an eau de toilette) or its finished weight: the app's Sca"}],"toolCount":45,"toolsHash":"6d7945900ac3648e1756ecc27a1e6046122df9f4fd53587ba87525b32f705f60","serverName":"perfumate","capabilities":["tools"],"serverVersion":"1.1.0","protocolVersion":"2025-06-18"}},{"at":"2026-10-31T10:22:47.984Z","kind":"mcp_initialize","ok":true,"httpStatus":200,"latencyMs":495,"error":null,"detail":{"tools":[{"name":"search_materials","description":"Use this when the user wants to find perfumery materials by scent, family, name or CAS number, for example musks, woods or citrus to put in a formula, or the ca"},{"name":"get_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 Catego"},{"name":"check_formula","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"},{"name":"find_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 clea"},{"name":"my_account","description":"Use this when the user asks about their PerfuMate account or how big their bench is. Returns the linked account's plan (\"unlimited\" or \"ai_studio\") and its coun"},{"name":"list_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 "},{"name":"get_formula","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, pl"},{"name":"list_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."},{"name":"create_formula","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 af"},{"name":"edit_formula","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 l"},{"name":"update_formula","description":"Use this when the user wants to rename a formula or change its description, bench notes, kind (perfume or accord), folder, favourite star, pin, target concentra"},{"name":"rename_folder","description":"Use this when the user wants to rename a formula folder: every formula filed in it moves (an empty name unfiles them)."},{"name":"duplicate_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 na"},{"name":"save_version","description":"Use this when the user wants to keep the current state of a formula as a named version in its evolution tree and carry on editing on a fresh copy."},{"name":"branch_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."},{"name":"open_version","description":"Use this when the user wants to go back and edit a past version directly, without cloning it. Refused for a version a batch was made from."},{"name":"rename_version","description":"Use this when the user wants to change a version's note or the number it carries."},{"name":"list_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. List"},{"name":"get_shelf_material","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."},{"name":"add_to_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 "},{"name":"update_bottle","description":"Use this when the user wants to record stock for a bottle (a weighed count, or grams bought or used, through the stock ledger) or change its price per gram, sup"},{"name":"make_dilution","description":"Use this when the user has made, or wants to record, a dilution from a bottle they own; the material used is taken from the source bottle's stock."},{"name":"update_material","description":"Use this when the user wants to change a material on their bench: their notes, odour description, families, note, impact, blotter hours, shelf life, synonyms, f"},{"name":"list_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."},{"name":"log_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"},{"name":"journal_note","description":"Use this when the user wants to add a dated line to a batch's maceration journal, or correct one."},{"name":"list_notes","description":"Use this when the user asks to read their PerfuMate notebooks: titles and previews, or one notebook in full by id."},{"name":"write_note","description":"Use this when the user wants to create a notebook or change one: its title, body, appended text or pin."},{"name":"list_shopping","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"},{"name":"shopping_list","description":"Use this when the user wants to add materials or free text to a Shopping cart list (the default list unless one is named; a new name makes that list), tick item"},{"name":"set_preferences","description":"Use this when the user wants to change the account's currency symbol or its default low-stock warning (grams; 0 turns it off)."},{"name":"delete_items","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"},{"name":"confirm_delete","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, con"},{"name":"list_deleted","description":"Use this when the user wants to see what they deleted in the last 30 days and can still restore."},{"name":"restore_deleted","description":"Use this when the user wants something back from Recently deleted (deleted in the last 30 days)."},{"name":"undo_last_change","description":"Use this when the user wants to take back the last change made from the chat, to one formula or the last of any, from any chat. Pass the exact changeId from a w"},{"name":"get_scent_profile","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 "},{"name":"find_substitutes","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, wit"},{"name":"use_substitute","description":"Use this when the user picks one of find_substitutes' suggestions: replaces the line with it (pass its member names), in place, with the app's own amounts, the "},{"name":"rebuild_from_shelf","description":"Use this when the user asks what they can make with the materials they own, or wants a formula rebuilt using only their shelf: the app's Replace with materials "},{"name":"insert_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 "},{"name":"view_accord","description":"Use this when the user asks what is inside an accord line of a formula: its materials at the dose it is used in, each with its share of the accord, read live fr"},{"name":"decompose_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)."},{"name":"resync_accord","description":"Use this when the source formula of an accord has changed and the user wants the accord line to follow: re-reads its composition, families and price as it is no"},{"name":"scale_to_concentration","description":"Use this when the user wants to change a formula's concentration (for example from an eau de parfum to an eau de toilette) or its finished weight: the app's Sca"}],"toolCount":45,"toolsHash":"6d7945900ac3648e1756ecc27a1e6046122df9f4fd53587ba87525b32f705f60","serverName":"perfumate","capabilities":["tools"],"serverVersion":"1.1.0","protocolVersion":"2025-06-18"}},{"at":"2026-10-31T02:26:10.075Z","kind":"mcp_initialize","ok":true,"httpStatus":200,"latencyMs":1314,"error":null,"detail":{"tools":[{"name":"search_materials","description":"Use this when the user wants to find perfumery materials by scent, family, name or CAS number, for example musks, woods or citrus to put in a formula, or the ca"},{"name":"get_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 Catego"},{"name":"check_formula","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"},{"name":"find_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 clea"},{"name":"my_account","description":"Use this when the user asks about their PerfuMate account or how big their bench is. Returns the linked account's plan (\"unlimited\" or \"ai_studio\") and its coun"},{"name":"list_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 "},{"name":"get_formula","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, pl"},{"name":"list_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."},{"name":"create_formula","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 af"},{"name":"edit_formula","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 l"},{"name":"update_formula","description":"Use this when the user wants to rename a formula or change its description, bench notes, kind (perfume or accord), folder, favourite star, pin, target concentra"},{"name":"rename_folder","description":"Use this when the user wants to rename a formula folder: every formula filed in it moves (an empty name unfiles them)."},{"name":"duplicate_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 na"},{"name":"save_version","description":"Use this when the user wants to keep the current state of a formula as a named version in its evolution tree and carry on editing on a fresh copy."},{"name":"branch_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."},{"name":"open_version","description":"Use this when the user wants to go back and edit a past version directly, without cloning it. Refused for a version a batch was made from."},{"name":"rename_version","description":"Use this when the user wants to change a version's note or the number it carries."},{"name":"list_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. List"},{"name":"get_shelf_material","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."},{"name":"add_to_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 "},{"name":"update_bottle","description":"Use this when the user wants to record stock for a bottle (a weighed count, or grams bought or used, through the stock ledger) or change its price per gram, sup"},{"name":"make_dilution","description":"Use this when the user has made, or wants to record, a dilution from a bottle they own; the material used is taken from the source bottle's stock."},{"name":"update_material","description":"Use this when the user wants to change a material on their bench: their notes, odour description, families, note, impact, blotter hours, shelf life, synonyms, f"},{"name":"list_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."},{"name":"log_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"},{"name":"journal_note","description":"Use this when the user wants to add a dated line to a batch's maceration journal, or correct one."},{"name":"list_notes","description":"Use this when the user asks to read their PerfuMate notebooks: titles and previews, or one notebook in full by id."},{"name":"write_note","description":"Use this when the user wants to create a notebook or change one: its title, body, appended text or pin."},{"name":"list_shopping","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"},{"name":"shopping_list","description":"Use this when the user wants to add materials or free text to a Shopping cart list (the default list unless one is named; a new name makes that list), tick item"},{"name":"set_preferences","description":"Use this when the user wants to change the account's currency symbol or its default low-stock warning (grams; 0 turns it off)."},{"name":"delete_items","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"},{"name":"confirm_delete","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, con"},{"name":"list_deleted","description":"Use this when the user wants to see what they deleted in the last 30 days and can still restore."},{"name":"restore_deleted","description":"Use this when the user wants something back from Recently deleted (deleted in the last 30 days)."},{"name":"undo_last_change","description":"Use this when the user wants to take back the last change made from the chat, to one formula or the last of any, from any chat. Pass the exact changeId from a w"},{"name":"get_scent_profile","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 "},{"name":"find_substitutes","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, wit"},{"name":"use_substitute","description":"Use this when the user picks one of find_substitutes' suggestions: replaces the line with it (pass its member names), in place, with the app's own amounts, the "},{"name":"rebuild_from_shelf","description":"Use this when the user asks what they can make with the materials they own, or wants a formula rebuilt using only their shelf: the app's Replace with materials "},{"name":"insert_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 "},{"name":"view_accord","description":"Use this when the user asks what is inside an accord line of a formula: its materials at the dose it is used in, each with its share of the accord, read live fr"},{"name":"decompose_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)."},{"name":"resync_accord","description":"Use this when the source formula of an accord has changed and the user wants the accord line to follow: re-reads its composition, families and price as it is no"},{"name":"scale_to_concentration","description":"Use this when the user wants to change a formula's concentration (for example from an eau de parfum to an eau de toilette) or its finished weight: the app's Sca"}],"toolCount":45,"toolsHash":"6d7945900ac3648e1756ecc27a1e6046122df9f4fd53587ba87525b32f705f60","serverName":"perfumate","capabilities":["tools"],"serverVersion":"1.1.0","protocolVersion":"2025-06-18"}}],"tools":[{"name":"search_materials","description":"Use this when the user wants to find perfumery materials by scent, family, name or CAS number, for example musks, woods or citrus to put in a formula, or the ca"},{"name":"get_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 Catego"},{"name":"check_formula","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"},{"name":"find_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 clea"},{"name":"my_account","description":"Use this when the user asks about their PerfuMate account or how big their bench is. Returns the linked account's plan (\"unlimited\" or \"ai_studio\") and its coun"},{"name":"list_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 "},{"name":"get_formula","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, pl"},{"name":"list_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."},{"name":"create_formula","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 af"},{"name":"edit_formula","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 l"},{"name":"update_formula","description":"Use this when the user wants to rename a formula or change its description, bench notes, kind (perfume or accord), folder, favourite star, pin, target concentra"},{"name":"rename_folder","description":"Use this when the user wants to rename a formula folder: every formula filed in it moves (an empty name unfiles them)."},{"name":"duplicate_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 na"},{"name":"save_version","description":"Use this when the user wants to keep the current state of a formula as a named version in its evolution tree and carry on editing on a fresh copy."},{"name":"branch_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."},{"name":"open_version","description":"Use this when the user wants to go back and edit a past version directly, without cloning it. Refused for a version a batch was made from."},{"name":"rename_version","description":"Use this when the user wants to change a version's note or the number it carries."},{"name":"list_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. List"},{"name":"get_shelf_material","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."},{"name":"add_to_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 "},{"name":"update_bottle","description":"Use this when the user wants to record stock for a bottle (a weighed count, or grams bought or used, through the stock ledger) or change its price per gram, sup"},{"name":"make_dilution","description":"Use this when the user has made, or wants to record, a dilution from a bottle they own; the material used is taken from the source bottle's stock."},{"name":"update_material","description":"Use this when the user wants to change a material on their bench: their notes, odour description, families, note, impact, blotter hours, shelf life, synonyms, f"},{"name":"list_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."},{"name":"log_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"},{"name":"journal_note","description":"Use this when the user wants to add a dated line to a batch's maceration journal, or correct one."},{"name":"list_notes","description":"Use this when the user asks to read their PerfuMate notebooks: titles and previews, or one notebook in full by id."},{"name":"write_note","description":"Use this when the user wants to create a notebook or change one: its title, body, appended text or pin."},{"name":"list_shopping","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"},{"name":"shopping_list","description":"Use this when the user wants to add materials or free text to a Shopping cart list (the default list unless one is named; a new name makes that list), tick item"},{"name":"set_preferences","description":"Use this when the user wants to change the account's currency symbol or its default low-stock warning (grams; 0 turns it off)."},{"name":"delete_items","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"},{"name":"confirm_delete","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, con"},{"name":"list_deleted","description":"Use this when the user wants to see what they deleted in the last 30 days and can still restore."},{"name":"restore_deleted","description":"Use this when the user wants something back from Recently deleted (deleted in the last 30 days)."},{"name":"undo_last_change","description":"Use this when the user wants to take back the last change made from the chat, to one formula or the last of any, from any chat. Pass the exact changeId from a w"},{"name":"get_scent_profile","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 "},{"name":"find_substitutes","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, wit"},{"name":"use_substitute","description":"Use this when the user picks one of find_substitutes' suggestions: replaces the line with it (pass its member names), in place, with the app's own amounts, the "},{"name":"rebuild_from_shelf","description":"Use this when the user asks what they can make with the materials they own, or wants a formula rebuilt using only their shelf: the app's Replace with materials "},{"name":"insert_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 "},{"name":"view_accord","description":"Use this when the user asks what is inside an accord line of a formula: its materials at the dose it is used in, each with its share of the accord, read live fr"},{"name":"decompose_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)."},{"name":"resync_accord","description":"Use this when the source formula of an accord has changed and the user wants the accord line to follow: re-reads its composition, families and price as it is no"},{"name":"scale_to_concentration","description":"Use this when the user wants to change a formula's concentration (for example from an eau de parfum to an eau de toilette) or its finished weight: the app's Sca"}],"package":null,"toolSurface":{"id":"ts_4me4wjeexju6","endpointId":"ep_4tw3fnax8kks","hash":"6d7945900ac3648e1756ecc27a1e6046122df9f4fd53587ba87525b32f705f60","toolCount":45,"serverName":"perfumate","serverVersion":"1.1.0","protocolVersion":"2025-06-18","firstSeenAt":"2026-10-28T23:24:15.842Z","lastSeenAt":"2026-11-03T03:29:48.308Z","observations":17,"toolNames":["search_materials","get_material","check_formula","find_starting_formula","my_account","list_formulas","get_formula","list_versions","create_formula","edit_formula","update_formula","rename_folder","duplicate_formula","save_version","branch_version","open_version","rename_version","list_shelf","get_shelf_material","add_to_shelf","update_bottle","make_dilution","update_material","list_batches","log_batch","journal_note","list_notes","write_note","list_shopping","shopping_list","set_preferences","delete_items","confirm_delete","list_deleted","restore_deleted","undo_last_change","get_scent_profile","find_substitutes","use_substitute","rebuild_from_shelf","insert_accord","view_accord","decompose_accord","resync_accord","scale_to_concentration"],"distinctSurfaces":2},"endpointFacts":[{"id":"ep_4tw3fnax8kks","url":"https://perfumate.app/mcp","type":"mcp_streamable_http","factsCheckedAt":"2026-11-01T11:25:45.406Z","auth":{"observedAt":"2026-11-01T11:25:46.753Z","authRequired":false,"scheme":null,"resourceMetadata":{"url":"https://perfumate.app/.well-known/oauth-protected-resource/mcp","resource":"https://perfumate.app/mcp","authorizationServers":["https://dlbbtrswqbimbujxwmzi.supabase.co/auth/v1"],"scopesSupported":["openid","email","profile"]},"authorizationServer":{"url":"https://dlbbtrswqbimbujxwmzi.supabase.co/.well-known/oauth-authorization-server/auth/v1","issuer":"https://dlbbtrswqbimbujxwmzi.supabase.co/auth/v1","grantTypesSupported":["authorization_code","refresh_token"],"codeChallengeMethodsSupported":["S256","plain"],"tokenEndpointAuthMethodsSupported":["client_secret_basic","client_secret_post","none"],"dynamicClientRegistration":true,"dpopSigningAlgValuesSupported":[],"clientIdMetadataDocumentSupported":null},"conformance":{"dpop":false,"rfc8414":true,"rfc9728":true,"pkceS256":true,"clientIdMetadataDocument":false,"dynamicClientRegistration":true}},"tls":{"observedAt":"2026-11-01T11:25:46.763Z","protocol":"TLSv1.3","chainValid":true,"chainError":null,"hostMatches":true,"subject":"jpsclub.com","issuer":{"commonName":"WR3","organization":"Google Trust Services"},"validFrom":"2026-09-26T23:31:47.000Z","validTo":"2026-12-26T00:29:35.000Z","daysToExpiry":52,"sanCount":100,"fingerprint256":"A5:09:1A:0A:F2:E9:26:25:6C:CB:52:7C:C2:20:6A:83:24:4B:90:48:BF:1B:CD:9D:CA:08:BE:8C:31:9B:3E:0F"}}]},"verification":{"claimed":false,"claimedAt":null,"proofs":[]},"provenance":{"sources":[{"source":"mcp_registry","key":"app.perfumate/perfumate","url":"https://registry.modelcontextprotocol.io/v0/servers/app.perfumate%2Fperfumate","firstSeenAt":"2026-10-21T06:21:46.571Z","fetchedAt":"2026-10-31T19:18:46.402Z","normalizedAt":"2026-10-31T19:18:46.402Z"}]},"firstSeenAt":"2026-10-21T06:21:46.571Z","updatedAt":"2026-11-03T03:35:18.956Z"}