Skip to content

uk.co.hopi/hopi

by hopi.co.uk · remote · no sign-in to list tools · v1.1.0 · published by uk.co.hopi

Free UK calculators, converters and validators (tax, VAT, stamp duty, dates, units), read-only.

Deletes · 4Final · 17Changes · 1653 high findings

206 tools: 4 can delete or cancel things, 17 do something that can't be undone, 165 change things and 20 only read.

Scanned Oct 21, 2026

94 checks matched something in the tool definitions. No finding is not a safety guarantee. How the checks work.

claude mcp add --transport http hopi https://mcp.hopi.co.uk/mcp

Findings

Matches of fixed checks, with the text they matched.

3 high91 warn
  • The description refers to ".env".

    Matched text

    description: "Convert between a .env file and a JSON object. In env-to-json..."

    What this check looks for
  • The input schema at properties.mode.description refers to ".env".

    Matched text

    inputSchema.properties.mode.description: "'env-to-json' parses a .env file into JSON, 'json-to-env' turns a J..."

    What this check looks for
  • The input schema at properties.text.description refers to ".env".

    Matched text

    inputSchema.properties.text.description: "The .env file text, or the JSON object text, dep..."

    What this check looks for
  • The server marks "hopi_add_working_days" read-only (readOnlyHint: true), and its own name, description or input give the class "write".

    Matched text

    annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}; The name "hopi_add_working_days" says "add": a word for a change.

    What this check looks for
  • The server marks "hopi_angle_converter" read-only (readOnlyHint: true), and its own name, description or input give the class "irreversible".

    Matched text

    annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}; The description's first verb is "convert": a word for a change.

    What this check looks for
  • The server marks "hopi_area_converter" read-only (readOnlyHint: true), and its own name, description or input give the class "irreversible".

    Matched text

    annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}; The description's first verb is "convert": a word for a change.

    What this check looks for
Show 88 more findings
  • The server marks "hopi_bingo_card_generator" read-only (readOnlyHint: true), and its own name, description or input give the class "write".

    Matched text

    annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}; The description's first verb is "generate": a word for a change.

    What this check looks for
  • The server marks "hopi_calories_to_kj" read-only (readOnlyHint: true), and its own name, description or input give the class "write".

    Matched text

    annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}; The description's first verb is "convert": a word for a change.

    What this check looks for
  • The server marks "hopi_case_converter" read-only (readOnlyHint: true), and its own name, description or input give the class "write".

    Matched text

    annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}; The description's first verb is "convert": a word for a change.

    What this check looks for
  • The server marks "hopi_cat_age_calculator" read-only (readOnlyHint: true), and its own name, description or input give the class "write".

    Matched text

    annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}; The description's first verb is "convert": a word for a change.

    What this check looks for
  • The server marks "hopi_celsius_to_fahrenheit" read-only (readOnlyHint: true), and its own name, description or input give the class "write".

    Matched text

    annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}; The description's first verb is "convert": a word for a change.

    What this check looks for
  • The server marks "hopi_cm_to_feet" read-only (readOnlyHint: true), and its own name, description or input give the class "write".

    Matched text

    annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}; The description's first verb is "convert": a word for a change.

    What this check looks for
  • The server marks "hopi_cmyk_to_rgb" read-only (readOnlyHint: true), and its own name, description or input give the class "write".

    Matched text

    annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}; The description's first verb is "convert": a word for a change.

    What this check looks for
  • The server marks "hopi_colour_palette_generator" read-only (readOnlyHint: true), and its own name, description or input give the class "write".

    Matched text

    annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}; The description's first verb is "generate": a word for a change.

    What this check looks for
  • The server marks "hopi_csv_to_json" read-only (readOnlyHint: true), and its own name, description or input give the class "write".

    Matched text

    annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}; The description's first verb is "convert": a word for a change.

    What this check looks for
  • The server marks "hopi_cups_to_grams" read-only (readOnlyHint: true), and its own name, description or input give the class "write".

    Matched text

    annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}; The description's first verb is "convert": a word for a change.

    What this check looks for
  • The server marks "hopi_currency_converter" read-only (readOnlyHint: true), and its own name, description or input give the class "irreversible".

    Matched text

    annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}; The description's first verb is "convert": a word for a change.

    What this check looks for
  • The server marks "hopi_data_size_converter" read-only (readOnlyHint: true), and its own name, description or input give the class "irreversible".

    Matched text

    annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}; The description's first verb is "convert": a word for a change.

    What this check looks for
  • The server marks "hopi_date_calculator" read-only (readOnlyHint: true), and its own name, description or input give the class "write".

    Matched text

    annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}; The description's first verb is "add": a word for a change.

    What this check looks for
  • The server marks "hopi_day_rate_calculator" read-only (readOnlyHint: true), and its own name, description or input give the class "write".

    Matched text

    annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}; The description's first verb is "convert": a word for a change.

    What this check looks for
  • The server marks "hopi_dog_age_calculator" read-only (readOnlyHint: true), and its own name, description or input give the class "write".

    Matched text

    annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}; The description's first verb is "convert": a word for a change.

    What this check looks for
  • The server marks "hopi_dummy_data_generator" read-only (readOnlyHint: true), and its own name, description or input give the class "write".

    Matched text

    annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}; The description's first verb is "generate": a word for a change.

    What this check looks for
  • The server marks "hopi_email_link_generator" read-only (readOnlyHint: true), and its own name, description or input give the class "irreversible".

    Matched text

    annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}; The name "hopi_email_link_generator" says "link": a word for a change.

    What this check looks for
  • The server marks "hopi_emoji_remover" read-only (readOnlyHint: true), and its own name, description or input give the class "destructive".

    Matched text

    annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}; The description's first verb is "remove": a word for removing or ending something.

    What this check looks for
  • The server marks "hopi_emoji_remover" not destructive (destructiveHint: false), and its own name, description or input give the class "destructive".

    Matched text

    annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}; The description's first verb is "remove": a word for removing or ending something.

    What this check looks for
  • The server marks "hopi_env_to_json" read-only (readOnlyHint: true), and its own name, description or input give the class "write".

    Matched text

    annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}; The description's first verb is "convert": a word for a change.

    What this check looks for
  • The server marks "hopi_eth_unit_converter" read-only (readOnlyHint: true), and its own name, description or input give the class "write".

    Matched text

    annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}; The description's first verb is "convert": a word for a change.

    What this check looks for
  • The server marks "hopi_euromillions_generator" read-only (readOnlyHint: true), and its own name, description or input give the class "write".

    Matched text

    annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}; The description's first verb is "generate": a word for a change.

    What this check looks for
  • The server marks "hopi_fraction_calculator" read-only (readOnlyHint: true), and its own name, description or input give the class "write".

    Matched text

    annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}; The description's first verb is "add": a word for a change.

    What this check looks for
  • The server marks "hopi_fraction_to_decimal" read-only (readOnlyHint: true), and its own name, description or input give the class "write".

    Matched text

    annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}; The description's first verb is "convert": a word for a change.

    What this check looks for
  • The server marks "hopi_hex_to_rgb" read-only (readOnlyHint: true), and its own name, description or input give the class "write".

    Matched text

    annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}; The description's first verb is "convert": a word for a change.

    What this check looks for
  • The server marks "hopi_hourly_to_salary" read-only (readOnlyHint: true), and its own name, description or input give the class "write".

    Matched text

    annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}; The description's first verb is "convert": a word for a change.

    What this check looks for
  • The server marks "hopi_hsl_converter" read-only (readOnlyHint: true), and its own name, description or input give the class "write".

    Matched text

    annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}; The description's first verb is "convert": a word for a change.

    What this check looks for
  • The server marks "hopi_json_to_csv" read-only (readOnlyHint: true), and its own name, description or input give the class "write".

    Matched text

    annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}; The description's first verb is "convert": a word for a change.

    What this check looks for
  • The server marks "hopi_json_to_typescript" read-only (readOnlyHint: true), and its own name, description or input give the class "write".

    Matched text

    annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}; The description's first verb is "convert": a word for a change.

    What this check looks for
  • The server marks "hopi_json_yaml_converter" read-only (readOnlyHint: true), and its own name, description or input give the class "write".

    Matched text

    annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}; The description's first verb is "convert": a word for a change.

    What this check looks for
  • The server marks "hopi_kg_to_lbs" read-only (readOnlyHint: true), and its own name, description or input give the class "write".

    Matched text

    annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}; The description's first verb is "convert": a word for a change.

    What this check looks for
  • The server marks "hopi_kg_to_stone" read-only (readOnlyHint: true), and its own name, description or input give the class "write".

    Matched text

    annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}; The description's first verb is "convert": a word for a change.

    What this check looks for
  • The server marks "hopi_lbs_to_kg" read-only (readOnlyHint: true), and its own name, description or input give the class "write".

    Matched text

    annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}; The description's first verb is "convert": a word for a change.

    What this check looks for
  • The server marks "hopi_leak_tracer" read-only (readOnlyHint: true), and its own name, description or input give the class "irreversible".

    Matched text

    annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}; The input addresses people (input.recipients): what it sends cannot be taken back.

    What this check looks for
  • The server marks "hopi_length_converter" read-only (readOnlyHint: true), and its own name, description or input give the class "irreversible".

    Matched text

    annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}; The description's first verb is "convert": a word for a change.

    What this check looks for
  • The server marks "hopi_link_cleaner" read-only (readOnlyHint: true), and its own name, description or input give the class "write".

    Matched text

    annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}; The name "hopi_link_cleaner" says "link": a word for a change.

    What this check looks for
  • The server marks "hopi_litres_to_pints" read-only (readOnlyHint: true), and its own name, description or input give the class "write".

    Matched text

    annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}; The description's first verb is "convert": a word for a change.

    What this check looks for
  • The server marks "hopi_lookalike_domain_generator" read-only (readOnlyHint: true), and its own name, description or input give the class "write".

    Matched text

    annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}; The description's first verb is "generate": a word for a change.

    What this check looks for
  • The server marks "hopi_lorem_ipsum_generator" read-only (readOnlyHint: true), and its own name, description or input give the class "write".

    Matched text

    annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}; The description's first verb is "generate": a word for a change.

    What this check looks for
  • The server marks "hopi_lottery_number_generator" read-only (readOnlyHint: true), and its own name, description or input give the class "write".

    Matched text

    annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}; The description's first verb is "generate": a word for a change.

    What this check looks for
  • The server marks "hopi_miles_to_km" read-only (readOnlyHint: true), and its own name, description or input give the class "write".

    Matched text

    annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}; The description's first verb is "convert": a word for a change.

    What this check looks for
  • The server marks "hopi_military_time_converter" read-only (readOnlyHint: true), and its own name, description or input give the class "write".

    Matched text

    annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}; The description's first verb is "convert": a word for a change.

    What this check looks for
  • The server marks "hopi_minutes_to_hours" read-only (readOnlyHint: true), and its own name, description or input give the class "write".

    Matched text

    annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}; The description's first verb is "convert": a word for a change.

    What this check looks for
  • The server marks "hopi_mpg_converter" read-only (readOnlyHint: true), and its own name, description or input give the class "write".

    Matched text

    annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}; The description's first verb is "convert": a word for a change.

    What this check looks for
  • The server marks "hopi_number_base_converter" read-only (readOnlyHint: true), and its own name, description or input give the class "write".

    Matched text

    annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}; The description's first verb is "convert": a word for a change.

    What this check looks for
  • The server marks "hopi_number_to_words" read-only (readOnlyHint: true), and its own name, description or input give the class "write".

    Matched text

    annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}; The description's first verb is "convert": a word for a change.

    What this check looks for
  • The server marks "hopi_oven_temperature_converter" read-only (readOnlyHint: true), and its own name, description or input give the class "write".

    Matched text

    annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}; The description's first verb is "convert": a word for a change.

    What this check looks for
  • The server marks "hopi_overtime_pay_calculator" read-only (readOnlyHint: true), and its own name, description or input give the class "irreversible".

    Matched text

    annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}; The name "hopi_overtime_pay_calculator" says "pay": a word that usually means money moves, which cannot be taken back.

    What this check looks for
  • The server marks "hopi_percentage_calculator" read-only (readOnlyHint: true), and its own name, description or input give the class "irreversible".

    Matched text

    annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}; The input addresses people (input.to): what it sends cannot be taken back.

    What this check looks for
  • The server marks "hopi_percentage_change_calculator" read-only (readOnlyHint: true), and its own name, description or input give the class "irreversible".

    Matched text

    annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}; The input addresses people (input.to): what it sends cannot be taken back.

    What this check looks for
  • The server marks "hopi_power_converter" read-only (readOnlyHint: true), and its own name, description or input give the class "irreversible".

    Matched text

    annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}; The description's first verb is "convert": a word for a change.

    What this check looks for
  • The server marks "hopi_pressure_converter" read-only (readOnlyHint: true), and its own name, description or input give the class "irreversible".

    Matched text

    annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}; The description's first verb is "convert": a word for a change.

    What this check looks for
  • The server marks "hopi_random_colour_generator" read-only (readOnlyHint: true), and its own name, description or input give the class "write".

    Matched text

    annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}; The description's first verb is "generate": a word for a change.

    What this check looks for
  • The server marks "hopi_random_coordinates" read-only (readOnlyHint: true), and its own name, description or input give the class "write".

    Matched text

    annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}; The description's first verb is "generate": a word for a change.

    What this check looks for
  • The server marks "hopi_random_letter_generator" read-only (readOnlyHint: true), and its own name, description or input give the class "write".

    Matched text

    annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}; The description's first verb is "generate": a word for a change.

    What this check looks for
  • The server marks "hopi_random_number_generator" read-only (readOnlyHint: true), and its own name, description or input give the class "write".

    Matched text

    annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}; The description's first verb is "generate": a word for a change.

    What this check looks for
  • The server marks "hopi_random_word_generator" read-only (readOnlyHint: true), and its own name, description or input give the class "write".

    Matched text

    annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}; The description's first verb is "generate": a word for a change.

    What this check looks for
  • The server marks "hopi_redundancy_pay_calculator" read-only (readOnlyHint: true), and its own name, description or input give the class "irreversible".

    Matched text

    annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}; The name "hopi_redundancy_pay_calculator" says "pay": a word that usually means money moves, which cannot be taken back.

    What this check looks for
  • The server marks "hopi_remove_duplicate_lines" read-only (readOnlyHint: true), and its own name, description or input give the class "destructive".

    Matched text

    annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}; The name "hopi_remove_duplicate_lines" says "remove": a word for removing or ending something.

    What this check looks for
  • The server marks "hopi_remove_duplicate_lines" not destructive (destructiveHint: false), and its own name, description or input give the class "destructive".

    Matched text

    annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}; The name "hopi_remove_duplicate_lines" says "remove": a word for removing or ending something.

    What this check looks for
  • The server marks "hopi_remove_extra_spaces" read-only (readOnlyHint: true), and its own name, description or input give the class "destructive".

    Matched text

    annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}; The name "hopi_remove_extra_spaces" says "remove": a word for removing or ending something.

    What this check looks for
  • The server marks "hopi_remove_extra_spaces" not destructive (destructiveHint: false), and its own name, description or input give the class "destructive".

    Matched text

    annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}; The name "hopi_remove_extra_spaces" says "remove": a word for removing or ending something.

    What this check looks for
  • The server marks "hopi_remove_line_breaks" read-only (readOnlyHint: true), and its own name, description or input give the class "destructive".

    Matched text

    annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}; The name "hopi_remove_line_breaks" says "remove": a word for removing or ending something.

    What this check looks for
  • The server marks "hopi_remove_line_breaks" not destructive (destructiveHint: false), and its own name, description or input give the class "destructive".

    Matched text

    annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}; The name "hopi_remove_line_breaks" says "remove": a word for removing or ending something.

    What this check looks for
  • The server marks "hopi_rgb_to_hex" read-only (readOnlyHint: true), and its own name, description or input give the class "write".

    Matched text

    annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}; The description's first verb is "convert": a word for a change.

    What this check looks for
  • The server marks "hopi_ring_size_converter" read-only (readOnlyHint: true), and its own name, description or input give the class "write".

    Matched text

    annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}; The description's first verb is "convert": a word for a change.

    What this check looks for
  • The server marks "hopi_roman_numerals_converter" read-only (readOnlyHint: true), and its own name, description or input give the class "write".

    Matched text

    annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}; The description's first verb is "convert": a word for a change.

    What this check looks for
  • The server marks "hopi_satoshi_converter" read-only (readOnlyHint: true), and its own name, description or input give the class "write".

    Matched text

    annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}; The description's first verb is "convert": a word for a change.

    What this check looks for
  • The server marks "hopi_scientific_calculator" read-only (readOnlyHint: true), and its own name, description or input give the class "write".

    Matched text

    annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}; The description's first verb is "evaluate": a word for a change.

    What this check looks for
  • The server marks "hopi_set_for_life_generator" read-only (readOnlyHint: true), and its own name, description or input give the class "write".

    Matched text

    annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}; The name "hopi_set_for_life_generator" says "set": a word for a change.

    What this check looks for
  • The server marks "hopi_shoe_size_converter" read-only (readOnlyHint: true), and its own name, description or input give the class "write".

    Matched text

    annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}; The description's first verb is "convert": a word for a change.

    What this check looks for
  • The server marks "hopi_small_text_generator" read-only (readOnlyHint: true), and its own name, description or input give the class "write".

    Matched text

    annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}; The description's first verb is "convert": a word for a change.

    What this check looks for
  • The server marks "hopi_speed_converter" read-only (readOnlyHint: true), and its own name, description or input give the class "irreversible".

    Matched text

    annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}; The description's first verb is "convert": a word for a change.

    What this check looks for
  • The server marks "hopi_sql_formatter" read-only (readOnlyHint: true), and its own name, description or input give the class "write".

    Matched text

    annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}; The input takes a statement or command to run (input.sql), which can change anything it can reach.

    What this check looks for
  • The server marks "hopi_star_sign_calculator" read-only (readOnlyHint: true), and its own name, description or input give the class "write".

    Matched text

    annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}; The name "hopi_star_sign_calculator" says "star": a word for a change.

    What this check looks for
  • The server marks "hopi_stone_to_kg" read-only (readOnlyHint: true), and its own name, description or input give the class "write".

    Matched text

    annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}; The description's first verb is "convert": a word for a change.

    What this check looks for
  • The server marks "hopi_take_home_pay_calculator" read-only (readOnlyHint: true), and its own name, description or input give the class "irreversible".

    Matched text

    annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}; The name "hopi_take_home_pay_calculator" says "pay": a word that usually means money moves, which cannot be taken back.

    What this check looks for
  • The server marks "hopi_test_card_number_generator" read-only (readOnlyHint: true), and its own name, description or input give the class "write".

    Matched text

    annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}; The description's first verb is "generate": a word for a change.

    What this check looks for
  • The server marks "hopi_thunderball_generator" read-only (readOnlyHint: true), and its own name, description or input give the class "write".

    Matched text

    annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}; The description's first verb is "generate": a word for a change.

    What this check looks for
  • The server marks "hopi_time_calculator" read-only (readOnlyHint: true), and its own name, description or input give the class "write".

    Matched text

    annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}; The description's first verb is "add": a word for a change.

    What this check looks for
  • The server marks "hopi_time_zone_converter" read-only (readOnlyHint: true), and its own name, description or input give the class "write".

    Matched text

    annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}; The description's first verb is "convert": a word for a change.

    What this check looks for
  • The server marks "hopi_ucas_points_calculator" read-only (readOnlyHint: true), and its own name, description or input give the class "write".

    Matched text

    annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}; The description's first verb is "add": a word for a change.

    What this check looks for
  • The server marks "hopi_unix_timestamp_converter" read-only (readOnlyHint: true), and its own name, description or input give the class "write".

    Matched text

    annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}; The description's first verb is "convert": a word for a change.

    What this check looks for
  • The server marks "hopi_utm_link_generator" read-only (readOnlyHint: true), and its own name, description or input give the class "write".

    Matched text

    annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}; The name "hopi_utm_link_generator" says "link": a word for a change.

    What this check looks for
  • The server marks "hopi_uuid_generator" read-only (readOnlyHint: true), and its own name, description or input give the class "write".

    Matched text

    annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}; The description's first verb is "generate": a word for a change.

    What this check looks for
  • The server marks "hopi_vat_calculator" read-only (readOnlyHint: true), and its own name, description or input give the class "write".

    Matched text

    annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}; The description's first verb is "add": a word for a change.

    What this check looks for
  • The server marks "hopi_volume_converter" read-only (readOnlyHint: true), and its own name, description or input give the class "irreversible".

    Matched text

    annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}; The description's first verb is "convert": a word for a change.

    What this check looks for
  • The server marks "hopi_weight_converter" read-only (readOnlyHint: true), and its own name, description or input give the class "irreversible".

    Matched text

    annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}; The description's first verb is "convert": a word for a change.

    What this check looks for

Tools

Open a tool for its reasons and full description. Descriptions are the publisher's own words, shown as they are.

206 tools

Deletes or cancels 4Claude Code: deny
  • hopi_emoji_removerRemove emoji from a block of text, leaving the words and normal punctuation intact.2 findings

    Why it is in this group

    • The description's first verb is "remove": a word for removing or ending something.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
    • The server marks it not destructive (destructiveHint: false), but an annotation never lowers a class.

    Findings

    • Warn

      The server marks "hopi_emoji_remover" read-only (readOnlyHint: true), and its own name, description or input give the class "destructive".

      Matched text

      annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}; The description's first verb is "remove": a word for removing or ending something.

      What this check looks for
    • Warn

      The server marks "hopi_emoji_remover" not destructive (destructiveHint: false), and its own name, description or input give the class "destructive".

      Matched text

      annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}; The description's first verb is "remove": a word for removing or ending something.

      What this check looks for
    Description, as the server wrote it
    Remove emoji from a block of text, leaving the words and normal punctuation intact. Joined emoji sequences (such as a family or a flag) count as a single emoji. The copyright, registered and trademark symbols are kept. Returns the cleaned text and how many emoji were removed. Source: https://hopi.co.uk/emoji-remover/

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
    • title: Emoji remover
  • hopi_remove_duplicate_linesRemove duplicate lines from a block of text, keeping the first occurrence of each line in its original order.2 findings

    Why it is in this group

    • The name "hopi_remove_duplicate_lines" says "remove": a word for removing or ending something.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
    • The server marks it not destructive (destructiveHint: false), but an annotation never lowers a class.

    Findings

    • Warn

      The server marks "hopi_remove_duplicate_lines" read-only (readOnlyHint: true), and its own name, description or input give the class "destructive".

      Matched text

      annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}; The name "hopi_remove_duplicate_lines" says "remove": a word for removing or ending something.

      What this check looks for
    • Warn

      The server marks "hopi_remove_duplicate_lines" not destructive (destructiveHint: false), and its own name, description or input give the class "destructive".

      Matched text

      annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}; The name "hopi_remove_duplicate_lines" says "remove": a word for removing or ending something.

      What this check looks for
    Description, as the server wrote it
    Remove duplicate lines from a block of text, keeping the first occurrence of each line in its original order. Can optionally ignore letter case when deciding what counts as a duplicate. Returns the deduplicated text plus how many lines were kept and removed. Source: https://hopi.co.uk/remove-duplicate-lines/

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
    • title: Duplicate line remover
  • hopi_remove_extra_spacesTidy up spacing in text: collapse runs of spaces, tabs and non-breaking spaces down to a single space and trim each line.2 findings

    Why it is in this group

    • The name "hopi_remove_extra_spaces" says "remove": a word for removing or ending something.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
    • The server marks it not destructive (destructiveHint: false), but an annotation never lowers a class.

    Findings

    • Warn

      The server marks "hopi_remove_extra_spaces" read-only (readOnlyHint: true), and its own name, description or input give the class "destructive".

      Matched text

      annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}; The name "hopi_remove_extra_spaces" says "remove": a word for removing or ending something.

      What this check looks for
    • Warn

      The server marks "hopi_remove_extra_spaces" not destructive (destructiveHint: false), and its own name, description or input give the class "destructive".

      Matched text

      annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}; The name "hopi_remove_extra_spaces" says "remove": a word for removing or ending something.

      What this check looks for
    Description, as the server wrote it
    Tidy up spacing in text: collapse runs of spaces, tabs and non-breaking spaces down to a single space and trim each line. Can optionally also remove blank lines. Line breaks between lines are kept. Source: https://hopi.co.uk/remove-extra-spaces/

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
    • title: Remove extra spaces
  • hopi_remove_line_breaksRemove line breaks from text.2 findings

    Why it is in this group

    • The name "hopi_remove_line_breaks" says "remove": a word for removing or ending something.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
    • The server marks it not destructive (destructiveHint: false), but an annotation never lowers a class.

    Findings

    • Warn

      The server marks "hopi_remove_line_breaks" read-only (readOnlyHint: true), and its own name, description or input give the class "destructive".

      Matched text

      annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}; The name "hopi_remove_line_breaks" says "remove": a word for removing or ending something.

      What this check looks for
    • Warn

      The server marks "hopi_remove_line_breaks" not destructive (destructiveHint: false), and its own name, description or input give the class "destructive".

      Matched text

      annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}; The name "hopi_remove_line_breaks" says "remove": a word for removing or ending something.

      What this check looks for
    Description, as the server wrote it
    Remove line breaks from text. In 'spaces' mode every line is joined into one with single spaces. In 'paragraphs' mode blank lines are treated as paragraph breaks, so text is joined within each paragraph while the blank line between paragraphs is preserved. Source: https://hopi.co.uk/remove-line-breaks/

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
    • title: Remove line breaks
Can't be undone 17Claude Code: ask
  • hopi_angle_converterConvert an angle from one unit to another.1 finding

    Why it is in this group

    • The description's first verb is "convert": a word for a change.
    • The input addresses people (input.to): what it sends cannot be taken back.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.

    Findings

    • Warn

      The server marks "hopi_angle_converter" read-only (readOnlyHint: true), and its own name, description or input give the class "irreversible".

      Matched text

      annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}; The description's first verb is "convert": a word for a change.

      What this check looks for
    Description, as the server wrote it
    Convert an angle from one unit to another. Units: deg (degrees), rad (radians), grad (gradians), turn (full turns). Source: https://hopi.co.uk/angle-converter/

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
    • title: Angle converter
  • hopi_area_converterConvert an area from one unit to another.1 finding

    Why it is in this group

    • The description's first verb is "convert": a word for a change.
    • The input addresses people (input.to): what it sends cannot be taken back.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.

    Findings

    • Warn

      The server marks "hopi_area_converter" read-only (readOnlyHint: true), and its own name, description or input give the class "irreversible".

      Matched text

      annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}; The description's first verb is "convert": a word for a change.

      What this check looks for
    Description, as the server wrote it
    Convert an area from one unit to another. Units: sqm (square metres), sqft (square feet), sqyd (square yards), acre (acres), ha (hectares), sqkm (square kilometres), sqmi (square miles). Source: https://hopi.co.uk/area-converter/

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
    • title: Area converter
  • hopi_currency_converterConvert an amount of money from one currency to another using Hopi's live mid-market exchange rates (updated hourly, 150+ currencies).1 finding

    Why it is in this group

    • The description's first verb is "convert": a word for a change.
    • The input addresses people (input.to): what it sends cannot be taken back.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.

    Findings

    • Warn

      The server marks "hopi_currency_converter" read-only (readOnlyHint: true), and its own name, description or input give the class "irreversible".

      Matched text

      annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}; The description's first verb is "convert": a word for a change.

      What this check looks for
    Description, as the server wrote it
    Convert an amount of money from one currency to another using Hopi's live mid-market exchange rates (updated hourly, 150+ currencies). Use ISO 4217 codes such as GBP, EUR, USD, JPY. Source: https://hopi.co.uk/currency-converter/

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
    • title: Currency converter
  • hopi_data_size_converterConvert a digital storage size between units.1 finding

    Why it is in this group

    • The description's first verb is "convert": a word for a change.
    • The input addresses people (input.to): what it sends cannot be taken back.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.

    Findings

    • Warn

      The server marks "hopi_data_size_converter" read-only (readOnlyHint: true), and its own name, description or input give the class "irreversible".

      Matched text

      annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}; The description's first verb is "convert": a word for a change.

      What this check looks for
    Description, as the server wrote it
    Convert a digital storage size between units. Units: B (bytes), KB, MB, GB, TB. By default 1 KB = 1000 bytes (decimal, as storage is sold). Set binary to true for 1 KB = 1024 bytes (as Windows reports drive sizes). Source: https://hopi.co.uk/data-size-converter/

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
    • title: Data size converter
  • hopi_leak_tracerWatermark a document per recipient and trace a leaked copy.1 finding

    Why it is in this group

    • The input addresses people (input.recipients): what it sends cannot be taken back.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.

    Findings

    • Warn

      The server marks "hopi_leak_tracer" read-only (readOnlyHint: true), and its own name, description or input give the class "irreversible".

      Matched text

      annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}; The input addresses people (input.recipients): what it sends cannot be taken back.

      What this check looks for
    Description, as the server wrote it
    Watermark a document per recipient and trace a leaked copy. Mode 'mark' takes text and a list of recipient names (up to 255) and returns one copy per recipient carrying that recipient's number as an 18-character invisible marker (U+2060 frame, 8-bit number plus 8-bit check written in U+200B and U+200C) after the first word and every twentieth word, plus a tracer key that stores the list; set spacing to also encode the pattern in no-break spaces. Mode 'trace' takes a leaked copy plus the same recipients or the key and returns the recipient, the copy number, how many markers were found and agreed, and a confidence level. Marks survive copy and paste but not retyping, screenshots, OCR or a hidden-character cleaner. Source: https://hopi.co.uk/leak-tracer/

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
    • title: Leak tracer
  • hopi_length_converterConvert a length from one unit to another.1 finding

    Why it is in this group

    • The description's first verb is "convert": a word for a change.
    • The input addresses people (input.to): what it sends cannot be taken back.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.

    Findings

    • Warn

      The server marks "hopi_length_converter" read-only (readOnlyHint: true), and its own name, description or input give the class "irreversible".

      Matched text

      annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}; The description's first verb is "convert": a word for a change.

      What this check looks for
    Description, as the server wrote it
    Convert a length from one unit to another. Units: mm, cm, m, km, in (inches), ft (feet), yd (yards), mi (miles). Source: https://hopi.co.uk/length-converter/

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
    • title: Length converter
  • hopi_overtime_pay_calculatorWork out gross overtime pay from a base hourly rate and hours worked at three multipliers: standard (1x), time and a half (1.5x) and double time (2x).1 finding

    Why it is in this group

    • The name "hopi_overtime_pay_calculator" says "pay": a word that usually means money moves, which cannot be taken back.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.

    Findings

    • Warn

      The server marks "hopi_overtime_pay_calculator" read-only (readOnlyHint: true), and its own name, description or input give the class "irreversible".

      Matched text

      annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}; The name "hopi_overtime_pay_calculator" says "pay": a word that usually means money moves, which cannot be taken back.

      What this check looks for
    Description, as the server wrote it
    Work out gross overtime pay from a base hourly rate and hours worked at three multipliers: standard (1x), time and a half (1.5x) and double time (2x). At least one hours figure is required. Returns pay at each rate, the total and total hours. Gross pay in GBP, before tax and NI. Source: https://hopi.co.uk/overtime-pay-calculator/

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
    • title: Overtime pay calculator
  • hopi_percentage_calculatorWork out percentages three ways.1 finding

    Why it is in this group

    • The input addresses people (input.to): what it sends cannot be taken back.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.

    Findings

    • Warn

      The server marks "hopi_percentage_calculator" read-only (readOnlyHint: true), and its own name, description or input give the class "irreversible".

      Matched text

      annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}; The input addresses people (input.to): what it sends cannot be taken back.

      What this check looks for
    Description, as the server wrote it
    Work out percentages three ways. Mode 'of': what is P percent of a number. Mode 'what': what percentage the part is of the whole. Mode 'change': the percentage change from a starting value to an end value. Source: https://hopi.co.uk/percentage-calculator/

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
    • title: Percentage calculator
  • hopi_percentage_change_calculatorWork out the percentage change from a starting value to an end value, using the starting value as the base.1 finding

    Why it is in this group

    • The input addresses people (input.to): what it sends cannot be taken back.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.

    Findings

    • Warn

      The server marks "hopi_percentage_change_calculator" read-only (readOnlyHint: true), and its own name, description or input give the class "irreversible".

      Matched text

      annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}; The input addresses people (input.to): what it sends cannot be taken back.

      What this check looks for
    Description, as the server wrote it
    Work out the percentage change from a starting value to an end value, using the starting value as the base. A positive result is an increase, a negative result is a decrease. Source: https://hopi.co.uk/percentage-change-calculator/

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
    • title: Percentage change calculator
  • hopi_power_converterConvert power from one unit to another.1 finding

    Why it is in this group

    • The description's first verb is "convert": a word for a change.
    • The input addresses people (input.to): what it sends cannot be taken back.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.

    Findings

    • Warn

      The server marks "hopi_power_converter" read-only (readOnlyHint: true), and its own name, description or input give the class "irreversible".

      Matched text

      annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}; The description's first verb is "convert": a word for a change.

      What this check looks for
    Description, as the server wrote it
    Convert power from one unit to another. Units: w (watts), kw (kilowatts), hp (mechanical horsepower), ps (metric horsepower, PS). Source: https://hopi.co.uk/power-converter/

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
    • title: Power converter
  • hopi_pressure_converterConvert pressure from one unit to another.1 finding

    Why it is in this group

    • The description's first verb is "convert": a word for a change.
    • The input addresses people (input.to): what it sends cannot be taken back.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.

    Findings

    • Warn

      The server marks "hopi_pressure_converter" read-only (readOnlyHint: true), and its own name, description or input give the class "irreversible".

      Matched text

      annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}; The description's first verb is "convert": a word for a change.

      What this check looks for
    Description, as the server wrote it
    Convert pressure from one unit to another. Units: bar, psi (pounds per square inch), kpa (kilopascals), atm (atmospheres). Source: https://hopi.co.uk/pressure-converter/

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
    • title: Pressure converter
  • hopi_redundancy_pay_calculatorWork out UK statutory redundancy pay for redundancies on or after 6 April 2026, using the gov.uk count-back method: for each full year of service (up to 20), 1.5 weeks if worked ag…1 finding

    Why it is in this group

    • The name "hopi_redundancy_pay_calculator" says "pay": a word that usually means money moves, which cannot be taken back.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.

    Findings

    • Warn

      The server marks "hopi_redundancy_pay_calculator" read-only (readOnlyHint: true), and its own name, description or input give the class "irreversible".

      Matched text

      annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}; The name "hopi_redundancy_pay_calculator" says "pay": a word that usually means money moves, which cannot be taken back.

      What this check looks for
    Description, as the server wrote it
    Work out UK statutory redundancy pay for redundancies on or after 6 April 2026, using the gov.uk count-back method: for each full year of service (up to 20), 1.5 weeks if worked aged 41+, 1 week aged 22 to 40, and 0.5 weeks under 22. Weekly pay is capped at £751 and the total at £22,530. At least 2 full years of service are needed. Amounts in GBP. Source: https://hopi.co.uk/redundancy-pay-calculator/

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
    • title: Redundancy pay calculator
  • hopi_speed_converterConvert a speed from one unit to another.1 finding

    Why it is in this group

    • The description's first verb is "convert": a word for a change.
    • The input addresses people (input.to): what it sends cannot be taken back.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.

    Findings

    • Warn

      The server marks "hopi_speed_converter" read-only (readOnlyHint: true), and its own name, description or input give the class "irreversible".

      Matched text

      annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}; The description's first verb is "convert": a word for a change.

      What this check looks for
    Description, as the server wrote it
    Convert a speed from one unit to another. Units: mph (miles per hour), kmh (kilometres per hour), ms (metres per second), kn (knots), mach (Mach, at 340.29 m/s). Source: https://hopi.co.uk/speed-converter/

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
    • title: Speed converter
  • hopi_take_home_pay_calculatorWork out UK take-home pay from an annual gross salary for the 2026/27 tax year in England, Wales and Northern Ireland, using code 1257L income tax bands (20/40/45%) with personal a…1 finding

    Why it is in this group

    • The name "hopi_take_home_pay_calculator" says "pay": a word that usually means money moves, which cannot be taken back.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.

    Findings

    • Warn

      The server marks "hopi_take_home_pay_calculator" read-only (readOnlyHint: true), and its own name, description or input give the class "irreversible".

      Matched text

      annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}; The name "hopi_take_home_pay_calculator" says "pay": a word that usually means money moves, which cannot be taken back.

      What this check looks for
    Description, as the server wrote it
    Work out UK take-home pay from an annual gross salary for the 2026/27 tax year in England, Wales and Northern Ireland, using code 1257L income tax bands (20/40/45%) with personal allowance taper above £100,000, plus employee National Insurance. Returns net pay per year, month and week, and the tax and NI deducted. Amounts in GBP. Source: https://hopi.co.uk/take-home-pay-calculator/

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
    • title: Take-home pay calculator
  • hopi_volume_converterConvert a volume from one unit to another.1 finding

    Why it is in this group

    • The description's first verb is "convert": a word for a change.
    • The input addresses people (input.to): what it sends cannot be taken back.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.

    Findings

    • Warn

      The server marks "hopi_volume_converter" read-only (readOnlyHint: true), and its own name, description or input give the class "irreversible".

      Matched text

      annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}; The description's first verb is "convert": a word for a change.

      What this check looks for
    Description, as the server wrote it
    Convert a volume from one unit to another. Units: ml (millilitres), l (litres), ukpt (UK pints), ukgal (UK gallons), usgal (US gallons), ukfloz (UK fluid ounces), usfloz (US fluid ounces), m3 (cubic metres). Source: https://hopi.co.uk/volume-converter/

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
    • title: Volume converter
  • hopi_weight_converterConvert a weight from one unit to another.1 finding

    Why it is in this group

    • The description's first verb is "convert": a word for a change.
    • The input addresses people (input.to): what it sends cannot be taken back.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.

    Findings

    • Warn

      The server marks "hopi_weight_converter" read-only (readOnlyHint: true), and its own name, description or input give the class "irreversible".

      Matched text

      annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}; The description's first verb is "convert": a word for a change.

      What this check looks for
    Description, as the server wrote it
    Convert a weight from one unit to another. Units: g (grams), kg (kilograms), oz (ounces), lb (pounds), st (stone). Source: https://hopi.co.uk/weight-converter/

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
    • title: Weight converter
Changes things 165Claude Code: ask
  • hopi_add_working_daysAdd or subtract a number of working days (Monday to Friday) from a start date, optionally skipping England and Wales bank holidays.1 finding

    Why it is in this group

    • The name "hopi_add_working_days" says "add": a word for a change.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.

    Findings

    • Warn

      The server marks "hopi_add_working_days" read-only (readOnlyHint: true), and its own name, description or input give the class "write".

      Matched text

      annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}; The name "hopi_add_working_days" says "add": a word for a change.

      What this check looks for
    Description, as the server wrote it
    Add or subtract a number of working days (Monday to Friday) from a start date, optionally skipping England and Wales bank holidays. Dates use the YYYY-MM-DD format. Bank holiday data covers 2026 and 2027 only, so outside those years just weekends are skipped. Source: https://hopi.co.uk/add-working-days/

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
    • title: Add working days
  • hopi_age_calculatorWork out an exact age from a date of birth, as of today or an optional 'as of' date.No findings

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
    Description, as the server wrote it
    Work out an exact age from a date of birth, as of today or an optional 'as of' date. Dates use the YYYY-MM-DD format. Returns the age in years, months and days, the total days lived, and the next birthday. Source: https://hopi.co.uk/age-calculator/

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
    • title: Age calculator
  • hopi_alcohol_unit_calculatorWork out UK alcohol units in a drink from its ABV (percentage) and volume (millilitres), using units = ABV x ml / 1000.No findings

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
    Description, as the server wrote it
    Work out UK alcohol units in a drink from its ABV (percentage) and volume (millilitres), using units = ABV x ml / 1000. Optionally give the number of those drinks per week to get a weekly total compared against the NHS low risk guideline of 14 units a week. Source: https://hopi.co.uk/alcohol-unit-calculator/

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
    • title: Alcohol unit calculator
  • hopi_alphabetical_orderSort the lines of a block of text into alphabetical order.No findings

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
    Description, as the server wrote it
    Sort the lines of a block of text into alphabetical order. Blank lines are dropped. Uses natural en-GB ordering so numbers within lines sort sensibly. Can sort ascending (A to Z) or descending (Z to A), and can ignore case. Source: https://hopi.co.uk/alphabetical-order/

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
    • title: Alphabetical order sorter
  • hopi_aspect_ratio_calculatorAspect ratio helper.No findings

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
    Description, as the server wrote it
    Aspect ratio helper. In 'simplify' mode, give width and height to get the simplified W:H ratio, decimal ratio and nearest common ratio. In 'solve' mode, give a ratio (ratioW:ratioH) plus one of width or height to get the missing side. Source: https://hopi.co.uk/aspect-ratio-calculator/

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
    • title: Aspect ratio calculator
  • hopi_average_calculatorWork out the mean, median, mode, sum, count, minimum and maximum of a list of numbers.No findings

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
    Description, as the server wrote it
    Work out the mean, median, mode, sum, count, minimum and maximum of a list of numbers. Provide the numbers separated by spaces, commas, semicolons or new lines (type 1200 rather than 1,200, as commas are treated as separators). Source: https://hopi.co.uk/average-calculator/

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
    • title: Mean, median & mode calculator
  • hopi_base32_encoderEncode text to RFC 4648 Base32 or decode Base32 back to text.No findings

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
    Description, as the server wrote it
    Encode text to RFC 4648 Base32 or decode Base32 back to text. Encoding maps the UTF-8 bytes of the text into 5-bit groups using the alphabet A to Z then 2 to 7, padded to a multiple of 8 characters with equals signs. Decoding tolerates lowercase input and missing padding, and reports characters outside the alphabet as an error. Source: https://hopi.co.uk/base32-encoder/

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
    • title: Base32 encoder and decoder
  • hopi_base64Encode text to Base64, or decode a Base64 string back to text.No findings

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
    Description, as the server wrote it
    Encode text to Base64, or decode a Base64 string back to text. UTF-8 safe, so accents and emoji survive the round trip. Returns the converted text or a clear error. Source: https://hopi.co.uk/base64/

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
    • title: Base64 encode & decode
  • hopi_bill_splitterSplit a restaurant bill between people.No findings

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
    Description, as the server wrote it
    Split a restaurant bill between people. In 'itemised' mode, list each item with its amount and who shared it, then add an optional tip and service charge (both percentages applied to each person's own share). In 'even' mode, split one total evenly with an optional tip. Amounts in GBP. Source: https://hopi.co.uk/bill-splitter/

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
    • title: Bill splitter
  • hopi_bingo_card_generatorGenerate one or more UK 90-ball bingo cards.1 finding

    Why it is in this group

    • The description's first verb is "generate": a word for a change.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.

    Findings

    • Warn

      The server marks "hopi_bingo_card_generator" read-only (readOnlyHint: true), and its own name, description or input give the class "write".

      Matched text

      annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}; The description's first verb is "generate": a word for a change.

      What this check looks for
    Description, as the server wrote it
    Generate one or more UK 90-ball bingo cards. Each card is a 3-row by 9-column grid holding 15 numbers, 5 per row, with each column drawing from its own decade (1 to 9, 10 to 19, and so on up to 80 to 90). Blank squares are null. Source: https://hopi.co.uk/bingo-card-generator/

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
    • title: Bingo card generator
  • hopi_bitcoin_address_validatorCheck whether a Bitcoin address is valid by verifying its checksum and structure.No findings

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
    Description, as the server wrote it
    Check whether a Bitcoin address is valid by verifying its checksum and structure. Supports legacy Base58Check (P2PKH, P2SH) and Bech32/Bech32m SegWit and Taproot addresses, on mainnet and testnet. Does not query the blockchain or check balances. Source: https://hopi.co.uk/bitcoin-address-validator/

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
    • title: Bitcoin address validator
  • hopi_bmi_calculatorWork out body mass index (BMI) from height and weight, with the NHS weight category.No findings

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
    Description, as the server wrote it
    Work out body mass index (BMI) from height and weight, with the NHS weight category. Use units 'metric' with heightCm and weightKg, or 'imperial' with heightInches and weightPounds. BMI = weight in kg / (height in metres squared). Source: https://hopi.co.uk/bmi-calculator/

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
    • title: BMI calculator
  • hopi_body_fat_calculatorEstimate body fat percentage using the US Navy tape method from a few measurements.No findings

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
    Description, as the server wrote it
    Estimate body fat percentage using the US Navy tape method from a few measurements. For males give height, neck and waist; for females give height, neck, waist and hip. Use units 'metric' (centimetres) or 'imperial' (inches). Optionally give weight (kg for metric, pounds for imperial) to also get fat mass and lean mass in kilograms. Source: https://hopi.co.uk/body-fat-calculator/

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
    • title: Body fat percentage calculator
  • hopi_caesar_cipherEncode or decode text with a Caesar shift cipher.No findings

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
    Description, as the server wrote it
    Encode or decode text with a Caesar shift cipher. Each letter is moved along the alphabet by the shift amount; a shift of 13 is ROT13. Only A to Z letters are changed, everything else is left as is. Decoding applies the opposite shift. Source: https://hopi.co.uk/caesar-cipher/

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
    • title: Caesar cipher & ROT13
  • hopi_cagr_calculatorWork out the compound annual growth rate (CAGR) that takes a starting value to an ending value over a number of years.No findings

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
    Description, as the server wrote it
    Work out the compound annual growth rate (CAGR) that takes a starting value to an ending value over a number of years. Returns the annual rate, the total growth and the growth multiple. Source: https://hopi.co.uk/cagr-calculator/

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
    • title: CAGR calculator
  • hopi_calories_to_kjConvert food energy between kilocalories (kcal) and kilojoules (kJ) using the exact factor 1 kcal = 4.184 kJ.1 finding

    Why it is in this group

    • The description's first verb is "convert": a word for a change.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.

    Findings

    • Warn

      The server marks "hopi_calories_to_kj" read-only (readOnlyHint: true), and its own name, description or input give the class "write".

      Matched text

      annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}; The description's first verb is "convert": a word for a change.

      What this check looks for
    Description, as the server wrote it
    Convert food energy between kilocalories (kcal) and kilojoules (kJ) using the exact factor 1 kcal = 4.184 kJ. Give an amount and its unit ('kcal' or 'kj'); returns both values. Source: https://hopi.co.uk/calories-to-kj/

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
    • title: Calories to kJ converter
  • hopi_case_converterConvert text to a different letter case.1 finding

    Why it is in this group

    • The description's first verb is "convert": a word for a change.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.

    Findings

    • Warn

      The server marks "hopi_case_converter" read-only (readOnlyHint: true), and its own name, description or input give the class "write".

      Matched text

      annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}; The description's first verb is "convert": a word for a change.

      What this check looks for
    Description, as the server wrote it
    Convert text to a different letter case. 'upper' is UPPERCASE, 'lower' is lowercase, 'title' capitalises the first letter of each word, and 'sentence' capitalises the first letter of each sentence. Source: https://hopi.co.uk/case-converter/

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
    • title: Case converter
  • hopi_cat_age_calculatorConvert a cat's age in years to an approximate human age, using the standard 15, 24, then 4 a year chart.1 finding

    Why it is in this group

    • The description's first verb is "convert": a word for a change.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.

    Findings

    • Warn

      The server marks "hopi_cat_age_calculator" read-only (readOnlyHint: true), and its own name, description or input give the class "write".

      Matched text

      annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}; The description's first verb is "convert": a word for a change.

      What this check looks for
    Description, as the server wrote it
    Convert a cat's age in years to an approximate human age, using the standard 15, 24, then 4 a year chart. Returns the human-equivalent age and the cat's life stage. Source: https://hopi.co.uk/cat-age-calculator/

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
    • title: Cat age calculator
  • hopi_celsius_to_fahrenheitConvert a temperature between Celsius and Fahrenheit.1 finding

    Why it is in this group

    • The description's first verb is "convert": a word for a change.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.

    Findings

    • Warn

      The server marks "hopi_celsius_to_fahrenheit" read-only (readOnlyHint: true), and its own name, description or input give the class "write".

      Matched text

      annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}; The description's first verb is "convert": a word for a change.

      What this check looks for
    Description, as the server wrote it
    Convert a temperature between Celsius and Fahrenheit. Also returns Kelvin. Set direction to 'c-to-f' or 'f-to-c'. Source: https://hopi.co.uk/celsius-to-fahrenheit/

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
    • title: Temperature converter
  • hopi_cipher_identifierIdentify what encoding or classical cipher a piece of text probably is (Base64, Base32, hex, binary, octal or decimal ASCII, URL encoding, HTML entities, Morse, Caesar or ROT-N, At…No findings

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
    Description, as the server wrote it
    Identify what encoding or classical cipher a piece of text probably is (Base64, Base32, hex, binary, octal or decimal ASCII, URL encoding, HTML entities, Morse, Caesar or ROT-N, Atbash, reversed text) or recognise it as a UUID, IPv4 address, Unix timestamp, JWT or hash digest. Returns ranked candidates with confidence and a decoded preview, then auto-decodes nested layers (up to 8) while a step is at least 60% confident. Cannot break keyed encryption such as AES. Source: https://hopi.co.uk/cipher-identifier/

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
    • title: Cipher identifier and auto-decoder
  • hopi_cm_to_feetConvert a height between centimetres and feet/inches.1 finding

    Why it is in this group

    • The description's first verb is "convert": a word for a change.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.

    Findings

    • Warn

      The server marks "hopi_cm_to_feet" read-only (readOnlyHint: true), and its own name, description or input give the class "write".

      Matched text

      annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}; The description's first verb is "convert": a word for a change.

      What this check looks for
    Description, as the server wrote it
    Convert a height between centimetres and feet/inches. Direction 'cm-to-feet' takes cm and returns feet and inches. Direction 'feet-to-cm' takes feet and inches and returns cm. Source: https://hopi.co.uk/cm-to-feet/

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
    • title: Cm to feet converter
  • hopi_cmyk_to_rgbConvert print CMYK values (each 0 to 100) to on-screen RGB and hex, or convert RGB (each 0 to 255) the other way to CMYK.1 finding

    Why it is in this group

    • The description's first verb is "convert": a word for a change.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.

    Findings

    • Warn

      The server marks "hopi_cmyk_to_rgb" read-only (readOnlyHint: true), and its own name, description or input give the class "write".

      Matched text

      annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}; The description's first verb is "convert": a word for a change.

      What this check looks for
    Description, as the server wrote it
    Convert print CMYK values (each 0 to 100) to on-screen RGB and hex, or convert RGB (each 0 to 255) the other way to CMYK. Uses the standard device-independent conversion. Source: https://hopi.co.uk/cmyk-to-rgb/

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
    • title: CMYK to RGB converter
  • hopi_coin_flipFlip a fair coin one or more times.No findings

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
    Description, as the server wrote it
    Flip a fair coin one or more times. Returns each result plus a tally of heads and tails. Source: https://hopi.co.uk/coin-flip/

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
    • title: Coin flip
  • hopi_colour_palette_generatorGenerate a five-swatch colour palette from a base hex colour using a chosen scheme: analogous, complementary, triadic or mixed.1 finding

    Why it is in this group

    • The description's first verb is "generate": a word for a change.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.

    Findings

    • Warn

      The server marks "hopi_colour_palette_generator" read-only (readOnlyHint: true), and its own name, description or input give the class "write".

      Matched text

      annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}; The description's first verb is "generate": a word for a change.

      What this check looks for
    Description, as the server wrote it
    Generate a five-swatch colour palette from a base hex colour using a chosen scheme: analogous, complementary, triadic or mixed. Supporting swatches carry a small random variation, so results vary slightly each call. Source: https://hopi.co.uk/colour-palette-generator/

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
    • title: Colour palette generator
  • hopi_colour_pickerGiven a six-digit hex colour code (with or without a leading #), return its hex, RGB and HSL values.No findings

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
    Description, as the server wrote it
    Given a six-digit hex colour code (with or without a leading #), return its hex, RGB and HSL values. Source: https://hopi.co.uk/colour-picker/

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
    • title: Colour picker
  • hopi_colour_shades_generatorFrom a base hex colour, generate five progressively lighter tints (mixed towards white) and five progressively darker shades (mixed towards black), each in five equal steps of one …No findings

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
    Description, as the server wrote it
    From a base hex colour, generate five progressively lighter tints (mixed towards white) and five progressively darker shades (mixed towards black), each in five equal steps of one sixth. Source: https://hopi.co.uk/colour-shades-generator/

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
    • title: Shades & tints generator
  • hopi_compound_interest_calculatorProject savings growth from a starting deposit plus a regular monthly contribution, compounded monthly with contributions added at the end of each month.No findings

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
    Description, as the server wrote it
    Project savings growth from a starting deposit plus a regular monthly contribution, compounded monthly with contributions added at the end of each month. Returns the final balance, total paid in and interest earned. Amounts in GBP, rate is the annual rate as a percentage. Source: https://hopi.co.uk/compound-interest-calculator/

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
    • title: Compound interest calculator
  • hopi_contrast_checkerWork out the WCAG contrast ratio between a foreground (text) colour and a background colour, both as hex codes, and report whether it passes AA and AAA for normal and large text.No findings

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
    Description, as the server wrote it
    Work out the WCAG contrast ratio between a foreground (text) colour and a background colour, both as hex codes, and report whether it passes AA and AAA for normal and large text. Source: https://hopi.co.uk/contrast-checker/

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
    • title: Contrast checker
  • hopi_cron_expression_parserTranslate a standard five-field cron expression (minute, hour, day-of-month, month, day-of-week) into plain English.No findings

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
    Description, as the server wrote it
    Translate a standard five-field cron expression (minute, hour, day-of-month, month, day-of-week) into plain English. Understands stars, steps, ranges, lists and month and day names, plus shortcuts like @daily and @hourly. Source: https://hopi.co.uk/cron-expression-parser/

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
    • title: Cron expression translator
  • hopi_crypto_profit_calculatorWork out profit or loss on a crypto trade from buy price, quantity and an optional per-side fee percentage.No findings

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
    Description, as the server wrote it
    Work out profit or loss on a crypto trade from buy price, quantity and an optional per-side fee percentage. Returns breakeven price always, and profit, return percentage and total fees once a sell price is given. All figures are treated as GBP. Source: https://hopi.co.uk/crypto-profit-calculator/

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
    • title: Crypto profit calculator
  • hopi_css_gradient_generatorBuild a ready-to-use CSS gradient from two colours.No findings

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
    Description, as the server wrote it
    Build a ready-to-use CSS gradient from two colours. Choose a linear gradient with an angle in degrees, or a radial gradient. Returns the gradient value and a full background declaration. Source: https://hopi.co.uk/css-gradient-generator/

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
    • title: CSS gradient generator
  • hopi_css_minifierMinify CSS by removing comments and needless whitespace, while preserving quoted strings and the spaces inside calc() expressions.No findings

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
    Description, as the server wrote it
    Minify CSS by removing comments and needless whitespace, while preserving quoted strings and the spaces inside calc() expressions. Returns the minified CSS with before and after byte sizes. Source: https://hopi.co.uk/css-minifier/

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
    • title: CSS minifier
  • hopi_csv_to_jsonConvert CSV text into a JSON array, following standard CSV quoting rules for embedded commas, quotes and line breaks.1 finding

    Why it is in this group

    • The description's first verb is "convert": a word for a change.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.

    Findings

    • Warn

      The server marks "hopi_csv_to_json" read-only (readOnlyHint: true), and its own name, description or input give the class "write".

      Matched text

      annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}; The description's first verb is "convert": a word for a change.

      What this check looks for
    Description, as the server wrote it
    Convert CSV text into a JSON array, following standard CSV quoting rules for embedded commas, quotes and line breaks. With headers on, the first row becomes object keys; with headers off, each row is an array of strings. Source: https://hopi.co.uk/csv-to-json/

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
    • title: CSV to JSON converter
  • hopi_cups_to_gramsConvert US cups of a common baking ingredient to grams (approximate).1 finding

    Why it is in this group

    • The description's first verb is "convert": a word for a change.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.

    Findings

    • Warn

      The server marks "hopi_cups_to_grams" read-only (readOnlyHint: true), and its own name, description or input give the class "write".

      Matched text

      annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}; The description's first verb is "convert": a word for a change.

      What this check looks for
    Description, as the server wrote it
    Convert US cups of a common baking ingredient to grams (approximate). Ingredients: flour (plain flour), caster (caster sugar), brown (packed brown sugar), butter, cocoa (cocoa powder), oats, rice (uncooked rice), icing (icing sugar). Source: https://hopi.co.uk/cups-to-grams/

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
    • title: Cups to grams converter
  • hopi_date_calculatorAdd or subtract a number of days, weeks, months or years from a date.1 finding

    Why it is in this group

    • The description's first verb is "add": a word for a change.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.

    Findings

    • Warn

      The server marks "hopi_date_calculator" read-only (readOnlyHint: true), and its own name, description or input give the class "write".

      Matched text

      annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}; The description's first verb is "add": a word for a change.

      What this check looks for
    Description, as the server wrote it
    Add or subtract a number of days, weeks, months or years from a date. Dates use the YYYY-MM-DD format. Months and years are clamped to the last day of the target month where needed. Returns the resulting date. Source: https://hopi.co.uk/date-calculator/

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
    • title: Date calculator
  • hopi_day_rate_calculatorConvert between a contractor day rate and an annual salary equivalent using a chosen number of billable working days per year (default 220).1 finding

    Why it is in this group

    • The description's first verb is "convert": a word for a change.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.

    Findings

    • Warn

      The server marks "hopi_day_rate_calculator" read-only (readOnlyHint: true), and its own name, description or input give the class "write".

      Matched text

      annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}; The description's first verb is "convert": a word for a change.

      What this check looks for
    Description, as the server wrote it
    Convert between a contractor day rate and an annual salary equivalent using a chosen number of billable working days per year (default 220). Mode 'to_salary' turns a day rate into yearly, monthly and weekly figures; mode 'to_rate' turns a salary into a day rate. Gross amounts in GBP, before tax. Source: https://hopi.co.uk/day-rate-calculator/

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
    • title: Day rate to salary calculator
  • hopi_dca_calculatorWork out the average cost basis across a series of pound-cost-averaged buys.No findings

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
    Description, as the server wrote it
    Work out the average cost basis across a series of pound-cost-averaged buys. Each buy is an amount of money spent and the price paid per unit. Returns total invested, coins acquired and average cost, plus current value and unrealised profit or loss if a current price is given. Figures are treated as GBP. Source: https://hopi.co.uk/dca-calculator/

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
    • title: Crypto DCA calculator
  • hopi_dice_rollerRoll one or more dice with a given number of sides.No findings

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
    Description, as the server wrote it
    Roll one or more dice with a given number of sides. Returns each die result plus the total, highest and lowest. Source: https://hopi.co.uk/dice-roller/

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
    • title: Dice roller
  • hopi_discount_calculatorWork out a discount and sale price.No findings

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
    Description, as the server wrote it
    Work out a discount and sale price. Mode 'pct': a percentage off a price. Mode 'fixed': a fixed pound amount off a price. Mode 'find': the discount percentage from an original price and a final price. All money figures are in pounds. Source: https://hopi.co.uk/discount-calculator/

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
    • title: Discount & sale price calculator
  • hopi_dog_age_calculatorConvert a dog's age in years to an approximate human age, using the standard veterinary chart.1 finding

    Why it is in this group

    • The description's first verb is "convert": a word for a change.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.

    Findings

    • Warn

      The server marks "hopi_dog_age_calculator" read-only (readOnlyHint: true), and its own name, description or input give the class "write".

      Matched text

      annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}; The description's first verb is "convert": a word for a change.

      What this check looks for
    Description, as the server wrote it
    Convert a dog's age in years to an approximate human age, using the standard veterinary chart. The later rate depends on the dog's size: small, medium or large. Returns the human-equivalent age. Source: https://hopi.co.uk/dog-age-calculator/

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
    • title: Dog age calculator
  • hopi_download_time_calculatorEstimate how long a download takes.No findings

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
    Description, as the server wrote it
    Estimate how long a download takes. Give a file size with its unit (MB, GB, TB) and a connection speed with its unit (Mbps or Gbps in bits per second, or MBps in bytes per second). Returns a human-readable duration and the time in seconds. Source: https://hopi.co.uk/download-time-calculator/

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
    • title: Download time calculator
  • hopi_due_date_calculatorEstimate a pregnancy due date from the first day of the last menstrual period (LMP) and cycle length.No findings

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
    Description, as the server wrote it
    Estimate a pregnancy due date from the first day of the last menstrual period (LMP) and cycle length. Method: adjust the LMP by (cycle - 28) days, then add 280 days for the due date. Also returns the dates the second and third trimesters begin (LMP-adjusted + 84 and + 182 days). Dates are ISO 'YYYY-MM-DD'. Source: https://hopi.co.uk/due-date-calculator/

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
    • title: Pregnancy due date calculator
  • hopi_dummy_data_generatorGenerate fake but safe UK test records.1 finding

    Why it is in this group

    • The description's first verb is "generate": a word for a change.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.

    Findings

    • Warn

      The server marks "hopi_dummy_data_generator" read-only (readOnlyHint: true), and its own name, description or input give the class "write".

      Matched text

      annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}; The description's first verb is "generate": a word for a change.

      What this check looks for
    Description, as the server wrote it
    Generate fake but safe UK test records. Phone numbers come from Ofcom's reserved drama ranges and emails use RFC 2606 example domains, so no record can reach a real person. Returns an array of records, plus CSV text. Source: https://hopi.co.uk/dummy-data-generator/

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
    • title: Dummy data generator
  • hopi_energy_cost_calculatorWork out the running cost of an electrical appliance from its power in watts, hours used per day and your electricity unit price in pence per kWh.No findings

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
    Description, as the server wrote it
    Work out the running cost of an electrical appliance from its power in watts, hours used per day and your electricity unit price in pence per kWh. Returns daily, weekly, monthly and yearly cost plus kWh used. Costs in GBP. Source: https://hopi.co.uk/energy-cost-calculator/

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
    • title: Energy running cost calculator
  • hopi_env_to_jsonConvert between a .env file and a JSON object.4 findings

    Why it is in this group

    • The description's first verb is "convert": a word for a change.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.

    Findings

    • High

      The description refers to ".env".

      Matched text

      description: "Convert between a .env file and a JSON object. In env-to-json..."

      What this check looks for
    • High

      The input schema at properties.mode.description refers to ".env".

      Matched text

      inputSchema.properties.mode.description: "'env-to-json' parses a .env file into JSON, 'json-to-env' turns a J..."

      What this check looks for
    • High

      The input schema at properties.text.description refers to ".env".

      Matched text

      inputSchema.properties.text.description: "The .env file text, or the JSON object text, dep..."

      What this check looks for
    • Warn

      The server marks "hopi_env_to_json" read-only (readOnlyHint: true), and its own name, description or input give the class "write".

      Matched text

      annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}; The description's first verb is "convert": a word for a change.

      What this check looks for
    Description, as the server wrote it
    Convert between a .env file and a JSON object. In env-to-json mode, each line is split on its first equals sign into a key and value, blank and commented lines are skipped, a leading export is removed, and matching surrounding quotes are stripped (double-quoted values also unescape \n); duplicate keys keep the last value. In json-to-env mode, a JSON object becomes KEY=value lines, quoting values that contain spaces, a hash or a newline. Source: https://hopi.co.uk/env-to-json/

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
    • title: env to JSON converter
  • hopi_eth_unit_converterConvert an amount given in wei, gwei or ETH into all three units, using exact 18-decimal integer maths (no floating point error).1 finding

    Why it is in this group

    • The description's first verb is "convert": a word for a change.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.

    Findings

    • Warn

      The server marks "hopi_eth_unit_converter" read-only (readOnlyHint: true), and its own name, description or input give the class "write".

      Matched text

      annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}; The description's first verb is "convert": a word for a change.

      What this check looks for
    Description, as the server wrote it
    Convert an amount given in wei, gwei or ETH into all three units, using exact 18-decimal integer maths (no floating point error). 1 ETH is 1e18 wei; 1 gwei is 1e9 wei. Source: https://hopi.co.uk/eth-unit-converter/

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
    • title: ETH unit converter
  • hopi_euromillions_generatorGenerate random EuroMillions lines.1 finding

    Why it is in this group

    • The description's first verb is "generate": a word for a change.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.

    Findings

    • Warn

      The server marks "hopi_euromillions_generator" read-only (readOnlyHint: true), and its own name, description or input give the class "write".

      Matched text

      annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}; The description's first verb is "generate": a word for a change.

      What this check looks for
    Description, as the server wrote it
    Generate random EuroMillions lines. Each line has 5 main numbers from 1 to 50 and 2 Lucky Stars from 1 to 12. Source: https://hopi.co.uk/euromillions-generator/

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
    • title: EuroMillions number generator
  • hopi_event_wine_calculatorWork out how many bottles of red, white and Champagne to buy for an event, from the number of guests and glasses per guest.No findings

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
    Description, as the server wrote it
    Work out how many bottles of red, white and Champagne to buy for an event, from the number of guests and glasses per guest. Ticking different wines splits a colour into one wine per glass, each poured once for every guest. Source: https://hopi.co.uk/event-wine-calculator/

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
    • title: Event wine calculator
  • hopi_fraction_calculatorAdd, subtract, multiply or divide two fractions, giving the simplified result, a mixed number where relevant, and the decimal value.1 finding

    Why it is in this group

    • The description's first verb is "add": a word for a change.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.

    Findings

    • Warn

      The server marks "hopi_fraction_calculator" read-only (readOnlyHint: true), and its own name, description or input give the class "write".

      Matched text

      annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}; The description's first verb is "add": a word for a change.

      What this check looks for
    Description, as the server wrote it
    Add, subtract, multiply or divide two fractions, giving the simplified result, a mixed number where relevant, and the decimal value. Each fraction is a numerator over a denominator, all whole numbers (numerators may be negative). Source: https://hopi.co.uk/fraction-calculator/

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
    • title: Fraction calculator
  • hopi_fraction_to_decimalConvert between fractions and decimals.1 finding

    Why it is in this group

    • The description's first verb is "convert": a word for a change.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.

    Findings

    • Warn

      The server marks "hopi_fraction_to_decimal" read-only (readOnlyHint: true), and its own name, description or input give the class "write".

      Matched text

      annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}; The description's first verb is "convert": a word for a change.

      What this check looks for
    Description, as the server wrote it
    Convert between fractions and decimals. Mode 'toDecimal': give a numerator and denominator (whole numbers) to get the decimal and percentage. Mode 'toFraction': give a decimal to get the closest simplified fraction (denominator up to 10,000), noting whether it is exact. Source: https://hopi.co.uk/fraction-to-decimal/

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
    • title: Fraction to decimal converter
  • hopi_fuel_cost_calculatorEstimate the fuel cost of a journey from the distance in miles, the car's fuel economy in miles per gallon (UK gallon) and the pump price in pence per litre.No findings

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
    Description, as the server wrote it
    Estimate the fuel cost of a journey from the distance in miles, the car's fuel economy in miles per gallon (UK gallon) and the pump price in pence per litre. Optionally double it for a return trip and split between passengers. Returns total cost, litres used and cost per person. Costs in GBP. Source: https://hopi.co.uk/fuel-cost-calculator/

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
    • title: Fuel cost calculator
  • hopi_hash_generatorCompute the SHA-256, SHA-1 or SHA-512 hash of a piece of text and return the hex digest.No findings

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
    Description, as the server wrote it
    Compute the SHA-256, SHA-1 or SHA-512 hash of a piece of text and return the hex digest. Uses WebCrypto on Hopi's server. SHA-1 is included for compatibility with older systems only and should not be used for anything new. Source: https://hopi.co.uk/hash-generator/

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
    • title: Hash generator
  • hopi_hash_identifierIdentify the most likely algorithms behind a hash string from its length, character set and any prefix.No findings

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
    Description, as the server wrote it
    Identify the most likely algorithms behind a hash string from its length, character set and any prefix. Covers MD5, NTLM, MD4, SHA-1, RIPEMD-160, SHA-224/256/384/512, the SHA3 family, CRC32, bcrypt, Argon2, sha512crypt, sha256crypt and md5crypt, plus Base64 length hints. A hash does not carry its algorithm, so results are ranked best guesses, not proof. Source: https://hopi.co.uk/hash-identifier/

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
    • title: Hash identifier
  • hopi_heart_rate_zonesEstimate maximum heart rate and five training zones (bpm) from age.No findings

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
    Description, as the server wrote it
    Estimate maximum heart rate and five training zones (bpm) from age. Max HR = 220 - age. Method 'max' uses percentages of max HR (50-60, 60-70, 70-80, 80-90, 90-100%). Method 'karvonen' uses heart rate reserve and needs restingHeartRate: zone = (maxHR - resting) x intensity + resting. Source: https://hopi.co.uk/heart-rate-zones/

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
    • title: Heart rate zone calculator
  • hopi_hex_to_rgbConvert a hex colour code (3, 6 or 8 digits, with or without a leading #) to its RGB and HSL values.1 finding

    Why it is in this group

    • The description's first verb is "convert": a word for a change.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.

    Findings

    • Warn

      The server marks "hopi_hex_to_rgb" read-only (readOnlyHint: true), and its own name, description or input give the class "write".

      Matched text

      annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}; The description's first verb is "convert": a word for a change.

      What this check looks for
    Description, as the server wrote it
    Convert a hex colour code (3, 6 or 8 digits, with or without a leading #) to its RGB and HSL values. Source: https://hopi.co.uk/hex-to-rgb/

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
    • title: Hex to RGB converter
  • hopi_hidden_character_checkerScan text for hidden and suspicious Unicode characters and return a cleaned copy.No findings

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
    Description, as the server wrote it
    Scan text for hidden and suspicious Unicode characters and return a cleaned copy. Finds zero-width space, joiner and non-joiner (U+200B to U+200D), word joiner U+2060, byte order mark U+FEFF, soft hyphen U+00AD, no-break and narrow no-break spaces, hair and thin spaces, bidirectional controls (U+202A to U+202E, U+2066 to U+2069), variation selectors, Unicode tag characters U+E0000 to U+E007F (the invisible prompt-injection carrier, decoded to readable text in tagText), control characters, every other default-ignorable or format character (for example the Khmer inherent vowels U+17B4 and U+17B5 used to pad AI text), and Latin words containing Cyrillic or Greek lookalike letters. Curly quotes and dashes are reported separately as stylistic, not hidden. The cleaned text removes the invisible characters, turns special spaces into ordinary spaces and keeps zero-width joiners and selectors that form emoji. It cannot detect statistical AI watermarks such as SynthID-Text, which live in word choice. Source: https://hopi.co.uk/hidden-character-checker/

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
    • title: Hidden character and AI watermark checker
  • hopi_holiday_entitlement_calculatorWork out UK statutory paid holiday entitlement from the number of days worked per week, using 5.6 weeks a year capped at the statutory 28 days.No findings

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
    Description, as the server wrote it
    Work out UK statutory paid holiday entitlement from the number of days worked per week, using 5.6 weeks a year capped at the statutory 28 days. Optionally scale to a part-year by the number of months worked. Returns entitlement in days and weeks. Source: https://hopi.co.uk/holiday-entitlement-calculator/

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
    • title: Holiday entitlement calculator
  • hopi_hourly_to_salaryConvert between an hourly pay rate and an annual salary based on hours worked per week (52 weeks a year).1 finding

    Why it is in this group

    • The description's first verb is "convert": a word for a change.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.

    Findings

    • Warn

      The server marks "hopi_hourly_to_salary" read-only (readOnlyHint: true), and its own name, description or input give the class "write".

      Matched text

      annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}; The description's first verb is "convert": a word for a change.

      What this check looks for
    Description, as the server wrote it
    Convert between an hourly pay rate and an annual salary based on hours worked per week (52 weeks a year). Mode 'to_salary' turns an hourly rate into annual, monthly and weekly pay; mode 'to_hourly' turns a salary into an hourly rate. Gross amounts in GBP, before tax. Source: https://hopi.co.uk/hourly-to-salary/

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
    • title: Hourly wage to salary converter
  • hopi_hours_calculatorWork out the hours worked between a start time and an end time, minus an optional unpaid break.No findings

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
    Description, as the server wrote it
    Work out the hours worked between a start time and an end time, minus an optional unpaid break. Times use 24-hour HH:MM format. Handles overnight shifts where the end time is earlier than the start. Returns the worked time as hours and minutes and as decimal hours. Source: https://hopi.co.uk/hours-calculator/

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
    • title: Hours calculator
  • hopi_hsl_converterConvert a hex colour code to hue, saturation and lightness (HSL), or convert HSL values to hex and RGB.1 finding

    Why it is in this group

    • The description's first verb is "convert": a word for a change.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.

    Findings

    • Warn

      The server marks "hopi_hsl_converter" read-only (readOnlyHint: true), and its own name, description or input give the class "write".

      Matched text

      annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}; The description's first verb is "convert": a word for a change.

      What this check looks for
    Description, as the server wrote it
    Convert a hex colour code to hue, saturation and lightness (HSL), or convert HSL values to hex and RGB. Source: https://hopi.co.uk/hsl-converter/

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
    • title: HSL converter
  • hopi_html_escapeEscape the five special HTML characters (& < > " ') into entities so text is safe to place in HTML, or unescape named and numeric HTML entities back into plain characters.No findings

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
    Description, as the server wrote it
    Escape the five special HTML characters (& < > " ') into entities so text is safe to place in HTML, or unescape named and numeric HTML entities back into plain characters. Source: https://hopi.co.uk/html-escape/

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
    • title: HTML escape & unescape
  • hopi_ics_generatorBuild a .ics (iCalendar, RFC 5545) calendar file for a single event and return the file text.No findings

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
    Description, as the server wrote it
    Build a .ics (iCalendar, RFC 5545) calendar file for a single event and return the file text. Give a title, startDate and endDate as 'YYYY-MM-DD'. For timed events give startTime and endTime as 'HH:MM' (24-hour, read in the caller's local time zone and stored as UTC); set allDay true for an all-day event instead. Location and description are optional. Returns the .ics text ready to save. Source: https://hopi.co.uk/ics-generator/

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
    • title: Add to calendar file generator
  • hopi_inflation_calculatorAdjust a money amount for UK inflation.No findings

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
    Description, as the server wrote it
    Adjust a money amount for UK inflation. Mode 'cpi' uses the ONS monthly CPI index (2015 = 100) between two months from January 1988 to August 2026 and returns the adjusted value, total change and average annual rate. Mode 'custom' compounds a chosen annual rate over a number of years. Amounts in GBP. Source: https://hopi.co.uk/inflation-calculator/

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
    • title: UK inflation calculator
  • hopi_json_formatterPretty print, minify or validate JSON.No findings

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
    Description, as the server wrote it
    Pretty print, minify or validate JSON. Formatting and minifying only change whitespace; key order, values and structure stay exactly as they were. Returns the output text or a clear parse error. Source: https://hopi.co.uk/json-formatter/

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
    • title: JSON formatter
  • hopi_json_to_csvConvert a JSON array of objects into CSV.1 finding

    Why it is in this group

    • The description's first verb is "convert": a word for a change.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.

    Findings

    • Warn

      The server marks "hopi_json_to_csv" read-only (readOnlyHint: true), and its own name, description or input give the class "write".

      Matched text

      annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}; The description's first verb is "convert": a word for a change.

      What this check looks for
    Description, as the server wrote it
    Convert a JSON array of objects into CSV. The union of all keys becomes the header row in first-seen order, missing keys become empty cells, and nested objects or arrays are written back as compact JSON in the cell. Output follows RFC 4180 quoting. Source: https://hopi.co.uk/json-to-csv/

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
    • title: JSON to CSV converter
  • hopi_json_to_typescriptConvert a JSON sample into TypeScript interfaces and types.1 finding

    Why it is in this group

    • The description's first verb is "convert": a word for a change.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.

    Findings

    • Warn

      The server marks "hopi_json_to_typescript" read-only (readOnlyHint: true), and its own name, description or input give the class "write".

      Matched text

      annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}; The description's first verb is "convert": a word for a change.

      What this check looks for
    Description, as the server wrote it
    Convert a JSON sample into TypeScript interfaces and types. Objects become named interfaces (PascalCase from their key), nested objects get their own interfaces, arrays become element-type arrays with keys merged across all elements (keys missing from some elements are marked optional), and null values are folded into unions such as string | null. Empty arrays become unknown[] and empty objects become Record<string, unknown>. Runs on Hopi's server; nothing is stored. Source: https://hopi.co.uk/json-to-typescript/

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
    • title: JSON to TypeScript converter
  • hopi_json_yaml_converterConvert data between JSON and YAML in both directions.1 finding

    Why it is in this group

    • The description's first verb is "convert": a word for a change.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.

    Findings

    • Warn

      The server marks "hopi_json_yaml_converter" read-only (readOnlyHint: true), and its own name, description or input give the class "write".

      Matched text

      annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}; The description's first verb is "convert": a word for a change.

      What this check looks for
    Description, as the server wrote it
    Convert data between JSON and YAML in both directions. JSON to YAML parses with JSON.parse and serialises with js-yaml at two-space indent; YAML to JSON parses with js-yaml and prints with JSON.stringify. Runs on Hopi's server; nothing is stored. Source: https://hopi.co.uk/json-yaml-converter/

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
    • title: JSON to YAML converter
  • hopi_jwt_decoderDecode a JSON Web Token's header and payload from base64url.No findings

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
    Description, as the server wrote it
    Decode a JSON Web Token's header and payload from base64url. The signature is never verified, so a decoded claim proves nothing on its own. Reports the algorithm, the exp, iat and nbf time claims, and whether the token is expired. A leading Bearer prefix and whitespace are handled. Source: https://hopi.co.uk/jwt-decoder/

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
    • title: JWT decoder
  • hopi_kg_to_lbsConvert a weight in kilograms to pounds (avoirdupois lb), with the answer also split into whole pounds and ounces.1 finding

    Why it is in this group

    • The description's first verb is "convert": a word for a change.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.

    Findings

    • Warn

      The server marks "hopi_kg_to_lbs" read-only (readOnlyHint: true), and its own name, description or input give the class "write".

      Matched text

      annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}; The description's first verb is "convert": a word for a change.

      What this check looks for
    Description, as the server wrote it
    Convert a weight in kilograms to pounds (avoirdupois lb), with the answer also split into whole pounds and ounces. Uses exactly 0.45359237 kg per pound and 16 ounces per pound. Source: https://hopi.co.uk/kg-to-lbs/

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
    • title: Kg to lbs converter
  • hopi_kg_to_stoneConvert a weight in kilograms to UK stone and pounds.1 finding

    Why it is in this group

    • The description's first verb is "convert": a word for a change.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.

    Findings

    • Warn

      The server marks "hopi_kg_to_stone" read-only (readOnlyHint: true), and its own name, description or input give the class "write".

      Matched text

      annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}; The description's first verb is "convert": a word for a change.

      What this check looks for
    Description, as the server wrote it
    Convert a weight in kilograms to UK stone and pounds. Returns whole stone plus remaining pounds, and the totals in pounds and decimal stone. Source: https://hopi.co.uk/kg-to-stone/

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
    • title: Kg to stone converter
  • hopi_lbs_to_kgConvert a weight in pounds (avoirdupois lb) to kilograms and grams, with the UK stones-and-pounds form alongside.1 finding

    Why it is in this group

    • The description's first verb is "convert": a word for a change.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.

    Findings

    • Warn

      The server marks "hopi_lbs_to_kg" read-only (readOnlyHint: true), and its own name, description or input give the class "write".

      Matched text

      annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}; The description's first verb is "convert": a word for a change.

      What this check looks for
    Description, as the server wrote it
    Convert a weight in pounds (avoirdupois lb) to kilograms and grams, with the UK stones-and-pounds form alongside. Uses exactly 0.45359237 kg per pound and 14 pounds per stone. Source: https://hopi.co.uk/lbs-to-kg/

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
    • title: Lbs to kg converter
  • hopi_leap_year_checkerCheck whether a year is a leap year, applying the divisible-by-4, century, and divisible-by-400 rules.No findings

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
    Description, as the server wrote it
    Check whether a year is a leap year, applying the divisible-by-4, century, and divisible-by-400 rules. Returns the verdict, the divisibility tests, and the next and previous leap years. Source: https://hopi.co.uk/leap-year-checker/

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
    • title: Leap year checker
  • hopi_litres_to_pintsConvert between litres and pints.1 finding

    Why it is in this group

    • The description's first verb is "convert": a word for a change.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.

    Findings

    • Warn

      The server marks "hopi_litres_to_pints" read-only (readOnlyHint: true), and its own name, description or input give the class "write".

      Matched text

      annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}; The description's first verb is "convert": a word for a change.

      What this check looks for
    Description, as the server wrote it
    Convert between litres and pints. Direction 'litres-to-pints' takes litres and returns UK pints, US pints and millilitres. Direction 'pints-to-litres' takes UK pints and returns litres. Source: https://hopi.co.uk/litres-to-pints/

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
    • title: Litres to pints converter
  • hopi_loan_calculatorWork out the monthly repayment on a loan from the amount borrowed, the annual interest rate and the term in years, using the standard amortising formula.No findings

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
    Description, as the server wrote it
    Work out the monthly repayment on a loan from the amount borrowed, the annual interest rate and the term in years, using the standard amortising formula. Returns the monthly payment, total repaid and total interest. Amounts in GBP. Source: https://hopi.co.uk/loan-calculator/

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
    • title: Loan repayment calculator
  • hopi_lookalike_domain_generatorGenerate the lookalike variants of a domain that could be used to impersonate it, grouped by technique, as a defensive typosquat check.1 finding

    Why it is in this group

    • The description's first verb is "generate": a word for a change.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.

    Findings

    • Warn

      The server marks "hopi_lookalike_domain_generator" read-only (readOnlyHint: true), and its own name, description or input give the class "write".

      Matched text

      annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}; The description's first verb is "generate": a word for a change.

      What this check looks for
    Description, as the server wrote it
    Generate the lookalike variants of a domain that could be used to impersonate it, grouped by technique, as a defensive typosquat check. Techniques: omission (missing character), repetition (doubled character), transposition (swapped adjacent), keyboard (QWERTY neighbour), vowel (vowel swap), homoglyph (ASCII lookalikes such as rn for m, vv for w, cl for d, 0 for o, 1 for l), confusable (Cyrillic or Greek letters, shown with the xn-- punycode form), hyphenation, subdomain (prefix and subdomain tricks using the reserved .example ending), and tld (different endings such as .com, .co.uk, .uk, .org, .net, .io, .app, .co). Two-part endings like co.uk are recognised. Each variant carries its punycode (IDNA ASCII) form. The list is deduplicated and capped at 500. No availability, DNS or WHOIS check is made; it only says what could be registered, not what is. Source: https://hopi.co.uk/lookalike-domain-generator/

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
    • title: Lookalike domain generator
  • hopi_lorem_ipsum_generatorGenerate lorem ipsum placeholder text.1 finding

    Why it is in this group

    • The description's first verb is "generate": a word for a change.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.

    Findings

    • Warn

      The server marks "hopi_lorem_ipsum_generator" read-only (readOnlyHint: true), and its own name, description or input give the class "write".

      Matched text

      annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}; The description's first verb is "generate": a word for a change.

      What this check looks for
    Description, as the server wrote it
    Generate lorem ipsum placeholder text. Choose whether the count is a number of paragraphs, sentences or words, and how many. Limits are 100 paragraphs, 500 sentences or 2000 words. Source: https://hopi.co.uk/lorem-ipsum-generator/

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
    • title: Lorem ipsum generator
  • hopi_lottery_number_generatorGenerate random lines for a UK lottery game: Lotto (6 numbers from 1 to 59), Thunderball (5 from 1 to 39 plus a Thunderball from 1 to 14) or Set For Life (5 from 1 to 47 plus a Lif…1 finding

    Why it is in this group

    • The description's first verb is "generate": a word for a change.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.

    Findings

    • Warn

      The server marks "hopi_lottery_number_generator" read-only (readOnlyHint: true), and its own name, description or input give the class "write".

      Matched text

      annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}; The description's first verb is "generate": a word for a change.

      What this check looks for
    Description, as the server wrote it
    Generate random lines for a UK lottery game: Lotto (6 numbers from 1 to 59), Thunderball (5 from 1 to 39 plus a Thunderball from 1 to 14) or Set For Life (5 from 1 to 47 plus a Life Ball from 1 to 10). Source: https://hopi.co.uk/lottery-number-generator/

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
    • title: Lottery number generator
  • hopi_magic_8_ballAsk the Magic 8 Ball a yes or no question and receive one of its twenty classic answers at random.No findings

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
    Description, as the server wrote it
    Ask the Magic 8 Ball a yes or no question and receive one of its twenty classic answers at random. Returns the answer. Source: https://hopi.co.uk/magic-8-ball/

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
    • title: Magic 8 ball
  • hopi_margin_calculatorWork out profit, gross margin and markup from a cost price and a selling price.No findings

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
    Description, as the server wrote it
    Work out profit, gross margin and markup from a cost price and a selling price. Margin is profit as a percentage of the selling price; markup is profit as a percentage of the cost. Amounts in GBP. Source: https://hopi.co.uk/margin-calculator/

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
    • title: Margin & markup calculator
  • hopi_markdown_previewerRender a small, safe subset of markdown to HTML: headings (# to ###), bold, italic, links (http, https or mailto only), inline code, fenced code blocks, bulleted and numbered lists…No findings

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
    Description, as the server wrote it
    Render a small, safe subset of markdown to HTML: headings (# to ###), bold, italic, links (http, https or mailto only), inline code, fenced code blocks, bulleted and numbered lists, and blockquotes. Every character is HTML-escaped first, so raw HTML is shown as text and never executed. Source: https://hopi.co.uk/markdown-previewer/

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
    • title: Markdown previewer
  • hopi_market_cap_calculatorCalculate a coin's market cap (price times circulating supply) and fully diluted valuation, or work backwards to the price implied by a target market cap.No findings

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
    Description, as the server wrote it
    Calculate a coin's market cap (price times circulating supply) and fully diluted valuation, or work backwards to the price implied by a target market cap. Works in any currency; nothing is looked up. Source: https://hopi.co.uk/market-cap-calculator/

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
    • title: Market cap calculator
  • hopi_meta_tag_generatorBuild a complete HTML head snippet from page details: title, meta description, canonical link, Open Graph and Twitter card tags.No findings

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
    Description, as the server wrote it
    Build a complete HTML head snippet from page details: title, meta description, canonical link, Open Graph and Twitter card tags. Returns the ready-to-paste snippet plus character counts. Source: https://hopi.co.uk/meta-tag-generator/

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
    • title: Meta tag generator
  • hopi_miles_to_kmConvert between miles and kilometres.1 finding

    Why it is in this group

    • The description's first verb is "convert": a word for a change.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.

    Findings

    • Warn

      The server marks "hopi_miles_to_km" read-only (readOnlyHint: true), and its own name, description or input give the class "write".

      Matched text

      annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}; The description's first verb is "convert": a word for a change.

      What this check looks for
    Description, as the server wrote it
    Convert between miles and kilometres. Direction 'miles-to-km' takes miles and returns kilometres. Direction 'km-to-miles' takes kilometres and returns miles. Source: https://hopi.co.uk/miles-to-km/

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
    • title: Miles to km converter
  • hopi_military_time_converterConvert between 24-hour (military) time and 12-hour clock time.1 finding

    Why it is in this group

    • The description's first verb is "convert": a word for a change.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.

    Findings

    • Warn

      The server marks "hopi_military_time_converter" read-only (readOnlyHint: true), and its own name, description or input give the class "write".

      Matched text

      annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}; The description's first verb is "convert": a word for a change.

      What this check looks for
    Description, as the server wrote it
    Convert between 24-hour (military) time and 12-hour clock time. Direction '24h-to-12h' takes a 24-hour time like '1430' or '14:30'. Direction '12h-to-24h' takes a 12-hour time like '2:30' with a meridiem of am or pm (the meridiem can also be written in the time string). Source: https://hopi.co.uk/military-time-converter/

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
    • title: Military time converter
  • hopi_minutes_to_hoursConvert a number of minutes into hours and minutes, or convert hours (plus optional extra minutes) into total minutes.1 finding

    Why it is in this group

    • The description's first verb is "convert": a word for a change.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.

    Findings

    • Warn

      The server marks "hopi_minutes_to_hours" read-only (readOnlyHint: true), and its own name, description or input give the class "write".

      Matched text

      annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}; The description's first verb is "convert": a word for a change.

      What this check looks for
    Description, as the server wrote it
    Convert a number of minutes into hours and minutes, or convert hours (plus optional extra minutes) into total minutes. Set mode to 'minutesToHours' or 'hoursToMinutes'. Returns a clock-style breakdown and decimal hours. Source: https://hopi.co.uk/minutes-to-hours/

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
    • title: Minutes to hours converter
  • hopi_moon_phase_calculatorWork out the moon phase for a date, based on the synodic month since a known new moon.No findings

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
    Description, as the server wrote it
    Work out the moon phase for a date, based on the synodic month since a known new moon. Dates use the YYYY-MM-DD format and default to today. Returns the phase name, illuminated percentage, moon age in days, and the next full and new moons. Source: https://hopi.co.uk/moon-phase-calculator/

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
    • title: Moon phase calculator
  • hopi_morse_code_translatorTranslate text into international Morse code, or Morse code back into text.No findings

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
    Description, as the server wrote it
    Translate text into international Morse code, or Morse code back into text. Letters are separated by spaces and words by a forward slash. When decoding, underscores are treated as dashes and pipes as word separators. Unknown Morse sequences appear as # in the output. Source: https://hopi.co.uk/morse-code-translator/

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
    • title: Morse code translator
  • hopi_mortgage_calculatorWork out the monthly payment on a repayment mortgage at a constant interest rate, using the standard amortising formula.No findings

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
    Description, as the server wrote it
    Work out the monthly payment on a repayment mortgage at a constant interest rate, using the standard amortising formula. Returns the monthly payment, total repaid and total interest. Fees and rate changes are not included. Amounts in GBP. Source: https://hopi.co.uk/mortgage-calculator/

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
    • title: Mortgage repayment calculator
  • hopi_mortgage_overpayment_calculatorSee how much time and interest a regular monthly overpayment saves on a repayment mortgage.No findings

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
    Description, as the server wrote it
    See how much time and interest a regular monthly overpayment saves on a repayment mortgage. Give the current balance, annual rate, remaining term in years and the extra amount paid each month. Returns the time saved, interest saved, new payoff time and the monthly payment. Amounts in GBP. Source: https://hopi.co.uk/mortgage-overpayment-calculator/

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
    • title: Mortgage overpayment calculator
  • hopi_mpg_converterConvert fuel economy between UK miles per gallon and litres per 100 km.1 finding

    Why it is in this group

    • The description's first verb is "convert": a word for a change.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.

    Findings

    • Warn

      The server marks "hopi_mpg_converter" read-only (readOnlyHint: true), and its own name, description or input give the class "write".

      Matched text

      annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}; The description's first verb is "convert": a word for a change.

      What this check looks for
    Description, as the server wrote it
    Convert fuel economy between UK miles per gallon and litres per 100 km. Direction 'mpg-to-l100' takes UK mpg. Direction 'l100-to-mpg' takes litres per 100 km. Also returns US mpg, km per litre and miles per litre. Source: https://hopi.co.uk/mpg-converter/

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
    • title: MPG converter
  • hopi_national_insurance_calculatorWork out UK employee Class 1 National Insurance for the 2026/27 tax year from an annual gross salary.No findings

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
    Description, as the server wrote it
    Work out UK employee Class 1 National Insurance for the 2026/27 tax year from an annual gross salary. Uses the primary threshold of £12,570, upper earnings limit of £50,270, 8% between them and 2% above. Returns NI due per year, month and week plus the effective rate. Amounts in GBP. Source: https://hopi.co.uk/national-insurance-calculator/

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
    • title: National Insurance calculator
  • hopi_nato_phonetic_alphabetSpell text out using the NATO phonetic alphabet (Alfa, Bravo, Charlie and so on), or convert a phonetic spelling back into plain text.No findings

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
    Description, as the server wrote it
    Spell text out using the NATO phonetic alphabet (Alfa, Bravo, Charlie and so on), or convert a phonetic spelling back into plain text. Spaces become (space). When converting back, common variants such as Alpha, Juliet, Xray, Niner and Fife are accepted; unrecognised words appear as #. Source: https://hopi.co.uk/nato-phonetic-alphabet/

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
    • title: NATO phonetic alphabet translator
  • hopi_net_to_grossWork out the gross salary needed to achieve a desired take-home (net) pay for the 2026/27 tax year in England, Wales and Northern Ireland, using code 1257L income tax bands with pe…No findings

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
    Description, as the server wrote it
    Work out the gross salary needed to achieve a desired take-home (net) pay for the 2026/27 tax year in England, Wales and Northern Ireland, using code 1257L income tax bands with personal allowance taper and employee National Insurance. Give the net figure as yearly or monthly. Returns the required gross, tax and NI. Amounts in GBP. Source: https://hopi.co.uk/net-to-gross/

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
    • title: Net to gross salary calculator
  • hopi_number_base_converterConvert a whole number from one base to another between binary, octal, decimal and hexadecimal.1 finding

    Why it is in this group

    • The description's first verb is "convert": a word for a change.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.

    Findings

    • Warn

      The server marks "hopi_number_base_converter" read-only (readOnlyHint: true), and its own name, description or input give the class "write".

      Matched text

      annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}; The description's first verb is "convert": a word for a change.

      What this check looks for
    Description, as the server wrote it
    Convert a whole number from one base to another between binary, octal, decimal and hexadecimal. Uses BigInt so values of any size convert exactly. Returns the value in the requested base plus all four bases. Source: https://hopi.co.uk/number-base-converter/

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
    • title: Number base converter
  • hopi_number_to_wordsConvert a number into written English words.1 finding

    Why it is in this group

    • The description's first verb is "convert": a word for a change.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.

    Findings

    • Warn

      The server marks "hopi_number_to_words" read-only (readOnlyHint: true), and its own name, description or input give the class "write".

      Matched text

      annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}; The description's first verb is "convert": a word for a change.

      What this check looks for
    Description, as the server wrote it
    Convert a number into written English words. Set currency to true to write it as UK pounds and pence (cheque style, ending 'only'). Supports up to 999,999,999,999 with decimals to two places. Source: https://hopi.co.uk/number-to-words/

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
    • title: Number to words converter
  • hopi_oven_temperature_converterConvert an oven temperature.1 finding

    Why it is in this group

    • The description's first verb is "convert": a word for a change.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.

    Findings

    • Warn

      The server marks "hopi_oven_temperature_converter" read-only (readOnlyHint: true), and its own name, description or input give the class "write".

      Matched text

      annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}; The description's first verb is "convert": a word for a change.

      What this check looks for
    Description, as the server wrote it
    Convert an oven temperature. Scale 'c' is conventional Celsius, 'fan' is fan/convection Celsius, 'f' is Fahrenheit, 'gas' is UK gas mark (1 to 9). Returns conventional Celsius, fan Celsius, Fahrenheit and the nearest gas mark. Source: https://hopi.co.uk/oven-temperature-converter/

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
    • title: Oven temperature converter
  • hopi_password_strength_checkerEstimate how strong a password is: an entropy estimate in bits, a rough offline crack time (assuming ten billion guesses a second), a 0 to 4 score with a verdict, and warnings abou…No findings

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
    Description, as the server wrote it
    Estimate how strong a password is: an entropy estimate in bits, a rough offline crack time (assuming ten billion guesses a second), a 0 to 4 score with a verdict, and warnings about weak patterns such as dictionary words, sequences and repeats. Source: https://hopi.co.uk/password-strength-checker/

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
    • title: Password strength checker
  • hopi_percentage_decrease_calculatorDecrease a number by a percentage and see the new value and the amount taken off.No findings

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
    Description, as the server wrote it
    Decrease a number by a percentage and see the new value and the amount taken off. For example, 250 decreased by 15 percent. Source: https://hopi.co.uk/percentage-decrease-calculator/

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
    • title: Percentage decrease calculator
  • hopi_percentage_difference_calculatorWork out the percentage difference between two values using the average-based formula: the absolute gap divided by the average of the two, times 100.No findings

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
    Description, as the server wrote it
    Work out the percentage difference between two values using the average-based formula: the absolute gap divided by the average of the two, times 100. The result is symmetric, so the order of the two values does not matter. Source: https://hopi.co.uk/percentage-difference-calculator/

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
    • title: Percentage difference calculator
  • hopi_percentage_increase_calculatorIncrease a number by a percentage and see the new value and the amount added.No findings

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
    Description, as the server wrote it
    Increase a number by a percentage and see the new value and the amount added. For example, 250 increased by 15 percent. Source: https://hopi.co.uk/percentage-increase-calculator/

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
    • title: Percentage increase calculator
  • hopi_position_size_calculatorWork out how large a position to take so that hitting the stop-loss loses only a chosen percentage of the account.No findings

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
    Description, as the server wrote it
    Work out how large a position to take so that hitting the stop-loss loses only a chosen percentage of the account. Enter account size, risk percentage, entry price and stop-loss price. Returns units to buy, position value, amount at risk and stop distance. Figures are treated as GBP. Source: https://hopi.co.uk/position-size-calculator/

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
    • title: Position size calculator
  • hopi_prime_factorisation_calculatorCheck whether a whole number (2 to 1,000,000,000,000,000) is prime, break it into its prime factors in power form, count its divisors, and list them.No findings

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
    Description, as the server wrote it
    Check whether a whole number (2 to 1,000,000,000,000,000) is prime, break it into its prime factors in power form, count its divisors, and list them. Uses trial division. Source: https://hopi.co.uk/prime-factorisation-calculator/

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
    • title: Prime number & factor calculator
  • hopi_pro_rata_salary_calculatorWork out a pro rata salary for part-time hours by scaling a full-time salary by the ratio of your hours to full-time hours.No findings

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
    Description, as the server wrote it
    Work out a pro rata salary for part-time hours by scaling a full-time salary by the ratio of your hours to full-time hours. Returns the pro rata yearly, monthly and weekly pay and the fraction of full-time. Amounts in GBP, gross before tax. Source: https://hopi.co.uk/pro-rata-salary-calculator/

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
    • title: Pro-rata salary calculator
  • hopi_product_feed_generatorTurn product rows into a platform-valid product feed: Meta (Facebook and Instagram) RSS 2.0, Google Merchant RSS 2.0, Atom 1.0 or generic RSS 2.0, using the g: namespace where the …No findings

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
    Description, as the server wrote it
    Turn product rows into a platform-valid product feed: Meta (Facebook and Instagram) RSS 2.0, Google Merchant RSS 2.0, Atom 1.0 or generic RSS 2.0, using the g: namespace where the platform expects it. Each row is validated (required fields, price as 12.99 GBP, availability and condition values, http links, unique ids); rows that fail are skipped and listed. Returns the XML, counts and errors. Source: https://hopi.co.uk/product-feed-generator/

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
    • title: Product feed generator
  • hopi_random_colour_generatorGenerate a random colour and return its hex, RGB and HSL values.1 finding

    Why it is in this group

    • The description's first verb is "generate": a word for a change.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.

    Findings

    • Warn

      The server marks "hopi_random_colour_generator" read-only (readOnlyHint: true), and its own name, description or input give the class "write".

      Matched text

      annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}; The description's first verb is "generate": a word for a change.

      What this check looks for
    Description, as the server wrote it
    Generate a random colour and return its hex, RGB and HSL values. Each of the red, green and blue channels gets an independent value from 0 to 255. Source: https://hopi.co.uk/random-colour-generator/

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
    • title: Random colour generator
  • hopi_random_coordinatesGenerate random geographic coordinates that are uniform by surface area across the globe (points are not bunched at the poles).1 finding

    Why it is in this group

    • The description's first verb is "generate": a word for a change.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.

    Findings

    • Warn

      The server marks "hopi_random_coordinates" read-only (readOnlyHint: true), and its own name, description or input give the class "write".

      Matched text

      annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}; The description's first verb is "generate": a word for a change.

      What this check looks for
    Description, as the server wrote it
    Generate random geographic coordinates that are uniform by surface area across the globe (points are not bunched at the poles). Returns latitude and longitude in decimal degrees. Source: https://hopi.co.uk/random-coordinates/

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
    • title: Random coordinates generator
  • hopi_random_letter_generatorGenerate random letters from the alphabet, optionally limited to vowels or consonants.1 finding

    Why it is in this group

    • The description's first verb is "generate": a word for a change.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.

    Findings

    • Warn

      The server marks "hopi_random_letter_generator" read-only (readOnlyHint: true), and its own name, description or input give the class "write".

      Matched text

      annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}; The description's first verb is "generate": a word for a change.

      What this check looks for
    Description, as the server wrote it
    Generate random letters from the alphabet, optionally limited to vowels or consonants. Returns the letters as a list. Source: https://hopi.co.uk/random-letter-generator/

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
    • title: Random letter generator
  • hopi_random_number_generatorGenerate one or more random whole numbers within a range (inclusive), optionally with no repeats.1 finding

    Why it is in this group

    • The description's first verb is "generate": a word for a change.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.

    Findings

    • Warn

      The server marks "hopi_random_number_generator" read-only (readOnlyHint: true), and its own name, description or input give the class "write".

      Matched text

      annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}; The description's first verb is "generate": a word for a change.

      What this check looks for
    Description, as the server wrote it
    Generate one or more random whole numbers within a range (inclusive), optionally with no repeats. Returns the numbers as a list. Source: https://hopi.co.uk/random-number-generator/

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
    • title: Random number generator
  • hopi_random_team_generatorShuffle a list of names and deal them evenly into a set number of teams.No findings

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
    Description, as the server wrote it
    Shuffle a list of names and deal them evenly into a set number of teams. Returns each team's members. Source: https://hopi.co.uk/random-team-generator/

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
    • title: Random team generator
  • hopi_random_word_generatorGenerate random everyday English nouns, with no repeats.1 finding

    Why it is in this group

    • The description's first verb is "generate": a word for a change.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.

    Findings

    • Warn

      The server marks "hopi_random_word_generator" read-only (readOnlyHint: true), and its own name, description or input give the class "write".

      Matched text

      annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}; The description's first verb is "generate": a word for a change.

      What this check looks for
    Description, as the server wrote it
    Generate random everyday English nouns, with no repeats. Returns the words as a list. Source: https://hopi.co.uk/random-word-generator/

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
    • title: Random word generator
  • hopi_ratio_calculatorWork with ratios.No findings

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
    Description, as the server wrote it
    Work with ratios. Mode 'simplify': reduce a ratio a : b to its lowest terms, and give the 1 : n form and the decimal a / b. Mode 'solve': find the missing value x in the equivalent ratio a : b = c : x using cross multiplication. All inputs must be positive. Source: https://hopi.co.uk/ratio-calculator/

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
    • title: Ratio calculator
  • hopi_reading_time_calculatorEstimate how long a block of text takes to read.No findings

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
    Description, as the server wrote it
    Estimate how long a block of text takes to read. Returns a silent reading time (225 words per minute) and a read-aloud time (130 words per minute), along with the word count. Source: https://hopi.co.uk/reading-time-calculator/

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
    • title: Reading time calculator
  • hopi_reverse_textReverse text in one of three ways.No findings

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
    Description, as the server wrote it
    Reverse text in one of three ways. 'characters' reverses the entire text character by character. 'words' reverses the order of words on each line. 'each' keeps the word order but reverses the letters within each word. Source: https://hopi.co.uk/reverse-text/

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
    • title: Reverse text generator
  • hopi_rgb_to_hexConvert red, green and blue values (each a whole number from 0 to 255) to an uppercase hex colour code.1 finding

    Why it is in this group

    • The description's first verb is "convert": a word for a change.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.

    Findings

    • Warn

      The server marks "hopi_rgb_to_hex" read-only (readOnlyHint: true), and its own name, description or input give the class "write".

      Matched text

      annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}; The description's first verb is "convert": a word for a change.

      What this check looks for
    Description, as the server wrote it
    Convert red, green and blue values (each a whole number from 0 to 255) to an uppercase hex colour code. Source: https://hopi.co.uk/rgb-to-hex/

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
    • title: RGB to hex converter
  • hopi_ring_size_converterConvert a ring size between UK, US and millimetre scales.1 finding

    Why it is in this group

    • The description's first verb is "convert": a word for a change.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.

    Findings

    • Warn

      The server marks "hopi_ring_size_converter" read-only (readOnlyHint: true), and its own name, description or input give the class "write".

      Matched text

      annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}; The description's first verb is "convert": a word for a change.

      What this check looks for
    Description, as the server wrote it
    Convert a ring size between UK, US and millimetre scales. Mode 'uk' takes a UK letter F to Z (add 1/2 for half sizes, e.g. 'N' or 'N 1/2'). Mode 'us' takes a US number 2.75 to 12.75. Mode 'mm' takes an inside circumference in mm (about 44 to 69). Returns UK size, US size, circumference and inside diameter. Source: https://hopi.co.uk/ring-size-converter/

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
    • title: Ring size converter
  • hopi_robots_txt_generatorBuild a robots.txt file from allow and disallow rules grouped by user agent, with an optional sitemap line.No findings

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
    Description, as the server wrote it
    Build a robots.txt file from allow and disallow rules grouped by user agent, with an optional sitemap line. You can pass a preset ('allow' all, 'block' all, 'wordpress') or your own rules array. Source: https://hopi.co.uk/robots-txt-generator/

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
    • title: Robots.txt generator
  • hopi_roman_numerals_converterConvert between numbers and Roman numerals, both directions, for whole numbers from 1 to 3999.1 finding

    Why it is in this group

    • The description's first verb is "convert": a word for a change.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.

    Findings

    • Warn

      The server marks "hopi_roman_numerals_converter" read-only (readOnlyHint: true), and its own name, description or input give the class "write".

      Matched text

      annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}; The description's first verb is "convert": a word for a change.

      What this check looks for
    Description, as the server wrote it
    Convert between numbers and Roman numerals, both directions, for whole numbers from 1 to 3999. Give a number (e.g. 2026) to get its numeral, or a Roman numeral (e.g. MMXXVI) to get the number. The direction is detected automatically from the input. Source: https://hopi.co.uk/roman-numerals-converter/

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
    • title: Roman numerals converter
  • hopi_rounding_calculatorRound a number to a chosen number of decimal places or significant figures, with halves always rounded up (away from zero).No findings

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
    Description, as the server wrote it
    Round a number to a chosen number of decimal places or significant figures, with halves always rounded up (away from zero). Mode 'dp': decimal places, 0 to 12. Mode 'sf': significant figures, 1 to 15. Source: https://hopi.co.uk/rounding-calculator/

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
    • title: Rounding & significant figures calculator
  • hopi_running_pace_calculatorWork out running pace, finish time or distance, in kilometres or miles.No findings

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
    Description, as the server wrote it
    Work out running pace, finish time or distance, in kilometres or miles. Mode 'pace' needs distance and timeSeconds; mode 'time' needs distance and paceSeconds (seconds per unit); mode 'distance' needs timeSeconds and paceSeconds. Distance is in the chosen unit. Returns pace per km and per mile, speed in km/h and mph, distance and total time. Source: https://hopi.co.uk/running-pace-calculator/

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
    • title: Running pace calculator
  • hopi_satoshi_converterConvert satoshis to BTC, mBTC and bits, or convert BTC to satoshis, mBTC and bits.1 finding

    Why it is in this group

    • The description's first verb is "convert": a word for a change.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.

    Findings

    • Warn

      The server marks "hopi_satoshi_converter" read-only (readOnlyHint: true), and its own name, description or input give the class "write".

      Matched text

      annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}; The description's first verb is "convert": a word for a change.

      What this check looks for
    Description, as the server wrote it
    Convert satoshis to BTC, mBTC and bits, or convert BTC to satoshis, mBTC and bits. Uses exact whole-satoshi integer maths. 1 BTC is 100,000,000 satoshis. Source: https://hopi.co.uk/satoshi-converter/

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
    • title: Satoshi to BTC converter
  • hopi_savings_goal_calculatorPlan a savings goal, compounded monthly.No findings

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
    Description, as the server wrote it
    Plan a savings goal, compounded monthly. Mode 'time' works out how long a monthly deposit takes to reach a target. Mode 'monthly' works out the monthly saving needed to reach a target within a number of years. Both take an optional starting balance and an annual interest rate. Amounts in GBP. Source: https://hopi.co.uk/savings-goal-calculator/

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
    • title: Savings goal calculator
  • hopi_schema_markup_generatorBuild valid JSON-LD structured data using schema.org.No findings

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
    Description, as the server wrote it
    Build valid JSON-LD structured data using schema.org. Supports FAQ pages, articles, local businesses and breadcrumb lists. Returns the JSON-LD object and a ready-to-paste script snippet. Source: https://hopi.co.uk/schema-markup-generator/

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
    • title: Schema markup generator
  • hopi_scientific_calculatorEvaluate a maths expression following the standard order of operations (BODMAS).1 finding

    Why it is in this group

    • The description's first verb is "evaluate": a word for a change.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.

    Findings

    • Warn

      The server marks "hopi_scientific_calculator" read-only (readOnlyHint: true), and its own name, description or input give the class "write".

      Matched text

      annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}; The description's first verb is "evaluate": a word for a change.

      What this check looks for
    Description, as the server wrote it
    Evaluate a maths expression following the standard order of operations (BODMAS). Supports + - * / ^ (power), ! (factorial), % (as divide by 100), brackets, the constants pi and e, and the functions sin, cos, tan, asin, acos, atan, ln, log (base 10) and sqrt. Set angleMode to 'deg' (default) or 'rad' for trigonometry. Source: https://hopi.co.uk/scientific-calculator/

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
    • title: Scientific calculator
  • hopi_secret_santa_generatorDraw Secret Santa gift pairings from a list of names.No findings

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
    Description, as the server wrote it
    Draw Secret Santa gift pairings from a list of names. Every person gives to exactly one other person, and nobody is assigned to themselves (a derangement). Returns the giver to receiver pairs. Source: https://hopi.co.uk/secret-santa-generator/

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
    • title: Secret Santa generator
  • hopi_set_for_life_generatorGenerate random UK Set For Life lines.1 finding

    Why it is in this group

    • The name "hopi_set_for_life_generator" says "set": a word for a change.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.

    Findings

    • Warn

      The server marks "hopi_set_for_life_generator" read-only (readOnlyHint: true), and its own name, description or input give the class "write".

      Matched text

      annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}; The name "hopi_set_for_life_generator" says "set": a word for a change.

      What this check looks for
    Description, as the server wrote it
    Generate random UK Set For Life lines. Each line has 5 main numbers from 1 to 47 (unique, sorted low to high) plus one Life Ball from 1 to 10, drawn with cryptographic randomness. Draws are Monday and Thursday; the top prize is £10,000 a month for 30 years at odds of 1 in 15,339,390. Source: https://hopi.co.uk/set-for-life-generator/

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
    • title: Set For Life number generator
  • hopi_shoe_size_converterConvert a UK shoe size to approximate EU and US sizes.1 finding

    Why it is in this group

    • The description's first verb is "convert": a word for a change.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.

    Findings

    • Warn

      The server marks "hopi_shoe_size_converter" read-only (readOnlyHint: true), and its own name, description or input give the class "write".

      Matched text

      annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}; The description's first verb is "convert": a word for a change.

      What this check looks for
    Description, as the server wrote it
    Convert a UK shoe size to approximate EU and US sizes. Set sex to 'men' (UK 5 to 13) or 'women' (UK 2 to 9). UK size must be in whole or half steps. Source: https://hopi.co.uk/shoe-size-converter/

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
    • title: Shoe size converter
  • hopi_sleep_calculatorSuggest sleep times using 90-minute cycles plus 15 minutes to fall asleep.No findings

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
    Description, as the server wrote it
    Suggest sleep times using 90-minute cycles plus 15 minutes to fall asleep. Mode 'wake' takes a wake time and returns the best bedtimes (wake - 15 - cycles x 90 minutes). Mode 'bedtime' takes a bedtime and returns the best wake times (bedtime + 15 + cycles x 90 minutes). Both return options for 6, 5, 4 and 3 cycles. Times are 'HH:MM' 24-hour. Source: https://hopi.co.uk/sleep-calculator/

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
    • title: Sleep cycle calculator
  • hopi_slot_machine_pickerSpin a slot machine reel of names or options and pick one at random.No findings

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
    Description, as the server wrote it
    Spin a slot machine reel of names or options and pick one at random. Every item has an equal chance. Returns the chosen item. Source: https://hopi.co.uk/slot-machine-picker/

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
    • title: Slot machine name picker
  • hopi_slug_generatorTurn any title or text into a clean URL slug: lowercase, accents stripped, and every run of spaces, punctuation and symbols collapsed to a single hyphen, with hyphens trimmed from …No findings

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
    Description, as the server wrote it
    Turn any title or text into a clean URL slug: lowercase, accents stripped, and every run of spaces, punctuation and symbols collapsed to a single hyphen, with hyphens trimmed from the ends. Source: https://hopi.co.uk/slug-generator/

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
    • title: Slug generator
  • hopi_small_text_generatorConvert text into decorative Unicode styles.1 finding

    Why it is in this group

    • The description's first verb is "convert": a word for a change.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.

    Findings

    • Warn

      The server marks "hopi_small_text_generator" read-only (readOnlyHint: true), and its own name, description or input give the class "write".

      Matched text

      annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}; The description's first verb is "convert": a word for a change.

      What this check looks for
    Description, as the server wrote it
    Convert text into decorative Unicode styles. 'superscript' uses tiny raised characters, 'smallcaps' uses small capital letters, and 'fullwidth' uses wide monospaced characters. Any character with no styled equivalent is left unchanged. Source: https://hopi.co.uk/small-text-generator/

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
    • title: Small text generator
  • hopi_spin_the_bottleSpin the bottle and pick one player at random from those in the circle.No findings

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
    Description, as the server wrote it
    Spin the bottle and pick one player at random from those in the circle. Every player has an equal chance. Returns the chosen player. Source: https://hopi.co.uk/spin-the-bottle/

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
    • title: Spin the bottle
  • hopi_sql_formatterFormat a SQL query: uppercase the keywords, put each clause on its own line and indent conditions, while leaving quoted strings, identifiers, numbers and comments untouched.1 finding

    Why it is in this group

    • The input takes a statement or command to run (input.sql), which can change anything it can reach.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.

    Findings

    • Warn

      The server marks "hopi_sql_formatter" read-only (readOnlyHint: true), and its own name, description or input give the class "write".

      Matched text

      annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}; The input takes a statement or command to run (input.sql), which can change anything it can reach.

      What this check looks for
    Description, as the server wrote it
    Format a SQL query: uppercase the keywords, put each clause on its own line and indent conditions, while leaving quoted strings, identifiers, numbers and comments untouched. Only whitespace and keyword case change. Source: https://hopi.co.uk/sql-formatter/

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
    • title: SQL formatter
  • hopi_staking_calculatorTurn a quoted staking rate into a final balance and rewards earned.No findings

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
    Description, as the server wrote it
    Turn a quoted staking rate into a final balance and rewards earned. For an APR rate, choose daily or monthly compounding; for an APY rate, compounding is already included. Returns the final balance, rewards earned and the effective APY. Figures are treated as GBP. Source: https://hopi.co.uk/staking-calculator/

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
    • title: Staking rewards calculator
  • hopi_stamp_duty_calculatorWork out Stamp Duty Land Tax (SDLT) on a property purchase in England and Northern Ireland.No findings

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
    Description, as the server wrote it
    Work out Stamp Duty Land Tax (SDLT) on a property purchase in England and Northern Ireland. Buyer types: 'ftb' first-time buyer (relief up to £500,000, standard rates above), 'home' moving home (main residence), 'additional' second home or buy-to-let (higher rates, only from £40,000). Returns the tax due and the effective rate. Amounts in GBP. Scotland (LBTT) and Wales (LTT) have their own rates. Source: https://hopi.co.uk/stamp-duty-calculator/

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
    • title: Stamp duty calculator
  • hopi_standard_deviation_calculatorWork out the sample and population standard deviation, sample and population variance, mean and count from a list of numbers.No findings

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
    Description, as the server wrote it
    Work out the sample and population standard deviation, sample and population variance, mean and count from a list of numbers. Provide the numbers separated by spaces, commas, semicolons or new lines. Sample figures need at least two values. Source: https://hopi.co.uk/standard-deviation-calculator/

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
    • title: Standard deviation calculator
  • hopi_star_sign_calculatorFind the western zodiac star sign for a date of birth.1 finding

    Why it is in this group

    • The name "hopi_star_sign_calculator" says "star": a word for a change.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.

    Findings

    • Warn

      The server marks "hopi_star_sign_calculator" read-only (readOnlyHint: true), and its own name, description or input give the class "write".

      Matched text

      annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}; The name "hopi_star_sign_calculator" says "star": a word for a change.

      What this check looks for
    Description, as the server wrote it
    Find the western zodiac star sign for a date of birth. Dates use the YYYY-MM-DD format (only the month and day matter). Returns the sign, its symbol, date range and element. Source: https://hopi.co.uk/star-sign-calculator/

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
    • title: Star sign calculator
  • hopi_stone_to_kgConvert a UK body weight given in stones and pounds to kilograms and grams.1 finding

    Why it is in this group

    • The description's first verb is "convert": a word for a change.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.

    Findings

    • Warn

      The server marks "hopi_stone_to_kg" read-only (readOnlyHint: true), and its own name, description or input give the class "write".

      Matched text

      annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}; The description's first verb is "convert": a word for a change.

      What this check looks for
    Description, as the server wrote it
    Convert a UK body weight given in stones and pounds to kilograms and grams. Uses exactly 14 pounds to the stone and 0.45359237 kg to the pound. Pounds are optional; give 11 st 7 lb as stone 11, pounds 7. Source: https://hopi.co.uk/stone-to-kg/

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
    • title: Stone to kg converter
  • hopi_student_loan_calculatorWork out UK student loan repayments from an annual salary using 2026/27 thresholds.No findings

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
    Description, as the server wrote it
    Work out UK student loan repayments from an annual salary using 2026/27 thresholds. Plans: 'p1' Plan 1 (9% above £26,900), 'p2' Plan 2 (9% above £29,385), 'p4' Plan 4 (9% above £33,795), 'p5' Plan 5 (9% above £25,000), 'pg' Postgraduate Loan (6% above £21,000). An undergraduate plan can optionally add a Postgraduate Loan on top. Returns yearly and monthly repayments. Amounts in GBP. Source: https://hopi.co.uk/student-loan-calculator/

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
    • title: Student loan repayment calculator
  • hopi_tarot_readerDraw a tarot spread from all 78 Rider-Waite-Smith cards, dealt without replacement using cryptographic randomness.No findings

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
    Description, as the server wrote it
    Draw a tarot spread from all 78 Rider-Waite-Smith cards, dealt without replacement using cryptographic randomness. Spreads: daily (1 card), past-present-future (3), situation (3: situation, obstacle, advice), decision (5), relationship (6), career (5), celtic (10, Celtic Cross). Returns each position with its card, orientation and keywords, plus counts of Major Arcana and reversed cards. For reflection and fun, not prediction. Source: https://hopi.co.uk/tarot-reader/

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
    • title: Tarot card reader
  • hopi_tdee_calculatorEstimate daily calories (TDEE) and BMR using the Mifflin-St Jeor equation.No findings

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
    Description, as the server wrote it
    Estimate daily calories (TDEE) and BMR using the Mifflin-St Jeor equation. BMR = 10 x kg + 6.25 x cm - 5 x age + (5 for male, -161 for female). TDEE = BMR x activity factor (sedentary 1.2, light 1.375, moderate 1.55, active 1.725, very_active 1.9). Use units 'metric' (heightCm, weightKg) or 'imperial' (heightInches, weightPounds). Also returns mild-loss (-250), loss (-500) and gain (+500) calorie goals. Source: https://hopi.co.uk/tdee-calculator/

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
    • title: TDEE & calorie calculator
  • hopi_test_card_number_generatorGenerate Luhn-valid TEST card numbers for QA and development, or validate a card number.1 finding

    Why it is in this group

    • The description's first verb is "generate": a word for a change.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.

    Findings

    • Warn

      The server marks "hopi_test_card_number_generator" read-only (readOnlyHint: true), and its own name, description or input give the class "write".

      Matched text

      annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}; The description's first verb is "generate": a word for a change.

      What this check looks for
    Description, as the server wrote it
    Generate Luhn-valid TEST card numbers for QA and development, or validate a card number. Test numbers pass the Luhn checksum and match a real brand format but are NOT real accounts, are linked to no one, and cannot be charged. Generate mode returns numbers for a brand (Visa, Mastercard, American Express, Discover); validate mode returns whether a number passes Luhn and its detected brand. Runs on Hopi's server; nothing is stored and no bank is contacted. Source: https://hopi.co.uk/test-card-number-generator/

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
    • title: Test card number generator
  • hopi_text_repeaterRepeat a piece of text a chosen number of times, joined by an optional separator, with optional line numbering.No findings

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
    Description, as the server wrote it
    Repeat a piece of text a chosen number of times, joined by an optional separator, with optional line numbering. Count is capped at 10000 repeats and the output is capped at 100000 characters. Returns the repeated text plus its character and line counts. Source: https://hopi.co.uk/text-repeater/

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
    • title: Text repeater
  • hopi_text_splitterSplit a long block of text into smaller blocks.No findings

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
    Description, as the server wrote it
    Split a long block of text into smaller blocks. In 'length' mode it splits into chunks up to a maximum character size, breaking at spaces where possible, and can add 1/n numbering to each block. In 'delimiter' mode it splits wherever a delimiter appears (use \n for newline, \t for tab). Returns the list of blocks. Source: https://hopi.co.uk/text-splitter/

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
    • title: Text splitter
  • hopi_thunderball_generatorGenerate random UK Thunderball lines.1 finding

    Why it is in this group

    • The description's first verb is "generate": a word for a change.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.

    Findings

    • Warn

      The server marks "hopi_thunderball_generator" read-only (readOnlyHint: true), and its own name, description or input give the class "write".

      Matched text

      annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}; The description's first verb is "generate": a word for a change.

      What this check looks for
    Description, as the server wrote it
    Generate random UK Thunderball lines. Each line has 5 main numbers from 1 to 39 (unique, sorted low to high) plus one Thunderball from 1 to 14, drawn with cryptographic randomness. Draws are Tuesday, Wednesday, Friday and Saturday; the fixed top prize is £500,000 at odds of 1 in 8,060,598. Source: https://hopi.co.uk/thunderball-generator/

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
    • title: Thunderball number generator
  • hopi_time_calculatorAdd or subtract two durations, each given as hours and minutes.1 finding

    Why it is in this group

    • The description's first verb is "add": a word for a change.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.

    Findings

    • Warn

      The server marks "hopi_time_calculator" read-only (readOnlyHint: true), and its own name, description or input give the class "write".

      Matched text

      annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}; The description's first verb is "add": a word for a change.

      What this check looks for
    Description, as the server wrote it
    Add or subtract two durations, each given as hours and minutes. Returns the total as an H:MM clock value, as decimal hours, and as total minutes. Results can be negative when subtracting. Source: https://hopi.co.uk/time-calculator/

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
    • title: Time calculator
  • hopi_time_zone_converterConvert a wall-clock date and time from one time zone to another, using the server's IANA time zone data (so daylight saving is handled).1 finding

    Why it is in this group

    • The description's first verb is "convert": a word for a change.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.

    Findings

    • Warn

      The server marks "hopi_time_zone_converter" read-only (readOnlyHint: true), and its own name, description or input give the class "write".

      Matched text

      annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}; The description's first verb is "convert": a word for a change.

      What this check looks for
    Description, as the server wrote it
    Convert a wall-clock date and time from one time zone to another, using the server's IANA time zone data (so daylight saving is handled). Date uses YYYY-MM-DD and time uses 24-hour HH:MM. Zones are IANA identifiers such as Europe/London or America/New_York. Returns the converted time, the day difference, and both UTC offsets. Source: https://hopi.co.uk/time-zone-converter/

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
    • title: Time zone converter
  • hopi_tip_calculatorWork out a tip on a bill and optionally split the total between people.No findings

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
    Description, as the server wrote it
    Work out a tip on a bill and optionally split the total between people. Returns the tip amount, the total, and the amount per person. Source: https://hopi.co.uk/tip-calculator/

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
    • title: Tip calculator
  • hopi_triangle_calculatorSolve a right-angle triangle from any two given values, at least one of which must be a side.No findings

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
    Description, as the server wrote it
    Solve a right-angle triangle from any two given values, at least one of which must be a side. Sides: a (opposite), b (adjacent), c (hypotenuse). angleA is angle A in degrees, between 0 and 90 (the third angle is the 90 degree right angle). Returns all three sides, both non-right angles, the area and the perimeter. Source: https://hopi.co.uk/triangle-calculator/

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
    • title: Right-angle triangle calculator
  • hopi_ucas_points_calculatorAdd up UCAS tariff points from A-level grades using the current tariff: A* 56, A 48, B 40, C 32, D 24, E 16.1 finding

    Why it is in this group

    • The description's first verb is "add": a word for a change.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.

    Findings

    • Warn

      The server marks "hopi_ucas_points_calculator" read-only (readOnlyHint: true), and its own name, description or input give the class "write".

      Matched text

      annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}; The description's first verb is "add": a word for a change.

      What this check looks for
    Description, as the server wrote it
    Add up UCAS tariff points from A-level grades using the current tariff: A* 56, A 48, B 40, C 32, D 24, E 16. Give the number of grades at each level. Returns the total points and the number of grades counted. Source: https://hopi.co.uk/ucas-points-calculator/

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
    • title: UCAS points calculator
  • hopi_unix_timestamp_converterConvert between Unix epoch timestamps and readable dates.1 finding

    Why it is in this group

    • The description's first verb is "convert": a word for a change.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.

    Findings

    • Warn

      The server marks "hopi_unix_timestamp_converter" read-only (readOnlyHint: true), and its own name, description or input give the class "write".

      Matched text

      annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}; The description's first verb is "convert": a word for a change.

      What this check looks for
    Description, as the server wrote it
    Convert between Unix epoch timestamps and readable dates. Pass a timestamp to get the UTC and local date (seconds or milliseconds detected automatically), or pass a date (and optional time, interpreted in local time) to get the timestamp in seconds and milliseconds. Source: https://hopi.co.uk/unix-timestamp-converter/

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
    • title: Unix timestamp converter
  • hopi_upside_down_textFlip text upside down using Unicode look-alike characters and reverse its order, so it reads as if rotated 180 degrees.No findings

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
    Description, as the server wrote it
    Flip text upside down using Unicode look-alike characters and reverse its order, so it reads as if rotated 180 degrees. Characters with no upside-down equivalent are kept as they are (but still reversed in position). Source: https://hopi.co.uk/upside-down-text/

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
    • title: Upside down text
  • hopi_url_encoderPercent-encode or decode text for URLs.No findings

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
    Description, as the server wrote it
    Percent-encode or decode text for URLs. Component mode encodes every reserved character (right for a single query value); whole-URL mode leaves structural characters like / ? & alone (right for a complete address). Source: https://hopi.co.uk/url-encoder/

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
    • title: URL encode & decode
  • hopi_url_parserParse a URL into its parts: protocol, host, port, path, fragment, origin and every decoded query parameter.No findings

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
    Description, as the server wrote it
    Parse a URL into its parts: protocol, host, port, path, fragment, origin and every decoded query parameter. If no scheme is given, https:// is assumed for a bare domain. Source: https://hopi.co.uk/url-parser/

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
    • title: URL parser
  • hopi_user_agent_parserParse a user agent string into its parts: browser and version, rendering engine, operating system and version, device type (mobile, tablet or desktop) and whether it looks like a b…No findings

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
    Description, as the server wrote it
    Parse a user agent string into its parts: browser and version, rendering engine, operating system and version, device type (mobile, tablet or desktop) and whether it looks like a bot or crawler. Uses an ordered pattern table (Edge before Chrome, Chrome before Safari). User agent strings can be spoofed, so results are best-effort, not proof. Source: https://hopi.co.uk/user-agent-parser/

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
    • title: User agent parser
  • hopi_username_generatorInvent memorable usernames by pairing a random adjective with a random noun, optionally with a two-digit number on the end.No findings

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
    Description, as the server wrote it
    Invent memorable usernames by pairing a random adjective with a random noun, optionally with a two-digit number on the end. Returns a list of unique usernames. Source: https://hopi.co.uk/username-generator/

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
    • title: Username generator
  • hopi_uuid_generatorGenerate 1 to 100 random version 4 UUIDs using a cryptographically secure random source.1 finding

    Why it is in this group

    • The description's first verb is "generate": a word for a change.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.

    Findings

    • Warn

      The server marks "hopi_uuid_generator" read-only (readOnlyHint: true), and its own name, description or input give the class "write".

      Matched text

      annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}; The description's first verb is "generate": a word for a change.

      What this check looks for
    Description, as the server wrote it
    Generate 1 to 100 random version 4 UUIDs using a cryptographically secure random source. Never uses Math.random. Source: https://hopi.co.uk/uuid-generator/

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
    • title: UUID generator
  • hopi_vat_calculatorAdd UK VAT to a net amount, or remove VAT from a gross (VAT-inclusive) amount.1 finding

    Why it is in this group

    • The description's first verb is "add": a word for a change.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.

    Findings

    • Warn

      The server marks "hopi_vat_calculator" read-only (readOnlyHint: true), and its own name, description or input give the class "write".

      Matched text

      annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}; The description's first verb is "add": a word for a change.

      What this check looks for
    Description, as the server wrote it
    Add UK VAT to a net amount, or remove VAT from a gross (VAT-inclusive) amount. Default rate is the UK standard 20 percent. Returns the net, VAT and gross figures. Source: https://hopi.co.uk/vat-calculator/

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
    • title: VAT calculator
  • hopi_vigenere_cipherEncode or decode text with the classic Vigenere cipher using a keyword.No findings

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
    Description, as the server wrote it
    Encode or decode text with the classic Vigenere cipher using a keyword. Each letter is shifted by the matching keyword letter (A is 0 to Z is 25), the keyword repeating across the message. Only A to Z letters are changed and case is preserved; numbers, spaces and punctuation pass through unchanged and do not advance the keyword. The keyword uses only its letters. Decoding reverses the shift. Source: https://hopi.co.uk/vigenere-cipher/

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
    • title: Vigenere cipher
  • hopi_water_intake_calculatorEstimate a rough daily fluid target from body weight, using 30 to 35 ml per kg, plus an activity add (sedentary 0, light 250, moderate 500, active 750, very_active 1000 ml) and 500…No findings

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
    Description, as the server wrote it
    Estimate a rough daily fluid target from body weight, using 30 to 35 ml per kg, plus an activity add (sedentary 0, light 250, moderate 500, active 750, very_active 1000 ml) and 500 ml more for hot conditions. Use units 'metric' (weightKg) or 'imperial' (weightStone and weightPounds). Returns a low-to-high range in litres, millilitres and 250 ml glasses. Source: https://hopi.co.uk/water-intake-calculator/

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
    • title: Daily water intake calculator
  • hopi_wheel_spinnerSpin a wheel of names or options and pick one at random.No findings

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
    Description, as the server wrote it
    Spin a wheel of names or options and pick one at random. Every item has an equal chance. Returns the chosen item. Source: https://hopi.co.uk/wheel-spinner/

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
    • title: Wheel spinner
  • hopi_would_you_rather_generatorDraw original, family-friendly would-you-rather pairs, open icebreaker questions or rapid-fire this-or-that pairs, optionally filtered by category.No findings

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
    Description, as the server wrote it
    Draw original, family-friendly would-you-rather pairs, open icebreaker questions or rapid-fire this-or-that pairs, optionally filtered by category. Would-you-rather categories: silly, food, travel, work, deep, kids. Icebreaker categories: work, party, deep, kids. This-or-that has no categories. Returns distinct items drawn at random. Source: https://hopi.co.uk/would-you-rather-generator/

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
    • title: Would you rather and icebreaker generator
  • hopi_zero_width_text_hiderHide a secret message inside ordinary text using invisible zero-width Unicode characters, reveal a message hidden that way, or clean zero-width characters out of text.No findings

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
    Description, as the server wrote it
    Hide a secret message inside ordinary text using invisible zero-width Unicode characters, reveal a message hidden that way, or clean zero-width characters out of text. Mode 'hide' takes cover and secret (optional spread to distribute the invisible run between words) and returns the output text plus the number of invisible characters added (UTF-8 bytes x 4 + 1 end marker). Mode 'reveal' takes text and returns the decoded message, or an error if nothing is hidden. Mode 'clean' takes text and strips U+200B, U+200C, U+200D, U+2060, U+FEFF, U+180E and U+00AD, reporting how many were removed. This is hiding, not encryption. Source: https://hopi.co.uk/zero-width-text-hider/

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
    • title: Zero-width text hider
Only reads 20Claude Code: allow
  • hopi_character_counterCount the characters in a block of text, including a count with spaces removed, the word count, how many SMS messages it would take to send, and the Twitter/X characters remaining …No findings

    Why it is in this group

    • The description's first verb is "count": a word for reading.
    Description, as the server wrote it
    Count the characters in a block of text, including a count with spaces removed, the word count, how many SMS messages it would take to send, and the Twitter/X characters remaining out of 280. Source: https://hopi.co.uk/character-counter/

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
    • title: Character counter
  • hopi_colour_name_finderFind the named CSS colour that exactly or most closely matches a hex code, using straight-line distance in RGB space across the 148 named CSS colours.No findings

    Why it is in this group

    • The description's first verb is "find": a word for reading.
    Description, as the server wrote it
    Find the named CSS colour that exactly or most closely matches a hex code, using straight-line distance in RGB space across the 148 named CSS colours. Source: https://hopi.co.uk/colour-name-finder/

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
    • title: Colour name finder
  • hopi_combination_generatorList every way to choose r items from a list, ignoring order (combinations).No findings

    Why it is in this group

    • The description's first verb is "list": a word for reading.
    Description, as the server wrote it
    List every way to choose r items from a list, ignoring order (combinations). Returns the total count and the combinations themselves (the first 5000). Source: https://hopi.co.uk/combination-generator/

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
    • title: Combination generator
  • hopi_day_of_week_calculatorFind which day of the week a given date falls on.No findings

    Why it is in this group

    • The description's first verb is "find": a word for reading.
    Description, as the server wrote it
    Find which day of the week a given date falls on. Dates use the YYYY-MM-DD format. Also reports which weekday that same day and month falls on in the current year. Source: https://hopi.co.uk/day-of-week-calculator/

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
    • title: Day of the week finder
  • hopi_days_between_datesCount the number of days between two dates, with the total also shown in weeks and in weekdays (Monday to Friday).No findings

    Why it is in this group

    • The description's first verb is "count": a word for reading.
    Description, as the server wrote it
    Count the number of days between two dates, with the total also shown in weeks and in weekdays (Monday to Friday). Dates use the YYYY-MM-DD format. Set inclusive to true to count both end days. Source: https://hopi.co.uk/days-between-dates/

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
    • title: Days between dates calculator
  • hopi_days_until_christmasCount the number of sleeps until the next Christmas Day (25 December).No findings

    Why it is in this group

    • The description's first verb is "count": a word for reading.
    Description, as the server wrote it
    Count the number of sleeps until the next Christmas Day (25 December). Uses today's date by default, or an optional 'from' date in YYYY-MM-DD format. Source: https://hopi.co.uk/days-until-christmas/

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
    • title: Days until Christmas
  • hopi_diff_checkerCompare two texts line by line using a longest common subsequence diff, and report which lines were added and which were removed.No findings

    Why it is in this group

    • The name "hopi_diff_checker" says "diff": a word for reading.
    Description, as the server wrote it
    Compare two texts line by line using a longest common subsequence diff, and report which lines were added and which were removed. An edited line shows as one removed line plus one added line. Comparison is exact, including spaces and case. Source: https://hopi.co.uk/diff-checker/

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
    • title: Diff checker
  • hopi_email_header_analyserAnalyse raw email headers (the full source from Show original or View message source) without any network call: lists every Received hop in delivery order with host, IP, time and d…No findings

    Why it is in this group

    • The description's first verb is "analyse": a word for reading.
    Description, as the server wrote it
    Analyse raw email headers (the full source from Show original or View message source) without any network call: lists every Received hop in delivery order with host, IP, time and delay between hops; extracts From, Reply-To, Return-Path, Subject, Date, Message-ID and mailer; reads SPF, DKIM and DMARC results from Authentication-Results, ARC-Authentication-Results and Received-SPF with the domain each was checked for; and flags warning signs such as Reply-To on a different domain, SPF or DMARC failure, no DKIM, a display name that pretends to be an address or brand, a first hop from a home connection, clock skew and a mismatched Message-ID domain. Returns a verdict (consistent, caution or suspicious). It does not query DNS, so it reports what the receiving servers recorded rather than re-checking it. Source: https://hopi.co.uk/email-header-analyser/

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
    • title: Email header analyser
  • hopi_eth_address_checksumValidate an Ethereum address's EIP-55 capitalisation checksum and return the correctly checksummed form.No findings

    Why it is in this group

    • The description's first verb is "validate": a word for reading.
    Description, as the server wrote it
    Validate an Ethereum address's EIP-55 capitalisation checksum and return the correctly checksummed form. Reports whether the input is already checksummed, lacks a checksum (all one case), or fails the checksum. Uses keccak-256 exactly as EIP-55 specifies. Source: https://hopi.co.uk/eth-address-checksum/

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
    • title: Ethereum address checksum
  • hopi_http_status_codesLook up a standard HTTP status code by number and get its name, meaning and class (1xx to 5xx), or search all standard codes by a word in the number, name or description.No findings

    Why it is in this group

    • The name "hopi_http_status_codes" says "status": a word for reading.
    Description, as the server wrote it
    Look up a standard HTTP status code by number and get its name, meaning and class (1xx to 5xx), or search all standard codes by a word in the number, name or description. Source: https://hopi.co.uk/http-status-codes/

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
    • title: HTTP status code reference
  • hopi_iban_validatorValidate an IBAN or generate a test IBAN.No findings

    Why it is in this group

    • The description's first verb is "validate": a word for reading.
    Description, as the server wrote it
    Validate an IBAN or generate a test IBAN. Pass 'iban' to check it: the tool normalises it (uppercase, no spaces), confirms the length matches the country's published length, and runs the mod-97 checksum (move the first four characters to the end, map letters to numbers A=10 to Z=35, valid when the number mod 97 is 1). Pass 'country' (a two-letter ISO code) to generate a structurally valid TEST IBAN with a random bank and account portion and correct check digits. Generated IBANs are test values only and are not tied to any real account. All processing is local; nothing is stored. Source: https://hopi.co.uk/iban-validator/

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
    • title: IBAN validator
  • hopi_new_year_countdownCount down to the next New Year (midnight at the start of 1 January): days, hours, minutes, seconds and sleeps remaining, plus the weekday New Year's Day falls on.No findings

    Why it is in this group

    • The description's first verb is "count": a word for reading.
    Description, as the server wrote it
    Count down to the next New Year (midnight at the start of 1 January): days, hours, minutes, seconds and sleeps remaining, plus the weekday New Year's Day falls on. Uses the current time by default, or an optional 'from' date (YYYY-MM-DD) or ISO date-time, in which case everything is worked out in UTC. Source: https://hopi.co.uk/new-year-countdown/

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
    • title: New Year countdown
  • hopi_special_charactersList special characters and symbols grouped by category: arrows, stars and hearts, maths, currency, punctuation, legal marks and accents.No findings

    Why it is in this group

    • The description's first verb is "list": a word for reading.
    Description, as the server wrote it
    List special characters and symbols grouped by category: arrows, stars and hearts, maths, currency, punctuation, legal marks and accents. Optionally filter to a single group. Returns the characters ready to copy. Source: https://hopi.co.uk/special-characters/

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
    • title: Special characters to copy
  • hopi_unicode_inspectorInspect text as Unicode.No findings

    Why it is in this group

    • The description's first verb is "inspect": a word for reading.
    Description, as the server wrote it
    Inspect text as Unicode. Returns the number of code points (iterated so emoji and other astral characters count as one), the UTF-16 length, the UTF-8 byte count, and per-character details: the character, its code point as U+XXXX, its decimal value, its UTF-8 bytes as hex, its HTML entity and a JavaScript escape. The character list is capped at 2000 entries. Source: https://hopi.co.uk/unicode-inspector/

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
    • title: Unicode inspector
  • hopi_unit_price_calculatorCompare the unit price of two or more items to find the best value.No findings

    Why it is in this group

    • The description's first verb is "compare": a word for reading.
    Description, as the server wrote it
    Compare the unit price of two or more items to find the best value. Each item has a price in GBP, a quantity and a unit ('g', 'kg', 'ml', 'l' or 'each'). Weights are compared per kg, volumes per litre, and counts each. Returns the unit price of every item and which is cheapest. Source: https://hopi.co.uk/unit-price-calculator/

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
    • title: Unit price comparison
  • hopi_week_numberFind the ISO 8601 week number for a date.No findings

    Why it is in this group

    • The description's first verb is "find": a word for reading.
    Description, as the server wrote it
    Find the ISO 8601 week number for a date. Dates use the YYYY-MM-DD format and default to today. ISO weeks run Monday to Sunday and week 1 holds the year's first Thursday. Returns the week number, ISO year, and the Monday and Sunday of that week. Source: https://hopi.co.uk/week-number/

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
    • title: What week number is it?
  • hopi_word_counterAnalyse a block of text and return the word count, character count (with and without spaces), sentence count, paragraph count and an estimated reading time at 225 words per minute.No findings

    Why it is in this group

    • The description's first verb is "analyse": a word for reading.
    Description, as the server wrote it
    Analyse a block of text and return the word count, character count (with and without spaces), sentence count, paragraph count and an estimated reading time at 225 words per minute. Source: https://hopi.co.uk/word-counter/

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
    • title: Word counter
  • hopi_word_frequency_counterCount how often each word appears in a block of text, sorted from most to least frequent.No findings

    Why it is in this group

    • The description's first verb is "count": a word for reading.
    Description, as the server wrote it
    Count how often each word appears in a block of text, sorted from most to least frequent. Returns the total word count, the number of unique words, and the top 20 words with their counts and percentages. Common stop words (the, and, of, ...) can optionally be ignored. Source: https://hopi.co.uk/word-frequency-counter/

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
    • title: Word frequency counter
  • hopi_working_days_calculatorCount the working days (Monday to Friday) between two dates, inclusive of both ends, optionally excluding England and Wales bank holidays.No findings

    Why it is in this group

    • The description's first verb is "count": a word for reading.
    Description, as the server wrote it
    Count the working days (Monday to Friday) between two dates, inclusive of both ends, optionally excluding England and Wales bank holidays. Dates use the YYYY-MM-DD format. Bank holiday data covers 2026 and 2027 only, so outside those years just weekends are excluded. Source: https://hopi.co.uk/working-days-calculator/

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
    • title: Working days calculator
  • hopi_yes_no_wheelGet a random yes or no decision, with an optional maybe.No findings

    Why it is in this group

    • The description's first verb is "get": a word for reading.
    Description, as the server wrote it
    Get a random yes or no decision, with an optional maybe. Returns the answer. Source: https://hopi.co.uk/yes-no-wheel/

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
    • title: Yes or no

This is not a safety rating, and no finding is not a safety guarantee. The groups and findings come from fixed checks of the tool definitions the server returned on the date shown, not from its code or what it does when called. How the checks work.

Install

Pinned to version 1.1.0. Values in angle brackets are yours to fill in.

claude mcp add --transport http hopi https://mcp.hopi.co.uk/mcp

Run in a terminal.

Claude Code permissions

Allow the reads, ask before a change, deny the deletes. Paste into .claude/settings.json.

.claude/settings.json
{
  "permissions": {
    "allow": [
      "mcp__hopi__hopi_character_counter",
      "mcp__hopi__hopi_colour_name_finder",
      "mcp__hopi__hopi_combination_generator",
      "mcp__hopi__hopi_day_of_week_calculator",
      "mcp__hopi__hopi_days_between_dates",
      "mcp__hopi__hopi_days_until_christmas",
      "mcp__hopi__hopi_diff_checker",
      "mcp__hopi__hopi_email_header_analyser",
      "mcp__hopi__hopi_eth_address_checksum",
      "mcp__hopi__hopi_http_status_codes",
      "mcp__hopi__hopi_iban_validator",
      "mcp__hopi__hopi_new_year_countdown",
      "mcp__hopi__hopi_special_characters",
      "mcp__hopi__hopi_unicode_inspector",
      "mcp__hopi__hopi_unit_price_calculator",
      "mcp__hopi__hopi_week_number",
      "mcp__hopi__hopi_word_counter",
      "mcp__hopi__hopi_word_frequency_counter",
      "mcp__hopi__hopi_working_days_calculator",
      "mcp__hopi__hopi_yes_no_wheel"
    ],
    "ask": [
      "mcp__hopi__hopi_add_working_days",
      "mcp__hopi__hopi_age_calculator",
      "mcp__hopi__hopi_alcohol_unit_calculator",
      "mcp__hopi__hopi_alphabetical_order",
      "mcp__hopi__hopi_angle_converter",
      "mcp__hopi__hopi_area_converter",
      "mcp__hopi__hopi_aspect_ratio_calculator",
      "mcp__hopi__hopi_average_calculator",
      "mcp__hopi__hopi_base32_encoder",
      "mcp__hopi__hopi_base64",
      "mcp__hopi__hopi_bill_splitter",
      "mcp__hopi__hopi_bingo_card_generator",
      "mcp__hopi__hopi_bitcoin_address_validator",
      "mcp__hopi__hopi_bmi_calculator",
      "mcp__hopi__hopi_body_fat_calculator",
      "mcp__hopi__hopi_caesar_cipher",
      "mcp__hopi__hopi_cagr_calculator",
      "mcp__hopi__hopi_calories_to_kj",
      "mcp__hopi__hopi_case_converter",
      "mcp__hopi__hopi_cat_age_calculator",
      "mcp__hopi__hopi_celsius_to_fahrenheit",
      "mcp__hopi__hopi_cipher_identifier",
      "mcp__hopi__hopi_cm_to_feet",
      "mcp__hopi__hopi_cmyk_to_rgb",
      "mcp__hopi__hopi_coin_flip",
      "mcp__hopi__hopi_colour_palette_generator",
      "mcp__hopi__hopi_colour_picker",
      "mcp__hopi__hopi_colour_shades_generator",
      "mcp__hopi__hopi_compound_interest_calculator",
      "mcp__hopi__hopi_contrast_checker",
      "mcp__hopi__hopi_cron_expression_parser",
      "mcp__hopi__hopi_crypto_profit_calculator",
      "mcp__hopi__hopi_css_gradient_generator",
      "mcp__hopi__hopi_css_minifier",
      "mcp__hopi__hopi_csv_to_json",
      "mcp__hopi__hopi_cups_to_grams",
      "mcp__hopi__hopi_currency_converter",
      "mcp__hopi__hopi_data_size_converter",
      "mcp__hopi__hopi_date_calculator",
      "mcp__hopi__hopi_day_rate_calculator",
      "mcp__hopi__hopi_dca_calculator",
      "mcp__hopi__hopi_dice_roller",
      "mcp__hopi__hopi_discount_calculator",
      "mcp__hopi__hopi_dog_age_calculator",
      "mcp__hopi__hopi_download_time_calculator",
      "mcp__hopi__hopi_due_date_calculator",
      "mcp__hopi__hopi_dummy_data_generator",
      "mcp__hopi__hopi_email_link_generator",
      "mcp__hopi__hopi_energy_cost_calculator",
      "mcp__hopi__hopi_env_to_json",
      "mcp__hopi__hopi_eth_unit_converter",
      "mcp__hopi__hopi_euromillions_generator",
      "mcp__hopi__hopi_event_wine_calculator",
      "mcp__hopi__hopi_fortune_cookie",
      "mcp__hopi__hopi_fraction_calculator",
      "mcp__hopi__hopi_fraction_to_decimal",
      "mcp__hopi__hopi_fuel_cost_calculator",
      "mcp__hopi__hopi_hash_generator",
      "mcp__hopi__hopi_hash_identifier",
      "mcp__hopi__hopi_heart_rate_zones",
      "mcp__hopi__hopi_hex_to_rgb",
      "mcp__hopi__hopi_hidden_character_checker",
      "mcp__hopi__hopi_holiday_entitlement_calculator",
      "mcp__hopi__hopi_hourly_to_salary",
      "mcp__hopi__hopi_hours_calculator",
      "mcp__hopi__hopi_hsl_converter",
      "mcp__hopi__hopi_html_escape",
      "mcp__hopi__hopi_ics_generator",
      "mcp__hopi__hopi_inflation_calculator",
      "mcp__hopi__hopi_json_formatter",
      "mcp__hopi__hopi_json_to_csv",
      "mcp__hopi__hopi_json_to_typescript",
      "mcp__hopi__hopi_json_yaml_converter",
      "mcp__hopi__hopi_jwt_decoder",
      "mcp__hopi__hopi_kg_to_lbs",
      "mcp__hopi__hopi_kg_to_stone",
      "mcp__hopi__hopi_lbs_to_kg",
      "mcp__hopi__hopi_leak_tracer",
      "mcp__hopi__hopi_leap_year_checker",
      "mcp__hopi__hopi_length_converter",
      "mcp__hopi__hopi_link_cleaner",
      "mcp__hopi__hopi_litres_to_pints",
      "mcp__hopi__hopi_loan_calculator",
      "mcp__hopi__hopi_lookalike_domain_generator",
      "mcp__hopi__hopi_lorem_ipsum_generator",
      "mcp__hopi__hopi_lottery_number_generator",
      "mcp__hopi__hopi_magic_8_ball",
      "mcp__hopi__hopi_margin_calculator",
      "mcp__hopi__hopi_markdown_previewer",
      "mcp__hopi__hopi_market_cap_calculator",
      "mcp__hopi__hopi_meta_tag_generator",
      "mcp__hopi__hopi_miles_to_km",
      "mcp__hopi__hopi_military_time_converter",
      "mcp__hopi__hopi_minutes_to_hours",
      "mcp__hopi__hopi_moon_phase_calculator",
      "mcp__hopi__hopi_morse_code_translator",
      "mcp__hopi__hopi_mortgage_calculator",
      "mcp__hopi__hopi_mortgage_overpayment_calculator",
      "mcp__hopi__hopi_mpg_converter",
      "mcp__hopi__hopi_national_insurance_calculator",
      "mcp__hopi__hopi_nato_phonetic_alphabet",
      "mcp__hopi__hopi_net_to_gross",
      "mcp__hopi__hopi_number_base_converter",
      "mcp__hopi__hopi_number_to_words",
      "mcp__hopi__hopi_oven_temperature_converter",
      "mcp__hopi__hopi_overtime_pay_calculator",
      "mcp__hopi__hopi_password_strength_checker",
      "mcp__hopi__hopi_percentage_calculator",
      "mcp__hopi__hopi_percentage_change_calculator",
      "mcp__hopi__hopi_percentage_decrease_calculator",
      "mcp__hopi__hopi_percentage_difference_calculator",
      "mcp__hopi__hopi_percentage_increase_calculator",
      "mcp__hopi__hopi_position_size_calculator",
      "mcp__hopi__hopi_power_converter",
      "mcp__hopi__hopi_pressure_converter",
      "mcp__hopi__hopi_prime_factorisation_calculator",
      "mcp__hopi__hopi_pro_rata_salary_calculator",
      "mcp__hopi__hopi_product_feed_generator",
      "mcp__hopi__hopi_random_colour_generator",
      "mcp__hopi__hopi_random_coordinates",
      "mcp__hopi__hopi_random_letter_generator",
      "mcp__hopi__hopi_random_number_generator",
      "mcp__hopi__hopi_random_team_generator",
      "mcp__hopi__hopi_random_word_generator",
      "mcp__hopi__hopi_ratio_calculator",
      "mcp__hopi__hopi_reading_time_calculator",
      "mcp__hopi__hopi_redundancy_pay_calculator",
      "mcp__hopi__hopi_reverse_text",
      "mcp__hopi__hopi_rgb_to_hex",
      "mcp__hopi__hopi_ring_size_converter",
      "mcp__hopi__hopi_robots_txt_generator",
      "mcp__hopi__hopi_roman_numerals_converter",
      "mcp__hopi__hopi_rounding_calculator",
      "mcp__hopi__hopi_running_pace_calculator",
      "mcp__hopi__hopi_satoshi_converter",
      "mcp__hopi__hopi_savings_goal_calculator",
      "mcp__hopi__hopi_schema_markup_generator",
      "mcp__hopi__hopi_scientific_calculator",
      "mcp__hopi__hopi_secret_santa_generator",
      "mcp__hopi__hopi_set_for_life_generator",
      "mcp__hopi__hopi_shoe_size_converter",
      "mcp__hopi__hopi_sleep_calculator",
      "mcp__hopi__hopi_slot_machine_picker",
      "mcp__hopi__hopi_slug_generator",
      "mcp__hopi__hopi_small_text_generator",
      "mcp__hopi__hopi_speed_converter",
      "mcp__hopi__hopi_spin_the_bottle",
      "mcp__hopi__hopi_sql_formatter",
      "mcp__hopi__hopi_staking_calculator",
      "mcp__hopi__hopi_stamp_duty_calculator",
      "mcp__hopi__hopi_standard_deviation_calculator",
      "mcp__hopi__hopi_star_sign_calculator",
      "mcp__hopi__hopi_stone_to_kg",
      "mcp__hopi__hopi_student_loan_calculator",
      "mcp__hopi__hopi_take_home_pay_calculator",
      "mcp__hopi__hopi_tarot_reader",
      "mcp__hopi__hopi_tdee_calculator",
      "mcp__hopi__hopi_test_card_number_generator",
      "mcp__hopi__hopi_text_repeater",
      "mcp__hopi__hopi_text_splitter",
      "mcp__hopi__hopi_thunderball_generator",
      "mcp__hopi__hopi_time_calculator",
      "mcp__hopi__hopi_time_zone_converter",
      "mcp__hopi__hopi_tip_calculator",
      "mcp__hopi__hopi_triangle_calculator",
      "mcp__hopi__hopi_ucas_points_calculator",
      "mcp__hopi__hopi_unix_timestamp_converter",
      "mcp__hopi__hopi_upside_down_text",
      "mcp__hopi__hopi_url_encoder",
      "mcp__hopi__hopi_url_parser",
      "mcp__hopi__hopi_user_agent_parser",
      "mcp__hopi__hopi_username_generator",
      "mcp__hopi__hopi_utm_link_generator",
      "mcp__hopi__hopi_uuid_generator",
      "mcp__hopi__hopi_vat_calculator",
      "mcp__hopi__hopi_vigenere_cipher",
      "mcp__hopi__hopi_volume_converter",
      "mcp__hopi__hopi_water_intake_calculator",
      "mcp__hopi__hopi_weight_converter",
      "mcp__hopi__hopi_wheel_spinner",
      "mcp__hopi__hopi_would_you_rather_generator",
      "mcp__hopi__hopi_zero_width_text_hider"
    ],
    "deny": [
      "mcp__hopi__hopi_emoji_remover",
      "mcp__hopi__hopi_remove_duplicate_lines",
      "mcp__hopi__hopi_remove_extra_spaces",
      "mcp__hopi__hopi_remove_line_breaks"
    ]
  }
}

Tools that only read are allowed, tools that change things ask first, tools that delete or cancel are denied. It assumes the server is installed as hopi. Review it before you use it.