# PerfuMate (app.perfumate/perfumate): tool descriptions scored

- tools/list taken: 2026-11-02 (UTC)
- From: [Official MCP Registry](https://registry.modelcontextprotocol.io/v0/servers/app.perfumate%2Fperfumate/versions/latest)
- Connected to: https://perfumate.app/mcp
- Homepage: https://perfumate.app/chatgpt
- Scoring rules: v2
- Tools: 45
- Average: 55.6 / 100 (Cloudy)
- Near-identical pairs: 0

This page shows how PerfuMate (app.perfumate/perfumate)'s tool descriptions scored, the issues found and the names of its tools and parameters. The descriptions are the server's own: read them where the copy came from.

Forecall asked the URL this server lists in the official MCP Registry for its tools/list once, on the date above, without calling any tool. The server may have changed since.

## Across the server

- Major: 45 tools. Above 40, models choose less accurately.

## Tools

- `list_deleted`: 39 / 100
  - Major: Arguments without a description: kind.
  - Minor: No `required` list, so every argument is optional.
  - Minor: Says nothing about what it returns.
- `list_notes`: 39 / 100
  - Major: Arguments without a description: id, query.
  - Minor: No `required` list, so every argument is optional.
  - Minor: Says nothing about what it returns.
- `set_preferences`: 39 / 100
  - Major: Arguments without a description: currencySymbol, lowStockDefaultGrams.
  - Minor: No `required` list, so every argument is optional.
  - Minor: Says nothing about what it returns.
- `write_note`: 39 / 100
  - Major: Arguments without a description: id, title, body, append, pinned.
  - Minor: No `required` list, so every argument is optional.
  - Minor: The meaning of the boolean argument pinned is unclear.
  - Minor: Says nothing about what it returns.
- `journal_note`: 42 / 100
  - Major: Arguments without a description: batch, noteId, text, date.
  - Minor: Says nothing about what it returns.
- `list_shelf`: 42 / 100
  - Major: Arguments without a description: query, lowOnly.
  - Minor: No `required` list, so every argument is optional.
  - Minor: The meaning of the boolean argument lowOnly is unclear.
  - Minor: Says nothing about what it returns.
- `rename_folder`: 42 / 100
  - Major: Arguments without a description: from, to.
  - Minor: Says nothing about what it returns.
- `restore_deleted`: 42 / 100
  - Major: Arguments without a description: items, items[].kind, items[].id.
  - Minor: The description mentions none of its 3 or more arguments.
  - Minor: Says nothing about what it returns.
- `add_to_shelf`: 43 / 100
  - Major: Arguments without a description: items, items[].material, items[].cas, items[].dilutionPct, items[].solvent, items[].stockGrams, items[].pricePerGram, items[].supplier, items[].lot, items[].lowStockGrams, text, file.download_url, file.file_id, file.mime_type, file.file_name.
  - Minor: String arguments with no constraint or example: file.file_id, file.mime_type, file.file_name.
  - Minor: No `required` list, so every argument is optional.
  - Minor: Says nothing about what it returns.
- `confirm_delete`: 45 / 100
  - Major: Arguments without a description: token, confirmName.
  - Minor: Says nothing about what it returns.
- `make_dilution`: 45 / 100
  - Major: Arguments without a description: material, fromBottle, fromDilutionPct, targetPct, grams, solvent, deductFromSource.
  - Minor: The meaning of the boolean argument deductFromSource is unclear.
  - Minor: Says nothing about what it returns.
- `rename_version`: 46 / 100
  - Major: Arguments without a description: version, note, number.
  - Minor: Says nothing about what it returns.
- `update_bottle`: 46 / 100
  - Major: Arguments without a description: material, solvent, reason, pricePerGram, supplier, lot, lowStockGrams, notes, onShelf, makeDefault.
  - Minor: No `required` list, so every argument is optional.
  - Minor: The meaning of the boolean argument onShelf is unclear.
  - Minor: The meaning of the boolean argument makeDefault is unclear.
  - Minor: Says nothing about what it returns.
- `update_formula`: 46 / 100
  - Major: Arguments without a description: name, description, personalNotes, kind, folder, favorite, pinned, targetConcentrationPct, ifraCategory, bottleSizeMl.
  - Minor: The meaning of the boolean argument favorite is unclear.
  - Minor: The meaning of the boolean argument pinned is unclear.
  - Minor: Says nothing about what it returns.
- `log_batch`: 49 / 100
  - Major: Arguments without a description: version, totalGrams, code, notes, concentrationPct, deductStock.
  - Minor: The meaning of the boolean argument deductStock is unclear.
  - Minor: Says nothing about what it returns.
- `update_material`: 50 / 100
  - Major: Arguments without a description: name, cas, personalNotes, odor, families, note, dropsPerGram, impact, blotterHours, shelfLifeMonths, synonyms, natural, flashPointC, constituents, constituents[].name, constituents[].cas, constituents[].percent.
  - Minor: The meaning of the boolean argument natural is unclear.
  - Minor: Says nothing about what it returns.
- `shopping_list`: 52 / 100
  - Major: Arguments without a description: add, done, undone, remove.
  - Minor: No `required` list, so every argument is optional.
  - Minor: Says nothing about what it returns.
- `branch_version`: 53 / 100
  - Minor: Arguments without a description: version.
  - Minor: Says nothing about what it returns.
- `list_formulas`: 53 / 100
  - Major: Arguments without a description: query, favoritesOnly, kind.
  - Minor: No `required` list, so every argument is optional.
  - Minor: The meaning of the boolean argument favoritesOnly is unclear.
- `open_version`: 53 / 100
  - Minor: Arguments without a description: version.
  - Minor: Says nothing about what it returns.
- `rebuild_from_shelf`: 53 / 100
  - Minor: Arguments without a description: apply.
  - Minor: The meaning of the boolean argument apply is unclear.
  - Minor: Says nothing about what it returns.
- `save_version`: 53 / 100
  - Minor: Arguments without a description: note.
  - Minor: Says nothing about what it returns.
- `list_batches`: 54 / 100
  - Minor: No `required` list, so every argument is optional.
  - Minor: Says nothing about what it returns.
- `scale_to_concentration`: 55 / 100
  - Major: Arguments without a description: concentrationPct, totalGrams.
  - Minor: Says nothing about what it returns.
- `list_shopping`: 57 / 100
  - Minor: No `required` list, so every argument is optional.
  - Minor: Says nothing about what it returns.
- `duplicate_formula`: 58 / 100
  - Minor: Arguments without a description: name.
  - Minor: Says nothing about what it returns.
- `insert_accord`: 58 / 100
  - Minor: Arguments without a description: grams.
  - Minor: Says nothing about what it returns.
- `decompose_accord`: 60 / 100
  - Minor: Says nothing about what it returns.
- `get_shelf_material`: 60 / 100
  - Minor: Says nothing about what it returns.
- `list_versions`: 60 / 100
  - Minor: Says nothing about what it returns.
- `resync_accord`: 60 / 100
  - Minor: Says nothing about what it returns.
- `view_accord`: 60 / 100
  - Minor: Says nothing about what it returns.
- `create_formula`: 62 / 100
  - Major: Arguments without a description: name, description, kind, targetConcentrationPct, folder, lines, lines[].note, lines[].flag, file.download_url, file.file_id, file.mime_type, file.file_name.
  - Minor: String arguments with no constraint or example: file.file_id, file.mime_type, file.file_name.
  - Minor: No `required` list, so every argument is optional.
  - Minor: Says nothing about what it returns.
- `delete_items`: 62 / 100
  - Major: Arguments without a description: items, items[].kind, items[].material, items[].dilutionPct.
  - Minor: The description mentions none of its 3 or more arguments.
- `edit_formula`: 63 / 100
  - Major: Arguments without a description: operations, operations[].op, operations[].material, operations[].dilutionPct, operations[].solvent, operations[].flag, operations[].note, operations[].totalGrams, operations[].factor.
- `get_scent_profile`: 65 / 100
  - Minor: Says nothing about what it returns.
- `use_substitute`: 65 / 100
  - Minor: Says nothing about what it returns.
- `get_formula`: 69 / 100
  - Minor: Arguments without a description: checkIfra.
  - Minor: The meaning of the boolean argument checkIfra is unclear.
  - Minor: Says nothing about what it returns.
- `find_substitutes`: 70 / 100
  - Minor: Says nothing about what it returns.
- `check_formula`: 71 / 100
  - Minor: Arguments without a description: lines, lines[].amount, lines[].unit.
  - Minor: No `required` list, so every argument is optional.
- `undo_last_change`: 72 / 100
  - Minor: No `required` list, so every argument is optional.
- `my_account`: 74 / 100
- `get_material`: 75 / 100
- `find_starting_formula`: 79 / 100
  - Minor: No `required` list, so every argument is optional.
- `search_materials`: 80 / 100
  - Minor: Arguments without a description: limit.

Is your server listed here and you would rather it were not? Email support@forecall.dev, and we will take it off within 7 days.

[All scored servers](https://forecall.dev/en/servers)
