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.
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
- Deletes or cancels4Claude Code: deny: see these tools
- Can't be undone17Claude Code: ask: see these tools
- Changes things165Claude Code: ask: see these tools
- Only reads20Claude Code: allow: see these tools
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/mcpFindings
Matches of fixed checks, with the text they matched.
- Highhopi_env_to_json
The description refers to ".env".
What this check looks forMatched text
description: "Convert between a .env file and a JSON object. In env-to-json..."
- Highhopi_env_to_json
The input schema at properties.mode.description refers to ".env".
What this check looks forMatched text
inputSchema.properties.mode.description: "'env-to-json' parses a .env file into JSON, 'json-to-env' turns a J..."
- Highhopi_env_to_json
The input schema at properties.text.description refers to ".env".
What this check looks forMatched text
inputSchema.properties.text.description: "The .env file text, or the JSON object text, dep..."
The server marks "hopi_add_working_days" read-only (readOnlyHint: true), and its own name, description or input give the class "write".
What this check looks forMatched text
annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}; The name "hopi_add_working_days" says "add": a word for a change.
The server marks "hopi_angle_converter" read-only (readOnlyHint: true), and its own name, description or input give the class "irreversible".
What this check looks forMatched text
annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}; The description's first verb is "convert": a word for a change.
The server marks "hopi_area_converter" read-only (readOnlyHint: true), and its own name, description or input give the class "irreversible".
What this check looks forMatched text
annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}; The description's first verb is "convert": a word for a change.
Show 88 more findingsShow fewer
The server marks "hopi_bingo_card_generator" read-only (readOnlyHint: true), and its own name, description or input give the class "write".
What this check looks forMatched text
annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}; The description's first verb is "generate": a word for a change.
The server marks "hopi_calories_to_kj" read-only (readOnlyHint: true), and its own name, description or input give the class "write".
What this check looks forMatched text
annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}; The description's first verb is "convert": a word for a change.
The server marks "hopi_case_converter" read-only (readOnlyHint: true), and its own name, description or input give the class "write".
What this check looks forMatched text
annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}; The description's first verb is "convert": a word for a change.
The server marks "hopi_cat_age_calculator" read-only (readOnlyHint: true), and its own name, description or input give the class "write".
What this check looks forMatched text
annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}; The description's first verb is "convert": a word for a change.
The server marks "hopi_celsius_to_fahrenheit" read-only (readOnlyHint: true), and its own name, description or input give the class "write".
What this check looks forMatched text
annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}; The description's first verb is "convert": a word for a change.
- Warnhopi_cm_to_feet
The server marks "hopi_cm_to_feet" read-only (readOnlyHint: true), and its own name, description or input give the class "write".
What this check looks forMatched text
annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}; The description's first verb is "convert": a word for a change.
- Warnhopi_cmyk_to_rgb
The server marks "hopi_cmyk_to_rgb" read-only (readOnlyHint: true), and its own name, description or input give the class "write".
What this check looks forMatched text
annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}; The description's first verb is "convert": a word for a change.
The server marks "hopi_colour_palette_generator" read-only (readOnlyHint: true), and its own name, description or input give the class "write".
What this check looks forMatched text
annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}; The description's first verb is "generate": a word for a change.
- Warnhopi_csv_to_json
The server marks "hopi_csv_to_json" read-only (readOnlyHint: true), and its own name, description or input give the class "write".
What this check looks forMatched text
annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}; The description's first verb is "convert": a word for a change.
The server marks "hopi_cups_to_grams" read-only (readOnlyHint: true), and its own name, description or input give the class "write".
What this check looks forMatched text
annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}; The description's first verb is "convert": a word for a change.
The server marks "hopi_currency_converter" read-only (readOnlyHint: true), and its own name, description or input give the class "irreversible".
What this check looks forMatched text
annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}; The description's first verb is "convert": a word for a change.
The server marks "hopi_data_size_converter" read-only (readOnlyHint: true), and its own name, description or input give the class "irreversible".
What this check looks forMatched text
annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}; The description's first verb is "convert": a word for a change.
The server marks "hopi_date_calculator" read-only (readOnlyHint: true), and its own name, description or input give the class "write".
What this check looks forMatched text
annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}; The description's first verb is "add": a word for a change.
The server marks "hopi_day_rate_calculator" read-only (readOnlyHint: true), and its own name, description or input give the class "write".
What this check looks forMatched text
annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}; The description's first verb is "convert": a word for a change.
The server marks "hopi_dog_age_calculator" read-only (readOnlyHint: true), and its own name, description or input give the class "write".
What this check looks forMatched text
annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}; The description's first verb is "convert": a word for a change.
The server marks "hopi_dummy_data_generator" read-only (readOnlyHint: true), and its own name, description or input give the class "write".
What this check looks forMatched text
annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}; The description's first verb is "generate": a word for a change.
The server marks "hopi_email_link_generator" read-only (readOnlyHint: true), and its own name, description or input give the class "irreversible".
What this check looks forMatched text
annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}; The name "hopi_email_link_generator" says "link": a word for a change.
The server marks "hopi_emoji_remover" read-only (readOnlyHint: true), and its own name, description or input give the class "destructive".
What this check looks forMatched text
annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}; The description's first verb is "remove": a word for removing or ending something.
The server marks "hopi_emoji_remover" not destructive (destructiveHint: false), and its own name, description or input give the class "destructive".
What this check looks forMatched text
annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}; The description's first verb is "remove": a word for removing or ending something.
- Warnhopi_env_to_json
The server marks "hopi_env_to_json" read-only (readOnlyHint: true), and its own name, description or input give the class "write".
What this check looks forMatched text
annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}; The description's first verb is "convert": a word for a change.
The server marks "hopi_eth_unit_converter" read-only (readOnlyHint: true), and its own name, description or input give the class "write".
What this check looks forMatched text
annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}; The description's first verb is "convert": a word for a change.
The server marks "hopi_euromillions_generator" read-only (readOnlyHint: true), and its own name, description or input give the class "write".
What this check looks forMatched text
annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}; The description's first verb is "generate": a word for a change.
The server marks "hopi_fraction_calculator" read-only (readOnlyHint: true), and its own name, description or input give the class "write".
What this check looks forMatched text
annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}; The description's first verb is "add": a word for a change.
The server marks "hopi_fraction_to_decimal" read-only (readOnlyHint: true), and its own name, description or input give the class "write".
What this check looks forMatched text
annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}; The description's first verb is "convert": a word for a change.
- Warnhopi_hex_to_rgb
The server marks "hopi_hex_to_rgb" read-only (readOnlyHint: true), and its own name, description or input give the class "write".
What this check looks forMatched text
annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}; The description's first verb is "convert": a word for a change.
The server marks "hopi_hourly_to_salary" read-only (readOnlyHint: true), and its own name, description or input give the class "write".
What this check looks forMatched text
annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}; The description's first verb is "convert": a word for a change.
The server marks "hopi_hsl_converter" read-only (readOnlyHint: true), and its own name, description or input give the class "write".
What this check looks forMatched text
annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}; The description's first verb is "convert": a word for a change.
- Warnhopi_json_to_csv
The server marks "hopi_json_to_csv" read-only (readOnlyHint: true), and its own name, description or input give the class "write".
What this check looks forMatched text
annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}; The description's first verb is "convert": a word for a change.
The server marks "hopi_json_to_typescript" read-only (readOnlyHint: true), and its own name, description or input give the class "write".
What this check looks forMatched text
annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}; The description's first verb is "convert": a word for a change.
The server marks "hopi_json_yaml_converter" read-only (readOnlyHint: true), and its own name, description or input give the class "write".
What this check looks forMatched text
annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}; The description's first verb is "convert": a word for a change.
- Warnhopi_kg_to_lbs
The server marks "hopi_kg_to_lbs" read-only (readOnlyHint: true), and its own name, description or input give the class "write".
What this check looks forMatched text
annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}; The description's first verb is "convert": a word for a change.
- Warnhopi_kg_to_stone
The server marks "hopi_kg_to_stone" read-only (readOnlyHint: true), and its own name, description or input give the class "write".
What this check looks forMatched text
annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}; The description's first verb is "convert": a word for a change.
- Warnhopi_lbs_to_kg
The server marks "hopi_lbs_to_kg" read-only (readOnlyHint: true), and its own name, description or input give the class "write".
What this check looks forMatched text
annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}; The description's first verb is "convert": a word for a change.
- Warnhopi_leak_tracer
The server marks "hopi_leak_tracer" read-only (readOnlyHint: true), and its own name, description or input give the class "irreversible".
What this check looks forMatched text
annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}; The input addresses people (input.recipients): what it sends cannot be taken back.
The server marks "hopi_length_converter" read-only (readOnlyHint: true), and its own name, description or input give the class "irreversible".
What this check looks forMatched text
annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}; The description's first verb is "convert": a word for a change.
The server marks "hopi_link_cleaner" read-only (readOnlyHint: true), and its own name, description or input give the class "write".
What this check looks forMatched text
annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}; The name "hopi_link_cleaner" says "link": a word for a change.
The server marks "hopi_litres_to_pints" read-only (readOnlyHint: true), and its own name, description or input give the class "write".
What this check looks forMatched text
annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}; The description's first verb is "convert": a word for a change.
The server marks "hopi_lookalike_domain_generator" read-only (readOnlyHint: true), and its own name, description or input give the class "write".
What this check looks forMatched text
annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}; The description's first verb is "generate": a word for a change.
The server marks "hopi_lorem_ipsum_generator" read-only (readOnlyHint: true), and its own name, description or input give the class "write".
What this check looks forMatched text
annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}; The description's first verb is "generate": a word for a change.
The server marks "hopi_lottery_number_generator" read-only (readOnlyHint: true), and its own name, description or input give the class "write".
What this check looks forMatched text
annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}; The description's first verb is "generate": a word for a change.
- Warnhopi_miles_to_km
The server marks "hopi_miles_to_km" read-only (readOnlyHint: true), and its own name, description or input give the class "write".
What this check looks forMatched text
annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}; The description's first verb is "convert": a word for a change.
The server marks "hopi_military_time_converter" read-only (readOnlyHint: true), and its own name, description or input give the class "write".
What this check looks forMatched text
annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}; The description's first verb is "convert": a word for a change.
The server marks "hopi_minutes_to_hours" read-only (readOnlyHint: true), and its own name, description or input give the class "write".
What this check looks forMatched text
annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}; The description's first verb is "convert": a word for a change.
The server marks "hopi_mpg_converter" read-only (readOnlyHint: true), and its own name, description or input give the class "write".
What this check looks forMatched text
annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}; The description's first verb is "convert": a word for a change.
The server marks "hopi_number_base_converter" read-only (readOnlyHint: true), and its own name, description or input give the class "write".
What this check looks forMatched text
annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}; The description's first verb is "convert": a word for a change.
The server marks "hopi_number_to_words" read-only (readOnlyHint: true), and its own name, description or input give the class "write".
What this check looks forMatched text
annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}; The description's first verb is "convert": a word for a change.
The server marks "hopi_oven_temperature_converter" read-only (readOnlyHint: true), and its own name, description or input give the class "write".
What this check looks forMatched text
annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}; The description's first verb is "convert": a word for a change.
The server marks "hopi_overtime_pay_calculator" read-only (readOnlyHint: true), and its own name, description or input give the class "irreversible".
What this check looks forMatched 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.
The server marks "hopi_percentage_calculator" read-only (readOnlyHint: true), and its own name, description or input give the class "irreversible".
What this check looks forMatched text
annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}; The input addresses people (input.to): what it sends cannot be taken back.
The server marks "hopi_percentage_change_calculator" read-only (readOnlyHint: true), and its own name, description or input give the class "irreversible".
What this check looks forMatched text
annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}; The input addresses people (input.to): what it sends cannot be taken back.
The server marks "hopi_power_converter" read-only (readOnlyHint: true), and its own name, description or input give the class "irreversible".
What this check looks forMatched text
annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}; The description's first verb is "convert": a word for a change.
The server marks "hopi_pressure_converter" read-only (readOnlyHint: true), and its own name, description or input give the class "irreversible".
What this check looks forMatched text
annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}; The description's first verb is "convert": a word for a change.
The server marks "hopi_random_colour_generator" read-only (readOnlyHint: true), and its own name, description or input give the class "write".
What this check looks forMatched text
annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}; The description's first verb is "generate": a word for a change.
The server marks "hopi_random_coordinates" read-only (readOnlyHint: true), and its own name, description or input give the class "write".
What this check looks forMatched text
annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}; The description's first verb is "generate": a word for a change.
The server marks "hopi_random_letter_generator" read-only (readOnlyHint: true), and its own name, description or input give the class "write".
What this check looks forMatched text
annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}; The description's first verb is "generate": a word for a change.
The server marks "hopi_random_number_generator" read-only (readOnlyHint: true), and its own name, description or input give the class "write".
What this check looks forMatched text
annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}; The description's first verb is "generate": a word for a change.
The server marks "hopi_random_word_generator" read-only (readOnlyHint: true), and its own name, description or input give the class "write".
What this check looks forMatched text
annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}; The description's first verb is "generate": a word for a change.
The server marks "hopi_redundancy_pay_calculator" read-only (readOnlyHint: true), and its own name, description or input give the class "irreversible".
What this check looks forMatched 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.
The server marks "hopi_remove_duplicate_lines" read-only (readOnlyHint: true), and its own name, description or input give the class "destructive".
What this check looks forMatched 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.
The server marks "hopi_remove_duplicate_lines" not destructive (destructiveHint: false), and its own name, description or input give the class "destructive".
What this check looks forMatched 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.
The server marks "hopi_remove_extra_spaces" read-only (readOnlyHint: true), and its own name, description or input give the class "destructive".
What this check looks forMatched 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.
The server marks "hopi_remove_extra_spaces" not destructive (destructiveHint: false), and its own name, description or input give the class "destructive".
What this check looks forMatched 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.
The server marks "hopi_remove_line_breaks" read-only (readOnlyHint: true), and its own name, description or input give the class "destructive".
What this check looks forMatched 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.
The server marks "hopi_remove_line_breaks" not destructive (destructiveHint: false), and its own name, description or input give the class "destructive".
What this check looks forMatched 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.
- Warnhopi_rgb_to_hex
The server marks "hopi_rgb_to_hex" read-only (readOnlyHint: true), and its own name, description or input give the class "write".
What this check looks forMatched text
annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}; The description's first verb is "convert": a word for a change.
The server marks "hopi_ring_size_converter" read-only (readOnlyHint: true), and its own name, description or input give the class "write".
What this check looks forMatched text
annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}; The description's first verb is "convert": a word for a change.
The server marks "hopi_roman_numerals_converter" read-only (readOnlyHint: true), and its own name, description or input give the class "write".
What this check looks forMatched text
annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}; The description's first verb is "convert": a word for a change.
The server marks "hopi_satoshi_converter" read-only (readOnlyHint: true), and its own name, description or input give the class "write".
What this check looks forMatched text
annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}; The description's first verb is "convert": a word for a change.
The server marks "hopi_scientific_calculator" read-only (readOnlyHint: true), and its own name, description or input give the class "write".
What this check looks forMatched text
annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}; The description's first verb is "evaluate": a word for a change.
The server marks "hopi_set_for_life_generator" read-only (readOnlyHint: true), and its own name, description or input give the class "write".
What this check looks forMatched text
annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}; The name "hopi_set_for_life_generator" says "set": a word for a change.
The server marks "hopi_shoe_size_converter" read-only (readOnlyHint: true), and its own name, description or input give the class "write".
What this check looks forMatched text
annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}; The description's first verb is "convert": a word for a change.
The server marks "hopi_small_text_generator" read-only (readOnlyHint: true), and its own name, description or input give the class "write".
What this check looks forMatched text
annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}; The description's first verb is "convert": a word for a change.
The server marks "hopi_speed_converter" read-only (readOnlyHint: true), and its own name, description or input give the class "irreversible".
What this check looks forMatched text
annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}; The description's first verb is "convert": a word for a change.
The server marks "hopi_sql_formatter" read-only (readOnlyHint: true), and its own name, description or input give the class "write".
What this check looks forMatched 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.
The server marks "hopi_star_sign_calculator" read-only (readOnlyHint: true), and its own name, description or input give the class "write".
What this check looks forMatched text
annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}; The name "hopi_star_sign_calculator" says "star": a word for a change.
- Warnhopi_stone_to_kg
The server marks "hopi_stone_to_kg" read-only (readOnlyHint: true), and its own name, description or input give the class "write".
What this check looks forMatched text
annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}; The description's first verb is "convert": a word for a change.
The server marks "hopi_take_home_pay_calculator" read-only (readOnlyHint: true), and its own name, description or input give the class "irreversible".
What this check looks forMatched 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.
The server marks "hopi_test_card_number_generator" read-only (readOnlyHint: true), and its own name, description or input give the class "write".
What this check looks forMatched text
annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}; The description's first verb is "generate": a word for a change.
The server marks "hopi_thunderball_generator" read-only (readOnlyHint: true), and its own name, description or input give the class "write".
What this check looks forMatched text
annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}; The description's first verb is "generate": a word for a change.
The server marks "hopi_time_calculator" read-only (readOnlyHint: true), and its own name, description or input give the class "write".
What this check looks forMatched text
annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}; The description's first verb is "add": a word for a change.
The server marks "hopi_time_zone_converter" read-only (readOnlyHint: true), and its own name, description or input give the class "write".
What this check looks forMatched text
annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}; The description's first verb is "convert": a word for a change.
The server marks "hopi_ucas_points_calculator" read-only (readOnlyHint: true), and its own name, description or input give the class "write".
What this check looks forMatched text
annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}; The description's first verb is "add": a word for a change.
The server marks "hopi_unix_timestamp_converter" read-only (readOnlyHint: true), and its own name, description or input give the class "write".
What this check looks forMatched text
annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}; The description's first verb is "convert": a word for a change.
The server marks "hopi_utm_link_generator" read-only (readOnlyHint: true), and its own name, description or input give the class "write".
What this check looks forMatched text
annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}; The name "hopi_utm_link_generator" says "link": a word for a change.
The server marks "hopi_uuid_generator" read-only (readOnlyHint: true), and its own name, description or input give the class "write".
What this check looks forMatched text
annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}; The description's first verb is "generate": a word for a change.
The server marks "hopi_vat_calculator" read-only (readOnlyHint: true), and its own name, description or input give the class "write".
What this check looks forMatched text
annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}; The description's first verb is "add": a word for a change.
The server marks "hopi_volume_converter" read-only (readOnlyHint: true), and its own name, description or input give the class "irreversible".
What this check looks forMatched text
annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}; The description's first verb is "convert": a word for a change.
The server marks "hopi_weight_converter" read-only (readOnlyHint: true), and its own name, description or input give the class "irreversible".
What this check looks forMatched text
annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}; The description's first verb is "convert": a word for a change.
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".
What this check looks forMatched text
annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}; The description's first verb is "remove": a word for removing or ending something.
- Warn
The server marks "hopi_emoji_remover" not destructive (destructiveHint: false), and its own name, description or input give the class "destructive".
What this check looks forMatched text
annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}; The description's first verb is "remove": a word for removing or ending something.
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".
What this check looks forMatched 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.
- Warn
The server marks "hopi_remove_duplicate_lines" not destructive (destructiveHint: false), and its own name, description or input give the class "destructive".
What this check looks forMatched 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.
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".
What this check looks forMatched 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.
- Warn
The server marks "hopi_remove_extra_spaces" not destructive (destructiveHint: false), and its own name, description or input give the class "destructive".
What this check looks forMatched 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.
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".
What this check looks forMatched 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.
- Warn
The server marks "hopi_remove_line_breaks" not destructive (destructiveHint: false), and its own name, description or input give the class "destructive".
What this check looks forMatched 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.
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".
What this check looks forMatched text
annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}; The description's first verb is "convert": a word for a change.
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".
What this check looks forMatched text
annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}; The description's first verb is "convert": a word for a change.
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".
What this check looks forMatched text
annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}; The description's first verb is "convert": a word for a change.
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".
What this check looks forMatched text
annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}; The description's first verb is "convert": a word for a change.
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_email_link_generatorBuild a correctly percent-encoded mailto link from to, cc, bcc, subject and body fields, plus a ready to paste HTML anchor snippet.1 finding
Why it is in this group
- The name "hopi_email_link_generator" says "link": 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_email_link_generator" read-only (readOnlyHint: true), and its own name, description or input give the class "irreversible".
What this check looks forMatched text
annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}; The name "hopi_email_link_generator" says "link": a word for a change.
Description, as the server wrote it Build a correctly percent-encoded mailto link from to, cc, bcc, subject and body fields, plus a ready to paste HTML anchor snippet. Spaces are encoded as %20 and line breaks as %0D%0A, as the mailto standard expects. Source: https://hopi.co.uk/email-link-generator/
Annotations the server declares
- readOnlyHint: true
- destructiveHint: false
- idempotentHint: true
- openWorldHint: false
- title: Email link generator
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".
What this check looks forMatched text
annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}; The input addresses people (input.recipients): what it sends cannot be taken back.
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".
What this check looks forMatched text
annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}; The description's first verb is "convert": a word for a change.
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".
What this check looks forMatched 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.
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".
What this check looks forMatched text
annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}; The input addresses people (input.to): what it sends cannot be taken back.
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".
What this check looks forMatched text
annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}; The input addresses people (input.to): what it sends cannot be taken back.
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".
What this check looks forMatched text
annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}; The description's first verb is "convert": a word for a change.
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".
What this check looks forMatched text
annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}; The description's first verb is "convert": a word for a change.
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".
What this check looks forMatched 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.
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".
What this check looks forMatched text
annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}; The description's first verb is "convert": a word for a change.
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".
What this check looks forMatched 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.
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".
What this check looks forMatched text
annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}; The description's first verb is "convert": a word for a change.
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".
What this check looks forMatched text
annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}; The description's first verb is "convert": a word for a change.
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".
What this check looks forMatched text
annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}; The name "hopi_add_working_days" says "add": a word for a change.
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".
What this check looks forMatched text
annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}; The description's first verb is "generate": a word for a change.
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".
What this check looks forMatched text
annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}; The description's first verb is "convert": a word for a change.
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".
What this check looks forMatched text
annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}; The description's first verb is "convert": a word for a change.
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".
What this check looks forMatched text
annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}; The description's first verb is "convert": a word for a change.
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".
What this check looks forMatched text
annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}; The description's first verb is "convert": a word for a change.
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".
What this check looks forMatched text
annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}; The description's first verb is "convert": a word for a change.
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".
What this check looks forMatched text
annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}; The description's first verb is "convert": a word for a change.
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".
What this check looks forMatched text
annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}; The description's first verb is "generate": a word for a change.
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".
What this check looks forMatched text
annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}; The description's first verb is "convert": a word for a change.
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".
What this check looks forMatched text
annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}; The description's first verb is "convert": a word for a change.
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".
What this check looks forMatched text
annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}; The description's first verb is "add": a word for a change.
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".
What this check looks forMatched text
annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}; The description's first verb is "convert": a word for a change.
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".
What this check looks forMatched text
annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}; The description's first verb is "convert": a word for a change.
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".
What this check looks forMatched text
annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}; The description's first verb is "generate": a word for a change.
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".
What this check looks forMatched text
description: "Convert between a .env file and a JSON object. In env-to-json..."
- High
The input schema at properties.mode.description refers to ".env".
What this check looks forMatched text
inputSchema.properties.mode.description: "'env-to-json' parses a .env file into JSON, 'json-to-env' turns a J..."
- High
The input schema at properties.text.description refers to ".env".
What this check looks forMatched text
inputSchema.properties.text.description: "The .env file text, or the JSON object text, dep..."
- Warn
The server marks "hopi_env_to_json" read-only (readOnlyHint: true), and its own name, description or input give the class "write".
What this check looks forMatched text
annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}; The description's first verb is "convert": a word for a change.
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".
What this check looks forMatched text
annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}; The description's first verb is "convert": a word for a change.
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".
What this check looks forMatched text
annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}; The description's first verb is "generate": a word for a change.
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_fortune_cookieCrack open a virtual fortune cookie and receive a random cheerful fortune.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 Crack open a virtual fortune cookie and receive a random cheerful fortune. Returns the fortune. Source: https://hopi.co.uk/fortune-cookie/
Annotations the server declares
- readOnlyHint: true
- destructiveHint: false
- idempotentHint: true
- openWorldHint: false
- title: Fortune cookie
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".
What this check looks forMatched text
annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}; The description's first verb is "add": a word for a change.
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".
What this check looks forMatched text
annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}; The description's first verb is "convert": a word for a change.
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".
What this check looks forMatched text
annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}; The description's first verb is "convert": a word for a change.
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_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".
What this check looks forMatched text
annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}; The description's first verb is "convert": a word for a change.
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".
What this check looks forMatched text
annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}; The description's first verb is "convert": a word for a change.
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".
What this check looks forMatched text
annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}; The description's first verb is "convert": a word for a change.
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".
What this check looks forMatched text
annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}; The description's first verb is "convert": a word for a change.
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".
What this check looks forMatched text
annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}; The description's first verb is "convert": a word for a change.
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".
What this check looks forMatched text
annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}; The description's first verb is "convert": a word for a change.
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".
What this check looks forMatched text
annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}; The description's first verb is "convert": a word for a change.
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".
What this check looks forMatched text
annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}; The description's first verb is "convert": a word for a change.
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_link_cleanerClean and inspect a URL without visiting it: strips tracking parameters (utm_*, fbclid, gclid, msclkid, mc_eid, _hsenc and many more, grouped by network), unwraps redirect wrappers…1 finding
Why it is in this group
- The name "hopi_link_cleaner" says "link": 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_link_cleaner" read-only (readOnlyHint: true), and its own name, description or input give the class "write".
What this check looks forMatched text
annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}; The name "hopi_link_cleaner" says "link": a word for a change.
Description, as the server wrote it Clean and inspect a URL without visiting it: strips tracking parameters (utm_*, fbclid, gclid, msclkid, mc_eid, _hsenc and many more, grouped by network), unwraps redirect wrappers whose destination is in the address itself (Outlook Safe Links, Proofpoint URL Defense v2 and v3, Google /url?q=, Facebook l.php, YouTube, LinkedIn, Reddit, Slack, Tumblr) and checks the address for phishing signs: punycode and mixed-script hosts, brand names in subdomains, embedded user:pass@, IP hosts, data: and javascript: schemes, risky TLDs, link shorteners, double encoding and overlong paths. Returns the clean link, what was removed, the real registrable domain, a list of warnings and a verdict (clean, caution or avoid). It cannot know where a shortener goes or whether a site is malicious; no DNS or HTTP requests are made. Source: https://hopi.co.uk/link-cleaner/
Annotations the server declares
- readOnlyHint: true
- destructiveHint: false
- idempotentHint: true
- openWorldHint: false
- title: Link cleaner and inspector
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".
What this check looks forMatched text
annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}; The description's first verb is "convert": a word for a change.
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".
What this check looks forMatched text
annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}; The description's first verb is "generate": a word for a change.
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".
What this check looks forMatched text
annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}; The description's first verb is "generate": a word for a change.
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".
What this check looks forMatched text
annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}; The description's first verb is "generate": a word for a change.
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".
What this check looks forMatched text
annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}; The description's first verb is "convert": a word for a change.
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".
What this check looks forMatched text
annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}; The description's first verb is "convert": a word for a change.
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".
What this check looks forMatched text
annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}; The description's first verb is "convert": a word for a change.
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".
What this check looks forMatched text
annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}; The description's first verb is "convert": a word for a change.
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".
What this check looks forMatched text
annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}; The description's first verb is "convert": a word for a change.
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".
What this check looks forMatched text
annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}; The description's first verb is "convert": a word for a change.
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".
What this check looks forMatched text
annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}; The description's first verb is "convert": a word for a change.
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".
What this check looks forMatched text
annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}; The description's first verb is "generate": a word for a change.
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".
What this check looks forMatched text
annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}; The description's first verb is "generate": a word for a change.
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".
What this check looks forMatched text
annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}; The description's first verb is "generate": a word for a change.
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".
What this check looks forMatched text
annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}; The description's first verb is "generate": a word for a change.
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".
What this check looks forMatched text
annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}; The description's first verb is "generate": a word for a change.
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".
What this check looks forMatched text
annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}; The description's first verb is "convert": a word for a change.
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".
What this check looks forMatched text
annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}; The description's first verb is "convert": a word for a change.
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".
What this check looks forMatched text
annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}; The description's first verb is "convert": a word for a change.
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".
What this check looks forMatched text
annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}; The description's first verb is "convert": a word for a change.
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".
What this check looks forMatched text
annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}; The description's first verb is "evaluate": a word for a change.
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".
What this check looks forMatched text
annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}; The name "hopi_set_for_life_generator" says "set": a word for a change.
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".
What this check looks forMatched text
annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}; The description's first verb is "convert": a word for a change.
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".
What this check looks forMatched text
annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}; The description's first verb is "convert": a word for a change.
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".
What this check looks forMatched 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.
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".
What this check looks forMatched text
annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}; The name "hopi_star_sign_calculator" says "star": a word for a change.
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".
What this check looks forMatched text
annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}; The description's first verb is "convert": a word for a change.
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".
What this check looks forMatched text
annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}; The description's first verb is "generate": a word for a change.
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".
What this check looks forMatched text
annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}; The description's first verb is "generate": a word for a change.
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".
What this check looks forMatched text
annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}; The description's first verb is "add": a word for a change.
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".
What this check looks forMatched text
annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}; The description's first verb is "convert": a word for a change.
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".
What this check looks forMatched text
annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}; The description's first verb is "add": a word for a change.
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".
What this check looks forMatched text
annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}; The description's first verb is "convert": a word for a change.
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_utm_link_generatorAdd UTM campaign parameters (utm_source, utm_medium, utm_campaign, utm_term, utm_content) to a URL without breaking existing query parameters.1 finding
Why it is in this group
- The name "hopi_utm_link_generator" says "link": 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_utm_link_generator" read-only (readOnlyHint: true), and its own name, description or input give the class "write".
What this check looks forMatched text
annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}; The name "hopi_utm_link_generator" says "link": a word for a change.
Description, as the server wrote it Add UTM campaign parameters (utm_source, utm_medium, utm_campaign, utm_term, utm_content) to a URL without breaking existing query parameters. Warns on mixed case and notes any missing core parameters. Only http and https URLs are accepted. Source: https://hopi.co.uk/utm-link-generator/
Annotations the server declares
- readOnlyHint: true
- destructiveHint: false
- idempotentHint: true
- openWorldHint: false
- title: UTM link 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".
What this check looks forMatched text
annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}; The description's first verb is "generate": a word for a change.
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".
What this check looks forMatched text
annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}; The description's first verb is "add": a word for a change.
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/mcpRun in a terminal.
Claude Code permissions
Allow the reads, ask before a change, deny the deletes. Paste into .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.