What this MCP does
Provides read-only calculators, converters, validators, text utilities, encoders, and generators for everyday and technical tasks.
Tools
Input schema
{'type': 'object', 'required': ['start', 'days'], 'properties': {'days': {'type': 'integer', 'maximum': 100000, 'minimum': 0, 'description': 'Number of working days to move (0 to 100000)'}, 'start': {'type': 'string', 'format': 'date', 'description': 'Start date in YYYY-MM-DD format'}, 'direction': {'enum': ['add', 'sub'], 'type': 'string', 'default': 'add', 'description': "'add' to count forwards, 'sub' to count backwards (default 'add')"}, 'bankHolidays': {'type': 'boolean', 'default': True, 'description': 'Also skip England and Wales bank holidays, not just weekends (default true)'}}}
Output schema
{'type': 'object', 'required': ['source_url', 'summary'], 'properties': {'days': {'type': 'number'}, 'start': {'type': 'string'}, 'result': {'type': 'string'}, 'summary': {'type': 'string'}, 'weekday': {'type': 'string'}, 'complete': {'type': 'boolean'}, 'warnings': {'type': 'array'}, 'direction': {'type': 'string'}, 'resultLong': {'type': 'string'}, 'source_url': {'type': 'string', 'description': "The tool's page on hopi.co.uk (cite or open to check the figure)"}, 'daysSpanned': {'type': 'number'}, 'bankHolidays': {'type': 'boolean'}, 'holidayCoverage': {'type': 'object'}, 'holidaysSkipped': {'type': 'number'}}, 'additionalProperties': True}
Input schema
{'type': 'object', 'required': ['dob'], 'properties': {'dob': {'type': 'string', 'format': 'date', 'description': 'Date of birth in YYYY-MM-DD format'}, 'asOf': {'type': 'string', 'format': 'date', 'description': 'Optional date to measure the age at, in YYYY-MM-DD format (defaults to today)'}}}
Output schema
{'type': 'object', 'required': ['source_url', 'summary'], 'properties': {'dob': {'type': 'string'}, 'asOf': {'type': 'string'}, 'days': {'type': 'number'}, 'years': {'type': 'number'}, 'months': {'type': 'number'}, 'summary': {'type': 'string'}, 'totalDays': {'type': 'number'}, 'source_url': {'type': 'string', 'description': "The tool's page on hopi.co.uk (cite or open to check the figure)"}, 'nextBirthdayInDays': {'type': 'number'}, 'nextBirthdayWeekday': {'type': 'string'}}, 'additionalProperties': True}
Input schema
{'type': 'object', 'required': ['abv', 'ml'], 'properties': {'ml': {'type': 'number', 'description': 'Volume of the drink in millilitres, e.g. 175 for a medium glass of wine', 'exclusiveMinimum': 0}, 'abv': {'type': 'number', 'maximum': 100, 'description': 'Alcohol by volume as a percentage, e.g. 12 for 12% wine', 'exclusiveMinimum': 0}, 'drinksPerWeek': {'type': 'number', 'description': 'Optional number of these drinks per week, to work out a weekly units total', 'exclusiveMinimum': 0}}}
Output schema
{'type': 'object', 'required': ['abv', 'ml', 'source_url', 'summary', 'units'], 'properties': {'ml': {'type': 'number'}, 'abv': {'type': 'number'}, 'units': {'type': 'number'}, 'summary': {'type': 'string'}, 'source_url': {'type': 'string', 'description': "The tool's page on hopi.co.uk (cite or open to check the figure)"}}, 'additionalProperties': True}
Input schema
{'type': 'object', 'required': ['text'], 'properties': {'text': {'type': 'string', 'description': 'The text to sort, one item per line'}, 'direction': {'enum': ['asc', 'desc'], 'type': 'string', 'default': 'asc', 'description': "'asc' for A to Z (default), 'desc' for Z to A"}, 'caseInsensitive': {'type': 'boolean', 'default': False, 'description': 'Ignore letter case when sorting (default false)'}}}
Output schema
{'type': 'object', 'required': ['caseInsensitive', 'direction', 'lines', 'result', 'source_url', 'summary'], 'properties': {'lines': {'type': 'number'}, 'result': {'type': 'string'}, 'summary': {'type': 'string'}, 'direction': {'type': 'string'}, 'source_url': {'type': 'string', 'description': "The tool's page on hopi.co.uk (cite or open to check the figure)"}, 'caseInsensitive': {'type': 'boolean'}}, 'additionalProperties': True}
Input schema
{'type': 'object', 'required': ['value', 'from', 'to'], 'properties': {'to': {'enum': ['deg', 'rad', 'grad', 'turn'], 'type': 'string', 'description': 'Unit to convert to'}, 'from': {'enum': ['deg', 'rad', 'grad', 'turn'], 'type': 'string', 'description': 'Unit to convert from'}, 'value': {'type': 'number', 'description': 'The angle value to convert'}}}
Output schema
{'type': 'object', 'required': ['from', 'result', 'source_url', 'summary', 'to', 'value'], 'properties': {'to': {'type': 'string'}, 'from': {'type': 'string'}, 'value': {'type': 'number'}, 'result': {'type': 'number'}, 'summary': {'type': 'string'}, 'source_url': {'type': 'string', 'description': "The tool's page on hopi.co.uk (cite or open to check the figure)"}}, 'additionalProperties': True}
Input schema
{'type': 'object', 'required': ['value', 'from', 'to'], 'properties': {'to': {'enum': ['sqm', 'sqft', 'sqyd', 'acre', 'ha', 'sqkm', 'sqmi'], 'type': 'string', 'description': 'Unit to convert to'}, 'from': {'enum': ['sqm', 'sqft', 'sqyd', 'acre', 'ha', 'sqkm', 'sqmi'], 'type': 'string', 'description': 'Unit to convert from'}, 'value': {'type': 'number', 'minimum': 0, 'description': 'The area value to convert'}}}
Output schema
{'type': 'object', 'required': ['from', 'result', 'source_url', 'summary', 'to', 'value'], 'properties': {'to': {'type': 'string'}, 'from': {'type': 'string'}, 'value': {'type': 'number'}, 'result': {'type': 'number'}, 'summary': {'type': 'string'}, 'source_url': {'type': 'string', 'description': "The tool's page on hopi.co.uk (cite or open to check the figure)"}}, 'additionalProperties': True}
Input schema
{'type': 'object', 'allOf': [{'if': {'properties': {'mode': {'const': 'simplify'}}}, 'then': {'required': ['width', 'height']}}, {'if': {'properties': {'mode': {'const': 'solve'}}}, 'then': {'required': ['ratioW', 'ratioH']}}], 'required': ['mode'], 'properties': {'mode': {'enum': ['simplify', 'solve'], 'type': 'string', 'description': "'simplify' a width and height, or 'solve' a missing side from a ratio"}, 'width': {'type': 'number', 'description': 'Width in pixels or units (simplify mode, or the known side in solve mode)', 'exclusiveMinimum': 0}, 'height': {'type': 'number', 'description': 'Height in pixels or units (simplify mode, or the known side in solve mode)', 'exclusiveMinimum': 0}, 'ratioH': {'type': 'number', 'description': 'Ratio height part, e.g. 9 (solve mode)', 'exclusiveMinimum': 0}, 'ratioW': {'type': 'number', 'description': 'Ratio width part, e.g. 16 (solve mode)', 'exclusiveMinimum': 0}}}
Output schema
{'type': 'object', 'required': ['mode', 'ratio', 'source_url', 'summary'], 'properties': {'mode': {'type': 'string'}, 'ratio': {'type': 'string'}, 'decimal': {'type': 'string'}, 'nearest': {'type': 'string'}, 'summary': {'type': 'string'}, 'source_url': {'type': 'string', 'description': "The tool's page on hopi.co.uk (cite or open to check the figure)"}}, 'additionalProperties': True}
Input schema
{'type': 'object', 'required': ['numbers'], 'properties': {'numbers': {'type': 'string', 'minLength': 1, 'description': 'A list of numbers separated by spaces, commas, semicolons or new lines'}}}
Output schema
{'type': 'object', 'required': ['count', 'max', 'mean', 'median', 'min', 'mode', 'modeValues', 'source_url', 'sum', 'summary'], 'properties': {'max': {'type': 'number'}, 'min': {'type': 'number'}, 'sum': {'type': 'number'}, 'mean': {'type': 'number'}, 'mode': {'type': 'string'}, 'count': {'type': 'number'}, 'median': {'type': 'number'}, 'summary': {'type': 'string'}, 'modeValues': {'type': ['array', 'null']}, 'source_url': {'type': 'string', 'description': "The tool's page on hopi.co.uk (cite or open to check the figure)"}}, 'additionalProperties': True}
Input schema
{'type': 'object', 'required': ['text'], 'properties': {'mode': {'enum': ['encode', 'decode'], 'type': 'string', 'default': 'encode', 'description': "'encode' turns text into Base32, 'decode' turns Base32 back into text (default encode)"}, 'text': {'type': 'string', 'description': 'The text to encode, or the Base32 string to decode'}}}
Output schema
{'type': 'object', 'required': ['output', 'source_url', 'summary'], 'properties': {'output': {'type': 'string'}, 'summary': {'type': 'string'}, 'source_url': {'type': 'string', 'description': "The tool's page on hopi.co.uk (cite or open to check the figure)"}}, 'additionalProperties': True}
Input schema
{'type': 'object', 'required': ['text', 'mode'], 'properties': {'mode': {'enum': ['encode', 'decode'], 'type': 'string', 'description': "'encode' text to Base64, or 'decode' Base64 back to text"}, 'text': {'type': 'string', 'description': 'The text to encode, or the Base64 string to decode'}}}
Output schema
{'type': 'object', 'required': ['input', 'mode', 'output', 'source_url', 'summary'], 'properties': {'mode': {'type': 'string'}, 'input': {'type': 'string'}, 'output': {'type': 'string'}, 'summary': {'type': 'string'}, 'source_url': {'type': 'string', 'description': "The tool's page on hopi.co.uk (cite or open to check the figure)"}}, 'additionalProperties': True}
Input schema
{'type': 'object', 'allOf': [{'if': {'properties': {'mode': {'const': 'itemised'}}}, 'then': {'required': ['people', 'items']}}, {'if': {'properties': {'mode': {'const': 'even'}}}, 'then': {'required': ['total', 'peopleCount']}}], 'required': ['mode'], 'properties': {'mode': {'enum': ['itemised', 'even'], 'type': 'string', 'description': "'itemised' splits by item and who had it; 'even' splits one total equally"}, 'items': {'type': 'array', 'items': {'type': 'object', 'required': ['amount'], 'properties': {'name': {'type': 'string', 'description': 'Item name'}, 'amount': {'type': 'number', 'minimum': 0, 'description': 'Item cost in GBP'}, 'assigned': {'type': 'array', 'items': {'type': 'string'}, 'description': 'Names sharing this item; omit or empty for everyone'}}}, 'minItems': 1, 'description': 'Itemised mode: each item with its amount and the names who shared it. An item with no names is shared by everyone.'}, 'total': {'type': 'number', 'minimum': 0, 'description': 'Even mode: the bill total before tip'}, 'people': {'type': 'array', 'items': {'type': 'string'}, 'minItems': 1, 'description': 'Itemised mode: names of the people sharing the bill'}, 'tipPercent': {'type': 'number', 'default': 0, 'minimum': 0, 'description': 'Tip as a percentage (default 0)'}, 'peopleCount': {'type': 'integer', 'maximum': 1000, 'minimum': 1, 'description': 'Even mode: number of people to split between'}, 'servicePercent': {'type': 'number', 'default': 0, 'minimum': 0, 'description': 'Itemised mode: service charge as a percentage (default 0)'}}}
Output schema
{'type': 'object', 'required': ['grandTotal', 'mode', 'perPerson', 'source_url', 'summary', 'tipPercent'], 'properties': {'tip': {'type': 'number'}, 'mode': {'type': 'string'}, 'total': {'type': 'number'}, 'summary': {'type': 'string'}, 'perPerson': {'type': ['number', 'object']}, 'grandTotal': {'type': 'number'}, 'source_url': {'type': 'string', 'description': "The tool's page on hopi.co.uk (cite or open to check the figure)"}, 'tipPercent': {'type': 'number'}, 'peopleCount': {'type': 'number'}}, 'additionalProperties': True}
Input schema
{'type': 'object', 'required': [], 'properties': {'count': {'type': 'integer', 'default': 1, 'maximum': 100, 'minimum': 1, 'description': 'How many cards to generate, 1 to 100 (default 1)'}}}
Output schema
{'type': 'object', 'required': ['cards', 'count', 'source_url', 'summary'], 'properties': {'cards': {'type': 'array'}, 'count': {'type': 'number'}, 'summary': {'type': 'string'}, 'source_url': {'type': 'string', 'description': "The tool's page on hopi.co.uk (cite or open to check the figure)"}}, 'additionalProperties': True}
Input schema
{'type': 'object', 'required': ['address'], 'properties': {'address': {'type': 'string', 'description': 'The Bitcoin address to validate'}}}
Output schema
{'type': 'object', 'required': ['source_url', 'summary', 'valid'], 'properties': {'type': {'type': 'string'}, 'valid': {'type': 'boolean'}, 'network': {'type': 'string'}, 'summary': {'type': 'string'}, 'encoding': {'type': 'string'}, 'source_url': {'type': 'string', 'description': "The tool's page on hopi.co.uk (cite or open to check the figure)"}}, 'additionalProperties': True}
Input schema
{'type': 'object', 'allOf': [{'if': {'properties': {'units': {'const': 'metric'}}}, 'then': {'required': ['heightCm', 'weightKg']}}, {'if': {'properties': {'units': {'const': 'imperial'}}}, 'then': {'required': ['heightInches', 'weightPounds']}}], 'required': ['units'], 'properties': {'units': {'enum': ['metric', 'imperial'], 'type': 'string', 'description': "'metric' (cm and kg) or 'imperial' (inches and pounds)"}, 'heightCm': {'type': 'number', 'description': 'Height in centimetres (metric)', 'exclusiveMinimum': 0}, 'weightKg': {'type': 'number', 'description': 'Weight in kilograms (metric)', 'exclusiveMinimum': 0}, 'heightInches': {'type': 'number', 'description': 'Total height in inches (imperial)', 'exclusiveMinimum': 0}, 'weightPounds': {'type': 'number', 'description': 'Weight in pounds (imperial)', 'exclusiveMinimum': 0}}}
Output schema
{'type': 'object', 'required': ['bmi', 'category', 'source_url', 'summary', 'units'], 'properties': {'bmi': {'type': 'number'}, 'units': {'type': 'string'}, 'summary': {'type': 'string'}, 'category': {'type': 'string'}, 'source_url': {'type': 'string', 'description': "The tool's page on hopi.co.uk (cite or open to check the figure)"}}, 'additionalProperties': True}
Input schema
{'type': 'object', 'allOf': [{'if': {'properties': {'sex': {'const': 'female'}}}, 'then': {'required': ['hip']}}], 'required': ['sex', 'units', 'height', 'neck', 'waist'], 'properties': {'hip': {'type': 'number', 'description': 'Hip circumference, females only (cm if metric, inches if imperial)', 'exclusiveMinimum': 0}, 'sex': {'enum': ['male', 'female'], 'type': 'string', 'description': 'Biological sex, determines the formula and whether hip is needed'}, 'neck': {'type': 'number', 'description': 'Neck circumference (cm if metric, inches if imperial)', 'exclusiveMinimum': 0}, 'units': {'enum': ['metric', 'imperial'], 'type': 'string', 'description': "'metric' (cm) or 'imperial' (inches)"}, 'waist': {'type': 'number', 'description': 'Waist circumference (cm if metric, inches if imperial)', 'exclusiveMinimum': 0}, 'height': {'type': 'number', 'description': 'Height (cm if metric, inches if imperial)', 'exclusiveMinimum': 0}, 'weight': {'type': 'number', 'description': 'Optional weight (kg if metric, pounds if imperial) for fat and lean mass', 'exclusiveMinimum': 0}}}
Output schema
{'type': 'object', 'required': ['bodyFatPercent', 'category', 'sex', 'source_url', 'summary', 'units'], 'properties': {'sex': {'type': 'string'}, 'units': {'type': 'string'}, 'summary': {'type': 'string'}, 'category': {'type': 'string'}, 'source_url': {'type': 'string', 'description': "The tool's page on hopi.co.uk (cite or open to check the figure)"}, 'bodyFatPercent': {'type': 'number'}}, 'additionalProperties': True}
Input schema
{'type': 'object', 'required': ['text', 'shift'], 'properties': {'mode': {'enum': ['encode', 'decode'], 'type': 'string', 'default': 'encode', 'description': "'encode' to apply the shift, 'decode' to reverse it (default encode)"}, 'text': {'type': 'string', 'description': 'The text to transform'}, 'shift': {'type': 'integer', 'description': 'How many places to shift each letter (e.g. 3, or 13 for ROT13)'}}}
Output schema
{'type': 'object', 'required': ['mode', 'result', 'shift', 'source_url', 'summary'], 'properties': {'mode': {'type': 'string'}, 'shift': {'type': 'number'}, 'result': {'type': 'string'}, 'summary': {'type': 'string'}, 'source_url': {'type': 'string', 'description': "The tool's page on hopi.co.uk (cite or open to check the figure)"}}, 'additionalProperties': True}
Input schema
{'type': 'object', 'required': ['start', 'end', 'years'], 'properties': {'end': {'type': 'number', 'minimum': 0, 'description': 'Ending value'}, 'start': {'type': 'number', 'description': 'Starting value (must be greater than zero)', 'exclusiveMinimum': 0}, 'years': {'type': 'number', 'maximum': 200, 'description': 'Number of years over the period (may be a fraction)', 'exclusiveMinimum': 0}}}
Output schema
{'type': 'object', 'required': ['source_url', 'summary'], 'properties': {'end': {'type': 'number'}, 'start': {'type': 'number'}, 'years': {'type': 'number'}, 'summary': {'type': 'string'}, 'source_url': {'type': 'string', 'description': "The tool's page on hopi.co.uk (cite or open to check the figure)"}, 'cagrPercent': {'type': 'number'}, 'growthMultiple': {'type': 'number'}, 'shortPeriodWarning': {'type': 'boolean'}, 'totalGrowthPercent': {'type': 'number'}}, 'additionalProperties': True}
Input schema
{'type': 'object', 'required': ['amount', 'unit'], 'properties': {'unit': {'enum': ['kcal', 'kj'], 'type': 'string', 'description': "The unit of the amount: 'kcal' (kilocalories) or 'kj' (kilojoules)"}, 'amount': {'type': 'number', 'description': 'The energy amount to convert'}}}
Output schema
{'type': 'object', 'required': ['kcal', 'kj', 'source_url', 'summary'], 'properties': {'kj': {'type': 'number'}, 'kcal': {'type': 'number'}, 'summary': {'type': 'string'}, 'source_url': {'type': 'string', 'description': "The tool's page on hopi.co.uk (cite or open to check the figure)"}}, 'additionalProperties': True}
Input schema
{'type': 'object', 'required': ['text', 'mode'], 'properties': {'mode': {'enum': ['upper', 'lower', 'title', 'sentence'], 'type': 'string', 'description': 'The target case'}, 'text': {'type': 'string', 'description': 'The text to convert'}}}
Output schema
{'type': 'object', 'required': ['mode', 'result', 'source_url', 'summary'], 'properties': {'mode': {'type': 'string'}, 'result': {'type': 'string'}, 'summary': {'type': 'string'}, 'source_url': {'type': 'string', 'description': "The tool's page on hopi.co.uk (cite or open to check the figure)"}}, 'additionalProperties': True}
Input schema
{'type': 'object', 'required': ['catAge'], 'properties': {'catAge': {'type': 'number', 'maximum': 40, 'minimum': 0, 'description': "The cat's age in years (0 to 40)"}}}
Output schema
{'type': 'object', 'required': ['source_url', 'summary'], 'properties': {'stage': {'type': 'string'}, 'catAge': {'type': 'number'}, 'summary': {'type': 'string'}, 'humanYears': {'type': 'number'}, 'source_url': {'type': 'string', 'description': "The tool's page on hopi.co.uk (cite or open to check the figure)"}}, 'additionalProperties': True}
Input schema
{'type': 'object', 'required': ['value', 'direction'], 'properties': {'value': {'type': 'number', 'description': 'The temperature value to convert'}, 'direction': {'enum': ['c-to-f', 'f-to-c'], 'type': 'string', 'description': "'c-to-f' converts Celsius to Fahrenheit, 'f-to-c' converts Fahrenheit to Celsius"}}}
Output schema
{'type': 'object', 'required': ['celsius', 'direction', 'fahrenheit', 'kelvin', 'source_url', 'summary'], 'properties': {'kelvin': {'type': 'number'}, 'celsius': {'type': 'number'}, 'summary': {'type': 'string'}, 'direction': {'type': 'string'}, 'fahrenheit': {'type': 'number'}, 'source_url': {'type': 'string', 'description': "The tool's page on hopi.co.uk (cite or open to check the figure)"}}, 'additionalProperties': True}
Input schema
{'type': 'object', 'required': ['text'], 'properties': {'text': {'type': 'string', 'description': 'The text to measure'}}}
Output schema
{'type': 'object', 'required': ['source_url', 'summary'], 'properties': {'words': {'type': 'number'}, 'summary': {'type': 'string'}, 'smsParts': {'type': 'number'}, 'characters': {'type': 'number'}, 'source_url': {'type': 'string', 'description': "The tool's page on hopi.co.uk (cite or open to check the figure)"}, 'tweetRemaining': {'type': 'number'}, 'charactersNoSpaces': {'type': 'number'}}, 'additionalProperties': True}
Input schema
{'type': 'object', 'required': ['text'], 'properties': {'text': {'type': 'string', 'minLength': 1, 'description': 'The unknown text to identify and decode'}}}
Output schema
{'type': 'object', 'required': ['candidates', 'chain', 'plaintext', 'source_url', 'summary'], 'properties': {'chain': {'type': 'array'}, 'summary': {'type': 'string'}, 'plaintext': {'type': 'string'}, 'candidates': {'type': 'array'}, 'source_url': {'type': 'string', 'description': "The tool's page on hopi.co.uk (cite or open to check the figure)"}}, 'additionalProperties': True}
Input schema
{'type': 'object', 'allOf': [{'if': {'properties': {'direction': {'const': 'cm-to-feet'}}}, 'then': {'required': ['cm']}}], 'required': ['direction'], 'properties': {'cm': {'type': 'number', 'minimum': 0, 'description': 'Centimetres (for cm-to-feet)'}, 'feet': {'type': 'number', 'minimum': 0, 'description': 'Feet (for feet-to-cm)'}, 'inches': {'type': 'number', 'minimum': 0, 'description': 'Inches (for feet-to-cm, optional)'}, 'direction': {'enum': ['cm-to-feet', 'feet-to-cm'], 'type': 'string', 'description': 'Which way to convert'}}}
Output schema
{'type': 'object', 'required': ['cm', 'direction', 'feet', 'inches', 'source_url', 'summary'], 'properties': {'cm': {'type': 'number'}, 'feet': {'type': 'number'}, 'inches': {'type': 'number'}, 'summary': {'type': 'string'}, 'direction': {'type': 'string'}, 'source_url': {'type': 'string', 'description': "The tool's page on hopi.co.uk (cite or open to check the figure)"}, 'feetDecimal': {'type': 'number'}, 'totalInches': {'type': 'number'}}, 'additionalProperties': True}
Input schema
{'type': 'object', 'allOf': [{'if': {'properties': {'mode': {'const': 'cmyk_to_rgb'}}}, 'then': {'required': ['c', 'm', 'y', 'k']}}, {'if': {'properties': {'mode': {'const': 'rgb_to_cmyk'}}}, 'then': {'required': ['r', 'g', 'b']}}], 'required': ['mode'], 'properties': {'b': {'type': 'integer', 'maximum': 255, 'minimum': 0, 'description': 'Blue 0 to 255 (for rgb_to_cmyk)'}, 'c': {'type': 'number', 'maximum': 100, 'minimum': 0, 'description': 'Cyan 0 to 100 (for cmyk_to_rgb)'}, 'g': {'type': 'integer', 'maximum': 255, 'minimum': 0, 'description': 'Green 0 to 255 (for rgb_to_cmyk)'}, 'k': {'type': 'number', 'maximum': 100, 'minimum': 0, 'description': 'Key/black 0 to 100 (for cmyk_to_rgb)'}, 'm': {'type': 'number', 'maximum': 100, 'minimum': 0, 'description': 'Magenta 0 to 100 (for cmyk_to_rgb)'}, 'r': {'type': 'integer', 'maximum': 255, 'minimum': 0, 'description': 'Red 0 to 255 (for rgb_to_cmyk)'}, 'y': {'type': 'number', 'maximum': 100, 'minimum': 0, 'description': 'Yellow 0 to 100 (for cmyk_to_rgb)'}, 'mode': {'enum': ['cmyk_to_rgb', 'rgb_to_cmyk'], 'type': 'string', 'description': 'Direction of conversion'}}}
Output schema
{'type': 'object', 'required': ['mode', 'source_url', 'summary'], 'properties': {'hex': {'type': 'string'}, 'rgb': {'type': 'array'}, 'mode': {'type': 'string'}, 'summary': {'type': 'string'}, 'rgbString': {'type': 'string'}, 'source_url': {'type': 'string', 'description': "The tool's page on hopi.co.uk (cite or open to check the figure)"}}, 'additionalProperties': True}
Input schema
{'type': 'object', 'required': [], 'properties': {'count': {'type': 'integer', 'default': 1, 'maximum': 10000, 'minimum': 1, 'description': 'How many coins to flip, 1 to 10000 (default 1)'}}}
Output schema
{'type': 'object', 'required': ['count', 'heads', 'results', 'source_url', 'summary', 'tails'], 'properties': {'count': {'type': 'number'}, 'heads': {'type': 'number'}, 'tails': {'type': 'number'}, 'results': {'type': 'array'}, 'summary': {'type': 'string'}, 'source_url': {'type': 'string', 'description': "The tool's page on hopi.co.uk (cite or open to check the figure)"}}, 'additionalProperties': True}
Input schema
{'type': 'object', 'required': ['hex'], 'properties': {'hex': {'type': 'string', 'pattern': '^#?([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$', 'description': 'Hex colour code, e.g. #DC143C or #F00'}}}
Output schema
{'type': 'object', 'required': ['source_url', 'summary'], 'properties': {'name': {'type': 'string'}, 'exact': {'type': 'boolean'}, 'input': {'type': 'string'}, 'names': {'type': 'array'}, 'summary': {'type': 'string'}, 'distance': {'type': 'number'}, 'nearestHex': {'type': 'string'}, 'source_url': {'type': 'string', 'description': "The tool's page on hopi.co.uk (cite or open to check the figure)"}}, 'additionalProperties': True}
Input schema
{'type': 'object', 'required': ['hex'], 'properties': {'hex': {'type': 'string', 'pattern': '^#?[0-9a-fA-F]{6}$', 'description': 'Base colour as a six-digit hex code, e.g. #1F8A70'}, 'scheme': {'enum': ['analogous', 'complementary', 'triadic', 'mixed'], 'type': 'string', 'default': 'analogous', 'description': 'Colour scheme (default analogous)'}}}
Output schema
{'type': 'object', 'required': ['source_url', 'summary'], 'properties': {'base': {'type': 'string'}, 'scheme': {'type': 'string'}, 'palette': {'type': 'array'}, 'summary': {'type': 'string'}, 'source_url': {'type': 'string', 'description': "The tool's page on hopi.co.uk (cite or open to check the figure)"}}, 'additionalProperties': True}
Input schema
{'type': 'object', 'required': ['hex'], 'properties': {'hex': {'type': 'string', 'pattern': '^#?[0-9a-fA-F]{6}$', 'description': 'Six-digit hex colour code, e.g. #1F8A70'}}}
Output schema
{'type': 'object', 'required': ['source_url', 'summary'], 'properties': {'hex': {'type': 'string'}, 'hsl': {'type': 'array'}, 'rgb': {'type': 'array'}, 'summary': {'type': 'string'}, 'hslString': {'type': 'string'}, 'rgbString': {'type': 'string'}, 'source_url': {'type': 'string', 'description': "The tool's page on hopi.co.uk (cite or open to check the figure)"}}, 'additionalProperties': True}
Input schema
{'type': 'object', 'required': ['hex'], 'properties': {'hex': {'type': 'string', 'pattern': '^#?[0-9a-fA-F]{6}$', 'description': 'Base colour as a six-digit hex code, e.g. #1F8A70'}}}
Output schema
{'type': 'object', 'required': ['source_url', 'summary'], 'properties': {'base': {'type': 'string'}, 'tints': {'type': 'array'}, 'shades': {'type': 'array'}, 'summary': {'type': 'string'}, 'source_url': {'type': 'string', 'description': "The tool's page on hopi.co.uk (cite or open to check the figure)"}}, 'additionalProperties': True}
Input schema
{'type': 'object', 'required': ['items', 'choose'], 'properties': {'items': {'type': 'array', 'maxItems': 10000, 'minItems': 1, 'description': 'The list of items to choose from'}, 'choose': {'type': 'integer', 'minimum': 1, 'description': 'How many items to pick in each combination (r)'}}}
Output schema
{'type': 'object', 'required': ['source_url', 'summary'], 'properties': {'count': {'type': 'string'}, 'summary': {'type': 'string'}, 'truncated': {'type': 'boolean'}, 'source_url': {'type': 'string', 'description': "The tool's page on hopi.co.uk (cite or open to check the figure)"}, 'combinations': {'type': 'array'}}, 'additionalProperties': True}
Input schema
{'type': 'object', 'required': ['rate', 'years'], 'properties': {'rate': {'type': 'number', 'minimum': 0, 'description': 'Annual interest rate as a percentage'}, 'years': {'type': 'number', 'maximum': 100, 'description': 'Term in years (1 to 100)', 'exclusiveMinimum': 0}, 'monthly': {'type': 'number', 'default': 0, 'minimum': 0, 'description': 'Monthly contribution in GBP (default 0)'}, 'principal': {'type': 'number', 'default': 0, 'minimum': 0, 'description': 'Starting deposit in GBP (default 0)'}}}
Output schema
{'type': 'object', 'required': ['finalBalance', 'interestEarned', 'monthly', 'months', 'principal', 'rate', 'source_url', 'summary', 'totalPaidIn', 'years'], 'properties': {'rate': {'type': 'number'}, 'years': {'type': 'number'}, 'months': {'type': 'number'}, 'monthly': {'type': 'number'}, 'summary': {'type': 'string'}, 'principal': {'type': 'number'}, 'source_url': {'type': 'string', 'description': "The tool's page on hopi.co.uk (cite or open to check the figure)"}, 'totalPaidIn': {'type': 'number'}, 'finalBalance': {'type': 'number'}, 'interestEarned': {'type': 'number'}}, 'additionalProperties': True}
Input schema
{'type': 'object', 'required': ['foreground', 'background'], 'properties': {'background': {'type': 'string', 'pattern': '^#?[0-9a-fA-F]{6}$', 'description': 'Background colour as a six-digit hex code, e.g. #FFFFFF'}, 'foreground': {'type': 'string', 'pattern': '^#?[0-9a-fA-F]{6}$', 'description': 'Text colour as a six-digit hex code, e.g. #767676'}}}
Output schema
{'type': 'object', 'required': ['source_url', 'summary'], 'properties': {'ratio': {'type': 'number'}, 'aaLarge': {'type': 'boolean'}, 'summary': {'type': 'string'}, 'verdict': {'type': 'string'}, 'aaNormal': {'type': 'boolean'}, 'aaaLarge': {'type': 'boolean'}, 'aaaNormal': {'type': 'boolean'}, 'background': {'type': 'string'}, 'foreground': {'type': 'string'}, 'source_url': {'type': 'string', 'description': "The tool's page on hopi.co.uk (cite or open to check the figure)"}, 'ratioString': {'type': 'string'}}, 'additionalProperties': True}
Input schema
{'type': 'object', 'required': ['expression'], 'properties': {'expression': {'type': 'string', 'minLength': 1, 'description': "A five-field cron expression, for example '*/5 9-17 * * MON-FRI', or a shortcut like @daily"}}}
Output schema
{'type': 'object', 'required': ['dayOfMonth', 'dayOfWeek', 'english', 'expression', 'hour', 'minute', 'month', 'source_url', 'summary'], 'properties': {'hour': {'type': 'string'}, 'month': {'type': 'string'}, 'minute': {'type': 'string'}, 'english': {'type': 'string'}, 'summary': {'type': 'string'}, 'dayOfWeek': {'type': 'string'}, 'dayOfMonth': {'type': 'string'}, 'expression': {'type': 'string'}, 'source_url': {'type': 'string', 'description': "The tool's page on hopi.co.uk (cite or open to check the figure)"}}, 'additionalProperties': True}
Input schema
{'type': 'object', 'required': ['buy', 'quantity'], 'properties': {'buy': {'type': 'number', 'description': 'Buy price per unit', 'exclusiveMinimum': 0}, 'fee': {'type': 'number', 'default': 0, 'minimum': 0, 'description': 'Fee percentage charged on each side (default 0, must be 0 to under 100)', 'exclusiveMaximum': 100}, 'sell': {'type': 'number', 'minimum': 0, 'description': 'Sell price per unit (optional; omit to see breakeven only)'}, 'quantity': {'type': 'number', 'description': 'Quantity of coin traded', 'exclusiveMinimum': 0}}}
Output schema
{'type': 'object', 'required': ['breakeven', 'breakevenString', 'source_url', 'summary'], 'properties': {'profit': {'type': 'number'}, 'summary': {'type': 'string'}, 'breakeven': {'type': 'number'}, 'totalFees': {'type': 'number'}, 'source_url': {'type': 'string', 'description': "The tool's page on hopi.co.uk (cite or open to check the figure)"}, 'profitString': {'type': 'string'}, 'returnPercent': {'type': 'number'}, 'breakevenString': {'type': 'string'}, 'totalFeesString': {'type': 'string'}, 'returnPercentString': {'type': 'string'}}, 'additionalProperties': True}
Input schema
{'type': 'object', 'required': ['colour1', 'colour2'], 'properties': {'type': {'enum': ['linear', 'radial'], 'type': 'string', 'default': 'linear', 'description': 'Gradient type (default linear)'}, 'angle': {'type': 'number', 'default': 90, 'maximum': 360, 'minimum': 0, 'description': 'Angle in degrees for a linear gradient (default 90)'}, 'colour1': {'type': 'string', 'description': 'First colour, e.g. #FF512F'}, 'colour2': {'type': 'string', 'description': 'Second colour, e.g. #DD2476'}}}
Output schema
{'type': 'object', 'required': ['angle', 'css', 'gradient', 'source_url', 'summary', 'type'], 'properties': {'css': {'type': 'string'}, 'type': {'type': 'string'}, 'angle': {'type': ['number', 'null']}, 'summary': {'type': 'string'}, 'gradient': {'type': 'string'}, 'source_url': {'type': 'string', 'description': "The tool's page on hopi.co.uk (cite or open to check the figure)"}}, 'additionalProperties': True}
Input schema
{'type': 'object', 'required': ['css'], 'properties': {'css': {'type': 'string', 'minLength': 1, 'description': 'The CSS source to minify'}}}
Output schema
{'type': 'object', 'required': ['source_url', 'summary'], 'properties': {'css': {'type': 'string'}, 'summary': {'type': 'string'}, 'afterBytes': {'type': 'number'}, 'savedBytes': {'type': 'number'}, 'source_url': {'type': 'string', 'description': "The tool's page on hopi.co.uk (cite or open to check the figure)"}, 'beforeBytes': {'type': 'number'}, 'savedPercent': {'type': 'number'}}, 'additionalProperties': True}
Input schema
{'type': 'object', 'required': ['csv'], 'properties': {'csv': {'type': 'string', 'minLength': 1, 'description': 'The CSV text to convert'}, 'firstRowHeaders': {'type': 'boolean', 'default': True, 'description': 'When true, the first row supplies the object keys; when false, every row becomes a plain array of strings (default true)'}}}
Output schema
{'type': 'object', 'required': ['source_url', 'summary'], 'properties': {'data': {'type': 'array'}, 'json': {'type': 'string'}, 'rows': {'type': 'number'}, 'summary': {'type': 'string'}, 'source_url': {'type': 'string', 'description': "The tool's page on hopi.co.uk (cite or open to check the figure)"}, 'firstRowHeaders': {'type': 'boolean'}}, 'additionalProperties': True}
Input schema
{'type': 'object', 'required': ['cups', 'ingredient'], 'properties': {'cups': {'type': 'number', 'minimum': 0, 'description': 'Number of US cups'}, 'ingredient': {'enum': ['flour', 'caster', 'brown', 'butter', 'cocoa', 'oats', 'rice', 'icing'], 'type': 'string', 'description': 'The ingredient'}}}
Output schema
{'type': 'object', 'required': ['source_url', 'summary'], 'properties': {'cups': {'type': 'number'}, 'grams': {'type': 'number'}, 'summary': {'type': 'string'}, 'ingredient': {'type': 'string'}, 'source_url': {'type': 'string', 'description': "The tool's page on hopi.co.uk (cite or open to check the figure)"}, 'gramsPerCup': {'type': 'number'}}, 'additionalProperties': True}
Input schema
{'type': 'object', 'required': ['amount', 'from', 'to'], 'properties': {'to': {'type': 'string', 'pattern': '^[A-Za-z]{3}$', 'maxLength': 3, 'minLength': 3, 'description': 'Currency to convert to, ISO 4217 code e.g. EUR'}, 'from': {'type': 'string', 'pattern': '^[A-Za-z]{3}$', 'maxLength': 3, 'minLength': 3, 'description': 'Currency to convert from, ISO 4217 code e.g. GBP'}, 'amount': {'type': 'number', 'description': 'The amount to convert'}}}
Output schema
{'type': 'object', 'required': ['source_url', 'summary'], 'properties': {'to': {'type': 'string'}, 'from': {'type': 'string'}, 'rate': {'type': 'number'}, 'amount': {'type': 'number'}, 'result': {'type': 'number'}, 'summary': {'type': 'string'}, 'asOfUnix': {'type': ['number', 'null']}, 'complete': {'type': 'boolean'}, 'warnings': {'type': 'array'}, 'source_url': {'type': 'string', 'description': "The tool's page on hopi.co.uk (cite or open to check the figure)"}, 'rateAgeHours': {}}, 'additionalProperties': True}
Input schema
{'type': 'object', 'required': ['value', 'from', 'to'], 'properties': {'to': {'enum': ['B', 'KB', 'MB', 'GB', 'TB'], 'type': 'string', 'description': 'Unit to convert to'}, 'from': {'enum': ['B', 'KB', 'MB', 'GB', 'TB'], 'type': 'string', 'description': 'Unit to convert from'}, 'value': {'type': 'number', 'minimum': 0, 'description': 'The size value to convert'}, 'binary': {'type': 'boolean', 'default': False, 'description': 'Use binary units (1 KB = 1024 bytes) instead of decimal (default false)'}}}
Output schema
{'type': 'object', 'required': ['binary', 'from', 'result', 'source_url', 'summary', 'to', 'value'], 'properties': {'to': {'type': 'string'}, 'from': {'type': 'string'}, 'value': {'type': 'number'}, 'binary': {'type': 'boolean'}, 'result': {'type': 'number'}, 'summary': {'type': 'string'}, 'source_url': {'type': 'string', 'description': "The tool's page on hopi.co.uk (cite or open to check the figure)"}}, 'additionalProperties': True}
Input schema
{'type': 'object', 'required': ['date', 'amount'], 'properties': {'date': {'type': 'string', 'format': 'date', 'description': 'Start date in YYYY-MM-DD format'}, 'unit': {'enum': ['days', 'weeks', 'months', 'years'], 'type': 'string', 'default': 'days', 'description': "Unit to move by (default 'days')"}, 'amount': {'type': 'integer', 'maximum': 100000, 'minimum': 0, 'description': 'How many units to move (0 to 100000)'}, 'direction': {'enum': ['add', 'subtract'], 'type': 'string', 'default': 'add', 'description': "'add' to move forwards, 'subtract' to move backwards (default 'add')"}}}
Output schema
{'type': 'object', 'required': ['amount', 'date', 'direction', 'result', 'resultLong', 'source_url', 'summary', 'unit', 'weekday'], 'properties': {'date': {'type': 'string'}, 'unit': {'type': 'string'}, 'amount': {'type': 'number'}, 'result': {'type': 'string'}, 'summary': {'type': 'string'}, 'weekday': {'type': 'string'}, 'direction': {'type': 'string'}, 'resultLong': {'type': 'string'}, 'source_url': {'type': 'string', 'description': "The tool's page on hopi.co.uk (cite or open to check the figure)"}}, 'additionalProperties': True}
Input schema
{'type': 'object', 'required': ['date'], 'properties': {'date': {'type': 'string', 'format': 'date', 'description': 'The date in YYYY-MM-DD format'}}}
Output schema
{'type': 'object', 'required': ['source_url', 'summary'], 'properties': {'date': {'type': 'string'}, 'summary': {'type': 'string'}, 'weekday': {'type': 'string'}, 'fullDate': {'type': 'string'}, 'source_url': {'type': 'string', 'description': "The tool's page on hopi.co.uk (cite or open to check the figure)"}, 'thisYearWeekday': {'type': 'string'}}, 'additionalProperties': True}
Input schema
{'type': 'object', 'allOf': [{'if': {'properties': {'mode': {'const': 'to_salary'}}}, 'then': {'required': ['dayRate']}}, {'if': {'properties': {'mode': {'const': 'to_rate'}}}, 'then': {'required': ['salary']}}], 'required': ['mode'], 'properties': {'mode': {'enum': ['to_salary', 'to_rate'], 'type': 'string', 'description': "'to_salary' from a day rate, or 'to_rate' from a salary"}, 'salary': {'type': 'number', 'maximum': 100000000, 'minimum': 0, 'description': 'Annual salary in GBP (required for to_rate)'}, 'dayRate': {'type': 'number', 'maximum': 1000000, 'minimum': 0, 'description': 'Day rate in GBP (required for to_salary)'}, 'workingDays': {'type': 'number', 'default': 220, 'maximum': 365, 'minimum': 1, 'description': 'Billable working days per year, 1 to 365 (default 220)'}}}
Output schema
{'type': 'object', 'required': ['dayRate', 'mode', 'source_url', 'summary', 'weekly', 'workingDays'], 'properties': {'mode': {'type': 'string'}, 'annual': {'type': 'number'}, 'weekly': {'type': 'number'}, 'dayRate': {'type': 'number'}, 'monthly': {'type': 'number'}, 'summary': {'type': 'string'}, 'source_url': {'type': 'string', 'description': "The tool's page on hopi.co.uk (cite or open to check the figure)"}, 'workingDays': {'type': 'number'}}, 'additionalProperties': True}
Input schema
{'type': 'object', 'required': ['from', 'to'], 'properties': {'to': {'type': 'string', 'format': 'date', 'description': 'End date in YYYY-MM-DD format'}, 'from': {'type': 'string', 'format': 'date', 'description': 'Start date in YYYY-MM-DD format'}, 'inclusive': {'type': 'boolean', 'default': False, 'description': 'Count both end days rather than excluding the end day (default false)'}}}
Output schema
{'type': 'object', 'required': ['days', 'from', 'inclusive', 'remainderDays', 'source_url', 'summary', 'swapped', 'to', 'weekdays', 'weeks'], 'properties': {'to': {'type': 'string'}, 'days': {'type': 'number'}, 'from': {'type': 'string'}, 'weeks': {'type': 'number'}, 'summary': {'type': 'string'}, 'swapped': {'type': 'boolean'}, 'weekdays': {'type': 'number'}, 'inclusive': {'type': 'boolean'}, 'source_url': {'type': 'string', 'description': "The tool's page on hopi.co.uk (cite or open to check the figure)"}, 'remainderDays': {'type': 'number'}}, 'additionalProperties': True}
Input schema
{'type': 'object', 'required': [], 'properties': {'from': {'type': 'string', 'format': 'date', 'description': 'Optional date to count from, in YYYY-MM-DD format (defaults to today)'}}}
Output schema
{'type': 'object', 'required': ['source_url', 'summary'], 'properties': {'sleeps': {'type': 'number'}, 'summary': {'type': 'string'}, 'source_url': {'type': 'string', 'description': "The tool's page on hopi.co.uk (cite or open to check the figure)"}, 'christmasDate': {'type': 'string'}, 'isChristmasDay': {'type': 'boolean'}, 'christmasWeekday': {'type': 'string'}}, 'additionalProperties': True}
Input schema
{'type': 'object', 'required': ['buys'], 'properties': {'buys': {'type': 'array', 'items': {'type': 'object', 'required': ['amount', 'price'], 'properties': {'price': {'type': 'number', 'description': 'Price paid per unit on this buy', 'exclusiveMinimum': 0}, 'amount': {'type': 'number', 'description': 'Money spent on this buy', 'exclusiveMinimum': 0}}}, 'minItems': 1, 'description': 'The list of buys'}, 'currentPrice': {'type': 'number', 'description': 'Current price per unit (optional), to value the position now', 'exclusiveMinimum': 0}}}
Output schema
{'type': 'object', 'required': ['averageCost', 'averageCostString', 'buys', 'coinsAcquired', 'coinsAcquiredString', 'source_url', 'summary', 'totalInvested', 'totalInvestedString'], 'properties': {'buys': {'type': 'number'}, 'summary': {'type': 'string'}, 'source_url': {'type': 'string', 'description': "The tool's page on hopi.co.uk (cite or open to check the figure)"}, 'averageCost': {'type': 'number'}, 'coinsAcquired': {'type': 'number'}, 'totalInvested': {'type': 'number'}, 'averageCostString': {'type': 'string'}, 'coinsAcquiredString': {'type': 'string'}, 'totalInvestedString': {'type': 'string'}}, 'additionalProperties': True}
Input schema
{'type': 'object', 'required': [], 'properties': {'sides': {'type': 'integer', 'default': 6, 'minimum': 2, 'description': 'Number of sides on each die (default 6)'}, 'quantity': {'type': 'integer', 'default': 1, 'maximum': 20, 'minimum': 1, 'description': 'How many dice to roll, 1 to 20 (default 1)'}}}
Output schema
{'type': 'object', 'required': ['highest', 'lowest', 'quantity', 'results', 'sides', 'source_url', 'summary', 'total'], 'properties': {'sides': {'type': 'number'}, 'total': {'type': 'number'}, 'lowest': {'type': 'number'}, 'highest': {'type': 'number'}, 'results': {'type': 'array'}, 'summary': {'type': 'string'}, 'quantity': {'type': 'number'}, 'source_url': {'type': 'string', 'description': "The tool's page on hopi.co.uk (cite or open to check the figure)"}}, 'additionalProperties': True}
Input schema
{'type': 'object', 'required': ['a', 'b'], 'properties': {'a': {'type': 'string', 'description': 'The original (left) text'}, 'b': {'type': 'string', 'description': 'The changed (right) text'}}}
Output schema
{'type': 'object', 'required': ['source_url', 'summary'], 'properties': {'diff': {'type': 'string'}, 'added': {'type': 'number'}, 'removed': {'type': 'number'}, 'summary': {'type': 'string'}, 'identical': {'type': 'boolean'}, 'addedLines': {'type': 'array'}, 'source_url': {'type': 'string', 'description': "The tool's page on hopi.co.uk (cite or open to check the figure)"}, 'removedLines': {'type': 'array'}}, 'additionalProperties': True}
Input schema
{'type': 'object', 'allOf': [{'if': {'properties': {'mode': {'const': 'pct'}}}, 'then': {'required': ['percentOff'], 'properties': {'price': {'minimum': 0}}}}, {'if': {'properties': {'mode': {'const': 'fixed'}}}, 'then': {'required': ['amountOff'], 'properties': {'price': {'exclusiveMinimum': 0}}}}, {'if': {'properties': {'mode': {'const': 'find'}}}, 'then': {'required': ['finalPrice'], 'properties': {'price': {'exclusiveMinimum': 0}}}}], 'required': ['mode', 'price'], 'properties': {'mode': {'enum': ['pct', 'fixed', 'find'], 'type': 'string', 'description': "'pct' percentage off, 'fixed' pound amount off, or 'find' the discount from two prices"}, 'price': {'type': 'number', 'description': 'The original price (used in all modes)'}, 'amountOff': {'type': 'number', 'description': "Fixed pound amount off (mode 'fixed' only)"}, 'finalPrice': {'type': 'number', 'description': "The final price paid (mode 'find' only)"}, 'percentOff': {'type': 'number', 'description': "Discount percentage (mode 'pct' only)"}}}
Output schema
{'type': 'object', 'required': ['mode', 'price', 'saving', 'source_url', 'summary'], 'properties': {'mode': {'type': 'string'}, 'price': {'type': 'number'}, 'saving': {'type': 'number'}, 'summary': {'type': 'string'}, 'salePrice': {'type': 'number'}, 'percentOff': {'type': 'number'}, 'source_url': {'type': 'string', 'description': "The tool's page on hopi.co.uk (cite or open to check the figure)"}, 'effectiveDiscount': {'type': 'number'}}, 'additionalProperties': True}
Input schema
{'type': 'object', 'required': ['dogAge'], 'properties': {'size': {'enum': ['small', 'medium', 'large'], 'type': 'string', 'default': 'medium', 'description': "Dog size band (default 'medium')"}, 'dogAge': {'type': 'number', 'maximum': 30, 'minimum': 0, 'description': "The dog's age in years (0 to 30)"}}}
Output schema
{'type': 'object', 'required': ['source_url', 'summary'], 'properties': {'size': {'type': 'string'}, 'dogAge': {'type': 'number'}, 'summary': {'type': 'string'}, 'humanYears': {'type': 'number'}, 'source_url': {'type': 'string', 'description': "The tool's page on hopi.co.uk (cite or open to check the figure)"}}, 'additionalProperties': True}
Input schema
{'type': 'object', 'required': ['size', 'sizeUnit', 'speed', 'speedUnit'], 'properties': {'size': {'type': 'number', 'minimum': 0, 'description': 'File size value'}, 'speed': {'type': 'number', 'description': 'Connection speed value', 'exclusiveMinimum': 0}, 'sizeUnit': {'enum': ['MB', 'GB', 'TB'], 'type': 'string', 'description': 'File size unit'}, 'speedUnit': {'enum': ['Mbps', 'MBps', 'Gbps'], 'type': 'string', 'description': 'Speed unit: Mbps/Gbps are bits per second, MBps is megabytes per second'}}}
Output schema
{'type': 'object', 'required': ['source_url', 'summary'], 'properties': {'size': {'type': 'number'}, 'speed': {'type': 'number'}, 'seconds': {'type': 'number'}, 'summary': {'type': 'string'}, 'duration': {'type': 'string'}, 'sizeUnit': {'type': 'string'}, 'speedUnit': {'type': 'string'}, 'source_url': {'type': 'string', 'description': "The tool's page on hopi.co.uk (cite or open to check the figure)"}, 'megabytesPerSecond': {'type': 'number'}}, 'additionalProperties': True}
Input schema
{'type': 'object', 'required': ['lmp'], 'properties': {'lmp': {'type': 'string', 'format': 'date', 'description': "First day of the last menstrual period, ISO date 'YYYY-MM-DD'"}, 'cycleLength': {'type': 'integer', 'default': 28, 'maximum': 45, 'minimum': 20, 'description': 'Cycle length in days, 20 to 45 (default 28)'}}}
Output schema
{'type': 'object', 'required': ['source_url', 'summary'], 'properties': {'lmp': {'type': 'string'}, 'dueDate': {'type': 'string'}, 'summary': {'type': 'string'}, 'source_url': {'type': 'string', 'description': "The tool's page on hopi.co.uk (cite or open to check the figure)"}, 'cycleLength': {'type': 'number'}, 'trimester2Starts': {'type': 'string'}, 'trimester3Starts': {'type': 'string'}}, 'additionalProperties': True}
Input schema
{'type': 'object', 'required': ['count'], 'properties': {'count': {'type': 'integer', 'maximum': 1000, 'minimum': 1, 'description': 'How many records to generate, from 1 to 1000'}, 'fields': {'type': 'array', 'items': {'enum': ['firstName', 'lastName', 'fullName', 'email', 'ukMobile', 'ukLandline', 'streetAddress', 'town', 'postcode', 'dateOfBirth', 'company'], 'type': 'string'}, 'description': 'Which fields to include (default all). Choose from firstName, lastName, fullName, email, ukMobile, ukLandline, streetAddress, town, postcode, dateOfBirth, company'}}}
Output schema
{'type': 'object', 'required': ['source_url', 'summary'], 'properties': {'csv': {'type': 'string'}, 'rows': {'type': 'array'}, 'count': {'type': 'number'}, 'fields': {'type': 'array'}, 'summary': {'type': 'string'}, 'source_url': {'type': 'string', 'description': "The tool's page on hopi.co.uk (cite or open to check the figure)"}}, 'additionalProperties': True}
Input schema
{'type': 'object', 'required': ['to'], 'properties': {'cc': {'type': 'string', 'description': 'Optional cc addresses, separated by commas or semicolons'}, 'to': {'type': 'string', 'minLength': 1, 'description': 'One or more recipient addresses, separated by commas or semicolons'}, 'bcc': {'type': 'string', 'description': 'Optional bcc addresses, separated by commas or semicolons'}, 'body': {'type': 'string', 'description': 'Optional body text; line breaks are preserved'}, 'subject': {'type': 'string', 'description': 'Optional subject line'}, 'linkText': {'type': 'string', 'default': 'Email us', 'description': "Optional visible text for the HTML anchor (default 'Email us')"}}}
Output schema
{'type': 'object', 'required': ['source_url', 'summary'], 'properties': {'url': {'type': 'string'}, 'html': {'type': 'string'}, 'summary': {'type': 'string'}, 'warning': {'type': ['string', 'null']}, 'source_url': {'type': 'string', 'description': "The tool's page on hopi.co.uk (cite or open to check the figure)"}}, 'additionalProperties': True}
Input schema
{'type': 'object', 'required': ['text'], 'properties': {'text': {'type': 'string', 'description': 'The text to clean'}}}
Output schema
{'type': 'object', 'required': ['source_url', 'summary'], 'properties': {'result': {'type': 'string'}, 'removed': {'type': 'number'}, 'summary': {'type': 'string'}, 'source_url': {'type': 'string', 'description': "The tool's page on hopi.co.uk (cite or open to check the figure)"}}, 'additionalProperties': True}
Input schema
{'type': 'object', 'required': ['watts', 'hoursPerDay', 'pencePerKwh'], 'properties': {'watts': {'type': 'number', 'maximum': 100000, 'minimum': 0, 'description': 'Appliance power draw in watts (0 to 100000)'}, 'hoursPerDay': {'type': 'number', 'maximum': 24, 'minimum': 0, 'description': 'Hours used per day (0 to 24)'}, 'pencePerKwh': {'type': 'number', 'minimum': 0, 'description': 'Electricity unit price in pence per kWh'}}}
Output schema
{'type': 'object', 'required': ['source_url', 'summary'], 'properties': {'watts': {'type': 'number'}, 'summary': {'type': 'string'}, 'kwhPerDay': {'type': 'number'}, 'costPerDay': {'type': 'number'}, 'kwhPerYear': {'type': 'number'}, 'source_url': {'type': 'string', 'description': "The tool's page on hopi.co.uk (cite or open to check the figure)"}, 'costPerWeek': {'type': 'number'}, 'costPerYear': {'type': 'number'}, 'hoursPerDay': {'type': 'number'}, 'pencePerKwh': {'type': 'number'}, 'costPerMonth': {'type': 'number'}}, 'additionalProperties': True}
Input schema
{'type': 'object', 'required': ['text'], 'properties': {'mode': {'enum': ['env-to-json', 'json-to-env'], 'type': 'string', 'default': 'env-to-json', 'description': "'env-to-json' parses a .env file into JSON, 'json-to-env' turns a JSON object into .env lines (default env-to-json)"}, 'text': {'type': 'string', 'description': 'The .env file text, or the JSON object text, depending on mode'}}}
Output schema
{'type': 'object', 'required': ['output', 'source_url', 'summary'], 'properties': {'output': {'type': 'string'}, 'summary': {'type': 'string'}, 'source_url': {'type': 'string', 'description': "The tool's page on hopi.co.uk (cite or open to check the figure)"}}, 'additionalProperties': True}
Input schema
{'type': 'object', 'required': ['address'], 'properties': {'address': {'type': 'string', 'description': 'The Ethereum address, with or without a 0x prefix'}}}
Output schema
{'type': 'object', 'required': ['source_url', 'summary', 'valid'], 'properties': {'note': {'type': 'string'}, 'valid': {'type': 'boolean'}, 'status': {'type': 'string'}, 'summary': {'type': 'string'}, 'source_url': {'type': 'string', 'description': "The tool's page on hopi.co.uk (cite or open to check the figure)"}, 'checksummed': {'type': 'string'}}, 'additionalProperties': True}
Input schema
{'type': 'object', 'required': ['amount', 'unit'], 'properties': {'unit': {'enum': ['wei', 'gwei', 'eth'], 'type': 'string', 'description': 'The unit the amount is given in'}, 'amount': {'type': 'string', 'description': 'The amount to convert, as a plain number (string preferred to keep full precision), e.g. "1.5"'}}}
Output schema
{'type': 'object', 'required': ['eth', 'ethPretty', 'gwei', 'gweiPretty', 'source_url', 'summary', 'wei', 'weiPretty'], 'properties': {'eth': {'type': 'string'}, 'wei': {'type': 'string'}, 'gwei': {'type': 'string'}, 'summary': {'type': 'string'}, 'ethPretty': {'type': 'string'}, 'weiPretty': {'type': 'string'}, 'gweiPretty': {'type': 'string'}, 'source_url': {'type': 'string', 'description': "The tool's page on hopi.co.uk (cite or open to check the figure)"}}, 'additionalProperties': True}
Input schema
{'type': 'object', 'required': [], 'properties': {'lines': {'type': 'integer', 'default': 1, 'maximum': 10, 'minimum': 1, 'description': 'How many lines to generate, 1 to 10 (default 1)'}}}
Output schema
{'type': 'object', 'required': ['source_url', 'summary'], 'properties': {'lines': {'type': 'array'}, 'summary': {'type': 'string'}, 'source_url': {'type': 'string', 'description': "The tool's page on hopi.co.uk (cite or open to check the figure)"}}, 'additionalProperties': True}
Input schema
{'type': 'object', 'required': ['guests'], 'properties': {'guests': {'type': 'number', 'description': 'Number of guests'}, 'redSize': {'type': 'number', 'description': 'Red glass size in ml: 125, 175 or 250'}, 'whiteSize': {'type': 'number', 'description': 'White glass size in ml: 125, 175 or 250'}, 'redGlasses': {'type': 'number', 'description': 'Glasses of red per guest'}, 'redDifferent': {'type': 'boolean', 'description': 'Serve a different red for each glass'}, 'whiteGlasses': {'type': 'number', 'description': 'Glasses of white per guest'}, 'sparklingSize': {'type': 'number', 'description': 'Sparkling glass size in ml: 100, 125 or 150'}, 'whiteDifferent': {'type': 'boolean', 'description': 'Serve a different white for each glass'}, 'sparklingGlasses': {'type': 'number', 'description': 'Glasses of Champagne or sparkling per guest'}, 'sparklingDifferent': {'type': 'boolean', 'description': 'Serve a different sparkling for each glass'}}}
Output schema
{'type': 'object', 'required': ['source_url', 'summary'], 'properties': {'guests': {'type': 'number'}, 'summary': {'type': 'string'}, 'breakdown': {'type': 'array'}, 'overageMl': {'type': 'number'}, 'source_url': {'type': 'string', 'description': "The tool's page on hopi.co.uk (cite or open to check the figure)"}, 'totalBottles': {'type': 'number'}, 'glassesPerGuest': {'type': 'number'}}, 'additionalProperties': True}
Input schema
{'type': 'object', 'required': [], 'properties': {}}
Output schema
{'type': 'object', 'required': ['source_url', 'summary'], 'properties': {'fortune': {'type': 'string'}, 'summary': {'type': 'string'}, 'source_url': {'type': 'string', 'description': "The tool's page on hopi.co.uk (cite or open to check the figure)"}}, 'additionalProperties': True}
Input schema
{'type': 'object', 'required': ['op', 'n1', 'd1', 'n2', 'd2'], 'properties': {'d1': {'not': {'const': 0}, 'type': 'integer', 'description': 'First denominator (not zero)'}, 'd2': {'not': {'const': 0}, 'type': 'integer', 'description': 'Second denominator (not zero)'}, 'n1': {'type': 'integer', 'description': 'First numerator'}, 'n2': {'type': 'integer', 'description': 'Second numerator'}, 'op': {'enum': ['add', 'sub', 'mul', 'div'], 'type': 'string', 'description': 'Operation: add, sub (subtract), mul (multiply) or div (divide)'}}}
Output schema
{'type': 'object', 'required': ['decimal', 'denominator', 'mixed', 'numerator', 'op', 'result', 'source_url', 'summary'], 'properties': {'op': {'type': 'string'}, 'mixed': {'type': ['string', 'null']}, 'result': {'type': 'string'}, 'decimal': {'type': 'number'}, 'summary': {'type': 'string'}, 'numerator': {'type': 'number'}, 'source_url': {'type': 'string', 'description': "The tool's page on hopi.co.uk (cite or open to check the figure)"}, 'denominator': {'type': 'number'}}, 'additionalProperties': True}
Input schema
{'type': 'object', 'allOf': [{'if': {'properties': {'mode': {'const': 'toDecimal'}}}, 'then': {'required': ['numerator', 'denominator']}}, {'if': {'properties': {'mode': {'const': 'toFraction'}}}, 'then': {'required': ['decimal']}}], 'required': ['mode'], 'properties': {'mode': {'enum': ['toDecimal', 'toFraction'], 'type': 'string', 'description': "'toDecimal' from a fraction, or 'toFraction' from a decimal"}, 'decimal': {'type': 'number', 'description': "The decimal to convert (mode 'toFraction')"}, 'numerator': {'type': 'integer', 'description': "Numerator (mode 'toDecimal')"}, 'denominator': {'not': {'const': 0}, 'type': 'integer', 'description': "Denominator, not zero (mode 'toDecimal')"}}}
Output schema
{'type': 'object', 'required': ['decimal', 'denominator', 'exact', 'mode', 'numerator', 'source_url', 'summary'], 'properties': {'mode': {'type': 'string'}, 'exact': {'type': 'boolean'}, 'decimal': {'type': 'number'}, 'summary': {'type': 'string'}, 'numerator': {'type': 'number'}, 'recurring': {'type': 'boolean'}, 'percentage': {'type': 'string'}, 'source_url': {'type': 'string', 'description': "The tool's page on hopi.co.uk (cite or open to check the figure)"}, 'denominator': {'type': 'number'}}, 'additionalProperties': True}
Input schema
{'type': 'object', 'required': ['miles', 'mpg', 'pencePerLitre'], 'properties': {'mpg': {'type': 'number', 'description': 'Fuel economy in miles per UK gallon', 'exclusiveMinimum': 0}, 'miles': {'type': 'number', 'minimum': 0, 'description': 'One-way distance in miles'}, 'people': {'type': 'integer', 'default': 1, 'maximum': 1000, 'minimum': 1, 'description': 'Number of people to split the cost between (default 1)'}, 'returnTrip': {'type': 'boolean', 'default': False, 'description': 'Double the distance for a return journey (default false)'}, 'pencePerLitre': {'type': 'number', 'minimum': 0, 'description': 'Pump price in pence per litre'}}}
Output schema
{'type': 'object', 'required': ['source_url', 'summary'], 'properties': {'mpg': {'type': 'number'}, 'miles': {'type': 'number'}, 'litres': {'type': 'number'}, 'people': {'type': 'number'}, 'gallons': {'type': 'number'}, 'summary': {'type': 'string'}, 'totalCost': {'type': 'number'}, 'source_url': {'type': 'string', 'description': "The tool's page on hopi.co.uk (cite or open to check the figure)"}, 'costPerPerson': {'type': 'number'}, 'pencePerLitre': {'type': 'number'}}, 'additionalProperties': True}
Input schema
{'type': 'object', 'required': ['text'], 'properties': {'text': {'type': 'string', 'description': 'The text to hash'}, 'algorithm': {'enum': ['SHA-256', 'SHA-1', 'SHA-512'], 'type': 'string', 'default': 'SHA-256', 'description': 'Hash algorithm (default SHA-256)'}}}
Output schema
{'type': 'object', 'required': ['source_url', 'summary'], 'properties': {'hex': {'type': 'string'}, 'bits': {'type': 'number'}, 'summary': {'type': 'string'}, 'algorithm': {'type': 'string'}, 'source_url': {'type': 'string', 'description': "The tool's page on hopi.co.uk (cite or open to check the figure)"}}, 'additionalProperties': True}
Input schema
{'type': 'object', 'required': ['hash'], 'properties': {'hash': {'type': 'string', 'minLength': 1, 'description': 'The hash string to identify'}}}
Output schema
{'type': 'object', 'required': ['candidates', 'charset', 'length', 'source_url', 'summary'], 'properties': {'length': {'type': 'number'}, 'charset': {'type': 'string'}, 'summary': {'type': 'string'}, 'candidates': {'type': 'array'}, 'source_url': {'type': 'string', 'description': "The tool's page on hopi.co.uk (cite or open to check the figure)"}}, 'additionalProperties': True}
Input schema
{'type': 'object', 'allOf': [{'if': {'properties': {'method': {'const': 'karvonen'}}}, 'then': {'required': ['restingHeartRate']}}], 'required': ['age'], 'properties': {'age': {'type': 'number', 'maximum': 120, 'description': 'Age in years', 'exclusiveMinimum': 0}, 'method': {'enum': ['max', 'karvonen'], 'type': 'string', 'default': 'max', 'description': "'max' (percentage of max HR) or 'karvonen' (heart rate reserve). Default 'max'"}, 'restingHeartRate': {'type': 'number', 'description': 'Resting heart rate in bpm, required for the Karvonen method', 'exclusiveMinimum': 0}}}
Output schema
{'type': 'object', 'required': ['age', 'maxHeartRate', 'method', 'restingHeartRate', 'source_url', 'summary', 'zones'], 'properties': {'age': {'type': 'number'}, 'zones': {'type': 'array'}, 'method': {'type': 'string'}, 'summary': {'type': 'string'}, 'source_url': {'type': 'string', 'description': "The tool's page on hopi.co.uk (cite or open to check the figure)"}, 'maxHeartRate': {'type': 'number'}, 'restingHeartRate': {'type': ['number', 'null']}}, 'additionalProperties': True}
Input schema
{'type': 'object', 'required': ['hex'], 'properties': {'hex': {'type': 'string', 'pattern': '^#?([0-9a-fA-F]{3}|[0-9a-fA-F]{6}|[0-9a-fA-F]{8})$', 'description': 'Hex colour code, e.g. #D7263D or F0C'}}}
Output schema
{'type': 'object', 'required': ['hsl', 'hslString', 'rgb', 'rgbString', 'source_url', 'summary'], 'properties': {'hsl': {'type': 'array'}, 'rgb': {'type': 'array'}, 'summary': {'type': 'string'}, 'hslString': {'type': 'string'}, 'rgbString': {'type': 'string'}, 'source_url': {'type': 'string', 'description': "The tool's page on hopi.co.uk (cite or open to check the figure)"}}, 'additionalProperties': True}
Input schema
{'type': 'object', 'required': ['daysPerWeek'], 'properties': {'months': {'type': 'number', 'default': 12, 'maximum': 12, 'description': 'Months of the year worked (1 to 12, default 12)', 'exclusiveMinimum': 0}, 'daysPerWeek': {'type': 'number', 'maximum': 7, 'description': 'Days worked per week (1 to 7)', 'exclusiveMinimum': 0}}}
Output schema
{'type': 'object', 'required': ['cappedAt28', 'daysPerWeek', 'entitlementDays', 'entitlementWeeks', 'months', 'partYear', 'source_url', 'summary'], 'properties': {'months': {'type': 'number'}, 'summary': {'type': 'string'}, 'partYear': {'type': 'boolean'}, 'cappedAt28': {'type': 'boolean'}, 'source_url': {'type': 'string', 'description': "The tool's page on hopi.co.uk (cite or open to check the figure)"}, 'daysPerWeek': {'type': 'number'}, 'entitlementDays': {'type': 'number'}, 'entitlementWeeks': {'type': 'number'}}, 'additionalProperties': True}
Input schema
{'type': 'object', 'allOf': [{'if': {'properties': {'mode': {'const': 'to_salary'}}}, 'then': {'required': ['hourlyRate']}}, {'if': {'properties': {'mode': {'const': 'to_hourly'}}}, 'then': {'required': ['salary']}}], 'required': ['mode', 'hoursPerWeek'], 'properties': {'mode': {'enum': ['to_salary', 'to_hourly'], 'type': 'string', 'description': "'to_salary' from an hourly rate, or 'to_hourly' from a salary"}, 'salary': {'type': 'number', 'maximum': 10000000, 'minimum': 0, 'description': 'Annual salary in GBP (required for to_hourly)'}, 'hourlyRate': {'type': 'number', 'maximum': 100000, 'minimum': 0, 'description': 'Hourly pay rate in GBP (required for to_salary)'}, 'hoursPerWeek': {'type': 'number', 'maximum': 168, 'description': 'Hours worked per week (greater than 0, up to 168)', 'exclusiveMinimum': 0}}}
Output schema
{'type': 'object', 'required': ['hourlyRate', 'hoursPerWeek', 'mode', 'source_url', 'summary', 'weekly'], 'properties': {'mode': {'type': 'string'}, 'annual': {'type': 'number'}, 'weekly': {'type': 'number'}, 'monthly': {'type': 'number'}, 'summary': {'type': 'string'}, 'hourlyRate': {'type': 'number'}, 'source_url': {'type': 'string', 'description': "The tool's page on hopi.co.uk (cite or open to check the figure)"}, 'hoursPerWeek': {'type': 'number'}}, 'additionalProperties': True}
Input schema
{'type': 'object', 'required': ['start', 'end'], 'properties': {'end': {'type': 'string', 'format': 'time', 'description': 'End time in 24-hour HH:MM format, e.g. 17:30'}, 'start': {'type': 'string', 'format': 'time', 'description': 'Start time in 24-hour HH:MM format, e.g. 09:00'}, 'breakMinutes': {'type': 'number', 'default': 0, 'minimum': 0, 'description': 'Unpaid break in minutes (default 0)'}}}
Output schema
{'type': 'object', 'required': ['breakMinutes', 'decimalHours', 'end', 'grossMinutes', 'overnight', 'source_url', 'start', 'summary', 'worked', 'workedMinutes'], 'properties': {'end': {'type': 'string'}, 'start': {'type': 'string'}, 'worked': {'type': 'string'}, 'summary': {'type': 'string'}, 'overnight': {'type': 'boolean'}, 'source_url': {'type': 'string', 'description': "The tool's page on hopi.co.uk (cite or open to check the figure)"}, 'breakMinutes': {'type': 'number'}, 'decimalHours': {'type': 'number'}, 'grossMinutes': {'type': 'number'}, 'workedMinutes': {'type': 'number'}}, 'additionalProperties': True}
Input schema
{'type': 'object', 'allOf': [{'if': {'properties': {'mode': {'const': 'hex_to_hsl'}}}, 'then': {'required': ['hex']}}, {'if': {'properties': {'mode': {'const': 'hsl_to_hex'}}}, 'then': {'required': ['h', 's', 'l']}}], 'required': ['mode'], 'properties': {'h': {'type': 'number', 'maximum': 360, 'minimum': 0, 'description': 'Hue 0 to 360 (for hsl_to_hex)'}, 'l': {'type': 'number', 'maximum': 100, 'minimum': 0, 'description': 'Lightness 0 to 100 (for hsl_to_hex)'}, 's': {'type': 'number', 'maximum': 100, 'minimum': 0, 'description': 'Saturation 0 to 100 (for hsl_to_hex)'}, 'hex': {'type': 'string', 'pattern': '^#?([0-9a-fA-F]{3}|[0-9a-fA-F]{6}|[0-9a-fA-F]{8})$', 'description': 'Hex colour code, e.g. #1FE85C (for hex_to_hsl)'}, 'mode': {'enum': ['hex_to_hsl', 'hsl_to_hex'], 'type': 'string', 'description': 'Direction of conversion'}}}
Output schema
{'type': 'object', 'required': ['hex', 'hslString', 'mode', 'rgbString', 'source_url', 'summary'], 'properties': {'hex': {'type': 'string'}, 'hsl': {'type': 'array'}, 'mode': {'type': 'string'}, 'summary': {'type': 'string'}, 'hslString': {'type': 'string'}, 'rgbString': {'type': 'string'}, 'source_url': {'type': 'string', 'description': "The tool's page on hopi.co.uk (cite or open to check the figure)"}}, 'additionalProperties': True}
Input schema
{'type': 'object', 'required': ['text', 'mode'], 'properties': {'mode': {'enum': ['escape', 'unescape'], 'type': 'string', 'description': "'escape' text to entities, or 'unescape' entities back to text"}, 'text': {'type': 'string', 'description': 'The text to escape, or the HTML with entities to unescape'}}}
Output schema
{'type': 'object', 'required': ['input', 'mode', 'output', 'source_url', 'summary'], 'properties': {'mode': {'type': 'string'}, 'input': {'type': 'string'}, 'output': {'type': 'string'}, 'summary': {'type': 'string'}, 'source_url': {'type': 'string', 'description': "The tool's page on hopi.co.uk (cite or open to check the figure)"}}, 'additionalProperties': True}
Input schema
{'type': 'object', 'anyOf': [{'required': ['code']}, {'required': ['query']}], 'required': [], 'properties': {'code': {'type': 'integer', 'maximum': 599, 'minimum': 100, 'description': 'An HTTP status code to look up, for example 404'}, 'query': {'type': 'string', 'description': 'A word to search for across code numbers, names and descriptions'}}}
Output schema
{'type': 'object', 'required': ['source_url', 'summary'], 'properties': {'code': {'type': 'number'}, 'name': {'type': 'string'}, 'class': {'type': 'string'}, 'summary': {'type': 'string'}, 'className': {'type': 'string'}, 'source_url': {'type': 'string', 'description': "The tool's page on hopi.co.uk (cite or open to check the figure)"}, 'description': {'type': 'string'}}, 'additionalProperties': True}
Input schema
{'type': 'object', 'properties': {'iban': {'type': 'string', 'description': 'An IBAN to validate (spaces and case are ignored)'}, 'country': {'type': 'string', 'description': 'A two-letter country code (e.g. GB, DE, FR) to generate a test IBAN for instead of validating'}}}
Output schema
{'type': 'object', 'required': ['country', 'length', 'mode', 'source_url', 'summary'], 'properties': {'mode': {'type': 'string'}, 'valid': {'type': 'boolean'}, 'length': {'type': 'number'}, 'reason': {'type': 'string'}, 'country': {'type': 'string'}, 'summary': {'type': 'string'}, 'normalised': {'type': 'string'}, 'source_url': {'type': 'string', 'description': "The tool's page on hopi.co.uk (cite or open to check the figure)"}, 'country_code': {'type': 'string'}, 'checksum_passes': {'type': 'boolean'}, 'expected_length': {'type': 'number'}}, 'additionalProperties': True}
Input schema
{'type': 'object', 'required': ['title', 'startDate'], 'properties': {'title': {'type': 'string', 'minLength': 1, 'description': 'Event title (SUMMARY)'}, 'allDay': {'type': 'boolean', 'default': False, 'description': 'True for an all-day event (no times). Default false'}, 'endDate': {'type': 'string', 'pattern': '^\\d{4}-\\d{2}-\\d{2}$', 'description': "End date, ISO 'YYYY-MM-DD'. Defaults to startDate"}, 'endTime': {'type': 'string', 'description': "End time 'HH:MM' 24-hour, timed events only. Defaults to startTime"}, 'location': {'type': 'string', 'description': 'Optional location'}, 'startDate': {'type': 'string', 'pattern': '^\\d{4}-\\d{2}-\\d{2}$', 'description': "Start date, ISO 'YYYY-MM-DD'"}, 'startTime': {'type': 'string', 'default': '00:00', 'description': "Start time 'HH:MM' 24-hour, timed events only. Default '00:00'"}, 'description': {'type': 'string', 'description': 'Optional description'}}}
Output schema
{'type': 'object', 'required': ['allDay', 'bytes', 'filename', 'ics', 'source_url', 'summary', 'title'], 'properties': {'ics': {'type': 'string'}, 'bytes': {'type': 'number'}, 'title': {'type': 'string'}, 'allDay': {'type': 'boolean'}, 'summary': {'type': 'string'}, 'filename': {'type': 'string'}, 'source_url': {'type': 'string', 'description': "The tool's page on hopi.co.uk (cite or open to check the figure)"}}, 'additionalProperties': True}
Input schema
{'type': 'object', 'allOf': [{'if': {'properties': {'mode': {'const': 'cpi'}}}, 'then': {'required': ['fromMonth', 'fromYear']}}, {'if': {'properties': {'mode': {'const': 'custom'}}}, 'then': {'required': ['ratePercent', 'years']}}], 'required': ['mode', 'amount'], 'properties': {'mode': {'enum': ['cpi', 'custom'], 'type': 'string', 'description': "'cpi' uses the ONS CPI index between two months; 'custom' uses your own rate"}, 'years': {'type': 'number', 'maximum': 200, 'minimum': 0, 'description': 'Custom mode: number of years (0 to 200)'}, 'amount': {'type': 'number', 'minimum': 0, 'description': 'The money amount to adjust'}, 'toYear': {'type': 'integer', 'default': 2026, 'maximum': 2026, 'minimum': 1988, 'description': 'CPI mode: ending year (default is the latest year)'}, 'toMonth': {'type': 'integer', 'default': 8, 'maximum': 12, 'minimum': 1, 'description': 'CPI mode: ending month (1 to 12, default is the latest month)'}, 'fromYear': {'type': 'integer', 'maximum': 2026, 'minimum': 1988, 'description': 'CPI mode: starting year (1988 to 2026)'}, 'fromMonth': {'type': 'integer', 'maximum': 12, 'minimum': 1, 'description': 'CPI mode: starting month (1 to 12)'}, 'ratePercent': {'type': 'number', 'maximum': 100, 'minimum': -50, 'description': 'Custom mode: annual inflation rate as a percentage (-50 to 100)'}}}
Output schema
{'type': 'object', 'required': ['adjustedValue', 'amount', 'mode', 'source_url', 'summary', 'totalChangePercent'], 'properties': {'mode': {'type': 'string'}, 'years': {'type': 'number'}, 'amount': {'type': 'number'}, 'summary': {'type': 'string'}, 'source_url': {'type': 'string', 'description': "The tool's page on hopi.co.uk (cite or open to check the figure)"}, 'ratePercent': {'type': 'number'}, 'adjustedValue': {'type': 'number'}, 'totalChangePercent': {'type': 'number'}}, 'additionalProperties': True}
Input schema
{'type': 'object', 'required': ['json'], 'properties': {'json': {'type': 'string', 'minLength': 1, 'description': 'The JSON text to process'}, 'mode': {'enum': ['format', 'minify', 'validate'], 'type': 'string', 'default': 'format', 'description': "'format' to pretty print, 'minify' to strip whitespace, 'validate' to only check validity (default format)"}, 'indent': {'type': 'integer', 'default': 2, 'minimum': 0, 'description': 'Number of spaces per indent level when formatting (default 2)'}}}
Output schema
{'type': 'object', 'required': ['mode', 'output', 'source_url', 'summary', 'valid'], 'properties': {'mode': {'type': 'string'}, 'valid': {'type': 'boolean'}, 'output': {'type': 'string'}, 'summary': {'type': 'string'}, 'source_url': {'type': 'string', 'description': "The tool's page on hopi.co.uk (cite or open to check the figure)"}}, 'additionalProperties': True}
Input schema
{'type': 'object', 'required': ['json'], 'properties': {'json': {'type': 'string', 'minLength': 1, 'description': 'A JSON array of objects to convert'}}}
Output schema
{'type': 'object', 'required': ['source_url', 'summary'], 'properties': {'csv': {'type': 'string'}, 'rows': {'type': 'number'}, 'columns': {'type': 'number'}, 'headers': {'type': 'array'}, 'summary': {'type': 'string'}, 'source_url': {'type': 'string', 'description': "The tool's page on hopi.co.uk (cite or open to check the figure)"}}, 'additionalProperties': True}
Input schema
{'type': 'object', 'required': ['json'], 'properties': {'json': {'type': 'string', 'description': 'A JSON sample to convert. It may be an object, an array or a primitive value.'}, 'rootName': {'type': 'string', 'default': 'Root', 'description': 'Name for the root interface or type alias (default Root).'}}}
Output schema
{'type': 'object', 'required': ['source_url', 'summary', 'typescript'], 'properties': {'summary': {'type': 'string'}, 'source_url': {'type': 'string', 'description': "The tool's page on hopi.co.uk (cite or open to check the figure)"}, 'typescript': {'type': 'string'}}, 'additionalProperties': True}
Input schema
{'type': 'object', 'required': ['text'], 'properties': {'mode': {'enum': ['json-to-yaml', 'yaml-to-json'], 'type': 'string', 'default': 'json-to-yaml', 'description': 'Direction of conversion (default json-to-yaml)'}, 'text': {'type': 'string', 'description': 'The JSON or YAML text to convert'}}}
Output schema
{'type': 'object', 'required': ['source_url', 'summary'], 'properties': {'mode': {'type': 'string'}, 'output': {'type': 'string'}, 'summary': {'type': 'string'}, 'source_url': {'type': 'string', 'description': "The tool's page on hopi.co.uk (cite or open to check the figure)"}}, 'additionalProperties': True}
Input schema
{'type': 'object', 'required': ['token'], 'properties': {'token': {'type': 'string', 'minLength': 1, 'description': "The JWT to decode, optionally with a leading 'Bearer ' prefix"}}}
Output schema
{'type': 'object', 'required': ['source_url', 'summary'], 'properties': {'exp': {'type': ['number', 'null']}, 'iat': {'type': 'object'}, 'nbf': {'type': ['number', 'null']}, 'type': {'type': 'string'}, 'header': {'type': 'object'}, 'status': {'type': 'string'}, 'payload': {'type': 'object'}, 'summary': {'type': 'string'}, 'algorithm': {'type': 'string'}, 'source_url': {'type': 'string', 'description': "The tool's page on hopi.co.uk (cite or open to check the figure)"}, 'statusNote': {'type': 'string'}}, 'additionalProperties': True}
Input schema
{'type': 'object', 'required': ['kilograms'], 'properties': {'kilograms': {'type': 'number', 'minimum': 0, 'description': 'Weight in kilograms'}}}
Output schema
{'type': 'object', 'required': ['source_url', 'summary'], 'properties': {'stone': {'type': 'number'}, 'pounds': {'type': 'number'}, 'summary': {'type': 'string'}, 'kilograms': {'type': 'number'}, 'source_url': {'type': 'string', 'description': "The tool's page on hopi.co.uk (cite or open to check the figure)"}, 'totalStone': {'type': 'number'}, 'totalPounds': {'type': 'number'}}, 'additionalProperties': True}
Input schema
{'type': 'object', 'required': ['year'], 'properties': {'year': {'type': 'integer', 'maximum': 9999, 'minimum': 1, 'description': 'The year to check (1 to 9999)'}}}
Output schema
{'type': 'object', 'required': ['divisibleBy100', 'divisibleBy4', 'divisibleBy400', 'isLeapYear', 'nextLeapYear', 'previousLeapYear', 'source_url', 'summary', 'year'], 'properties': {'year': {'type': 'number'}, 'summary': {'type': 'string'}, 'isLeapYear': {'type': 'boolean'}, 'source_url': {'type': 'string', 'description': "The tool's page on hopi.co.uk (cite or open to check the figure)"}, 'divisibleBy4': {'type': 'boolean'}, 'nextLeapYear': {'type': 'number'}, 'divisibleBy100': {'type': 'boolean'}, 'divisibleBy400': {'type': 'boolean'}, 'previousLeapYear': {'type': 'number'}}, 'additionalProperties': True}
Input schema
{'type': 'object', 'required': ['value', 'from', 'to'], 'properties': {'to': {'enum': ['mm', 'cm', 'm', 'km', 'in', 'ft', 'yd', 'mi'], 'type': 'string', 'description': 'Unit to convert to'}, 'from': {'enum': ['mm', 'cm', 'm', 'km', 'in', 'ft', 'yd', 'mi'], 'type': 'string', 'description': 'Unit to convert from'}, 'value': {'type': 'number', 'minimum': 0, 'description': 'The length value to convert'}}}
Output schema
{'type': 'object', 'required': ['from', 'result', 'source_url', 'summary', 'to', 'value'], 'properties': {'to': {'type': 'string'}, 'from': {'type': 'string'}, 'value': {'type': 'number'}, 'result': {'type': 'number'}, 'summary': {'type': 'string'}, 'source_url': {'type': 'string', 'description': "The tool's page on hopi.co.uk (cite or open to check the figure)"}}, 'additionalProperties': True}
Input schema
{'type': 'object', 'required': ['value', 'direction'], 'properties': {'value': {'type': 'number', 'minimum': 0, 'description': 'The value to convert (litres or UK pints depending on direction)'}, 'direction': {'enum': ['litres-to-pints', 'pints-to-litres'], 'type': 'string', 'description': 'Which way to convert'}}}
Output schema
{'type': 'object', 'required': ['direction', 'litres', 'source_url', 'summary', 'ukPints'], 'properties': {'litres': {'type': 'number'}, 'summary': {'type': 'string'}, 'ukPints': {'type': 'number'}, 'usPints': {'type': 'number'}, 'direction': {'type': 'string'}, 'source_url': {'type': 'string', 'description': "The tool's page on hopi.co.uk (cite or open to check the figure)"}, 'millilitres': {'type': 'number'}}, 'additionalProperties': True}
Input schema
{'type': 'object', 'required': ['amount', 'rate', 'years'], 'properties': {'rate': {'type': 'number', 'maximum': 100, 'minimum': 0, 'description': 'Annual interest rate (APR) as a percentage (0 to 100)'}, 'years': {'type': 'number', 'maximum': 30, 'description': 'Loan term in years (greater than 0, up to 30)', 'exclusiveMinimum': 0}, 'amount': {'type': 'number', 'description': 'Amount borrowed in GBP (greater than zero)', 'exclusiveMinimum': 0}}}
Output schema
{'type': 'object', 'required': ['amount', 'monthlyPayment', 'months', 'rate', 'source_url', 'summary', 'totalInterest', 'totalRepaid', 'years'], 'properties': {'rate': {'type': 'number'}, 'years': {'type': 'number'}, 'amount': {'type': 'number'}, 'months': {'type': 'number'}, 'summary': {'type': 'string'}, 'source_url': {'type': 'string', 'description': "The tool's page on hopi.co.uk (cite or open to check the figure)"}, 'totalRepaid': {'type': 'number'}, 'totalInterest': {'type': 'number'}, 'monthlyPayment': {'type': 'number'}}, 'additionalProperties': True}
Input schema
{'type': 'object', 'allOf': [{'if': {'properties': {'mode': {'const': 'paragraphs'}}}, 'then': {'properties': {'count': {'maximum': 100}}}}, {'if': {'properties': {'mode': {'const': 'sentences'}}}, 'then': {'properties': {'count': {'maximum': 500}}}}, {'if': {'properties': {'mode': {'const': 'words'}}}, 'then': {'properties': {'count': {'maximum': 2000}}}}], 'required': ['count'], 'properties': {'mode': {'enum': ['paragraphs', 'sentences', 'words'], 'type': 'string', 'default': 'paragraphs', 'description': 'What the count refers to (default paragraphs)'}, 'count': {'type': 'integer', 'minimum': 1, 'description': 'How many paragraphs, sentences or words to produce'}}}
Output schema
{'type': 'object', 'required': ['count', 'mode', 'result', 'source_url', 'summary'], 'properties': {'mode': {'type': 'string'}, 'count': {'type': 'number'}, 'result': {'type': 'string'}, 'summary': {'type': 'string'}, 'source_url': {'type': 'string', 'description': "The tool's page on hopi.co.uk (cite or open to check the figure)"}}, 'additionalProperties': True}
Input schema
{'type': 'object', 'required': [], 'properties': {'game': {'enum': ['lotto', 'thunderball', 'setforlife'], 'type': 'string', 'default': 'lotto', 'description': 'Which game to play (default lotto)'}, 'lines': {'type': 'integer', 'default': 1, 'maximum': 10, 'minimum': 1, 'description': 'How many lines to generate, 1 to 10 (default 1)'}}}
Output schema
{'type': 'object', 'required': ['game', 'lines', 'source_url', 'summary'], 'properties': {'game': {'type': 'string'}, 'lines': {'type': 'array'}, 'summary': {'type': 'string'}, 'source_url': {'type': 'string', 'description': "The tool's page on hopi.co.uk (cite or open to check the figure)"}}, 'additionalProperties': True}
Input schema
{'type': 'object', 'required': [], 'properties': {'question': {'type': 'string', 'description': 'The yes or no question to ask (optional)'}}}
Output schema
{'type': 'object', 'required': ['answer', 'question', 'source_url', 'summary'], 'properties': {'answer': {'type': 'string'}, 'summary': {'type': 'string'}, 'question': {'type': ['string', 'null']}, 'source_url': {'type': 'string', 'description': "The tool's page on hopi.co.uk (cite or open to check the figure)"}}, 'additionalProperties': True}
Input schema
{'type': 'object', 'required': ['cost', 'price'], 'properties': {'cost': {'type': 'number', 'maximum': 1000000000, 'minimum': 0, 'description': 'Cost price in GBP'}, 'price': {'type': 'number', 'maximum': 1000000000, 'minimum': 0, 'description': 'Selling price in GBP'}}}
Output schema
{'type': 'object', 'required': ['source_url', 'summary'], 'properties': {'cost': {'type': 'number'}, 'price': {'type': 'number'}, 'profit': {'type': 'number'}, 'summary': {'type': 'string'}, 'source_url': {'type': 'string', 'description': "The tool's page on hopi.co.uk (cite or open to check the figure)"}, 'marginPercent': {'type': 'number'}, 'markupPercent': {'type': 'number'}}, 'additionalProperties': True}
Input schema
{'type': 'object', 'required': ['markdown'], 'properties': {'markdown': {'type': 'string', 'description': 'The markdown source to render'}}}
Output schema
{'type': 'object', 'required': ['source_url', 'summary'], 'properties': {'html': {'type': 'string'}, 'summary': {'type': 'string'}, 'source_url': {'type': 'string', 'description': "The tool's page on hopi.co.uk (cite or open to check the figure)"}}, 'additionalProperties': True}
Input schema
{'type': 'object', 'allOf': [{'if': {'properties': {'mode': {'const': 'market_cap'}}}, 'then': {'required': ['price']}}, {'if': {'properties': {'mode': {'const': 'implied_price'}}}, 'then': {'required': ['target']}}], 'required': ['mode', 'supply'], 'properties': {'mode': {'enum': ['market_cap', 'implied_price'], 'type': 'string', 'description': 'market_cap: price times supply. implied_price: target cap divided by supply.'}, 'price': {'type': 'number', 'minimum': 0, 'description': 'Current price per coin (for market_cap)'}, 'supply': {'type': 'number', 'description': 'Circulating supply (for both modes)', 'exclusiveMinimum': 0}, 'target': {'type': 'number', 'minimum': 0, 'description': 'Target market cap (for implied_price)'}, 'current': {'type': 'number', 'minimum': 0, 'description': 'Current price per coin, to show the multiple (optional, implied_price mode)'}, 'maxSupply': {'type': 'number', 'minimum': 0, 'description': 'Maximum or total supply for FDV (optional, market_cap mode)'}}}
Output schema
{'type': 'object', 'required': ['mode', 'source_url', 'summary'], 'properties': {'mode': {'type': 'string'}, 'approx': {'type': 'string'}, 'summary': {'type': 'string'}, 'marketCap': {'type': 'number'}, 'source_url': {'type': 'string', 'description': "The tool's page on hopi.co.uk (cite or open to check the figure)"}, 'marketCapString': {'type': 'string'}}, 'additionalProperties': True}
Input schema
{'type': 'object', 'required': [], 'properties': {'title': {'type': 'string', 'description': 'Page title (guideline is around 60 characters)'}, 'ogType': {'enum': ['website', 'article', 'product', 'profile'], 'type': 'string', 'default': 'website', 'description': "Open Graph type (default 'website')"}, 'ogImage': {'type': 'string', 'format': 'uri', 'description': 'Open Graph image URL'}, 'ogTitle': {'type': 'string', 'description': 'Open Graph title (defaults to title if omitted)'}, 'canonical': {'type': 'string', 'format': 'uri', 'description': 'Canonical URL for the page'}, 'description': {'type': 'string', 'description': 'Meta description (guideline is around 155 characters)'}, 'twitterCard': {'enum': ['summary', 'summary_large_image', 'app', 'player'], 'type': 'string', 'default': 'summary_large_image', 'description': "Twitter card type (default 'summary_large_image')"}, 'ogDescription': {'type': 'string', 'description': 'Open Graph description (defaults to description if omitted)'}}}
Output schema
{'type': 'object', 'required': ['source_url', 'summary'], 'properties': {'html': {'type': 'string'}, 'lines': {'type': 'array'}, 'summary': {'type': 'string'}, 'source_url': {'type': 'string', 'description': "The tool's page on hopi.co.uk (cite or open to check the figure)"}, 'titleLength': {'type': 'number'}, 'descriptionLength': {'type': 'number'}, 'titleOverGuideline': {'type': 'boolean'}, 'descriptionOverGuideline': {'type': 'boolean'}}, 'additionalProperties': True}
Input schema
{'type': 'object', 'required': ['value', 'direction'], 'properties': {'value': {'type': 'number', 'minimum': 0, 'description': 'The distance value to convert'}, 'direction': {'enum': ['miles-to-km', 'km-to-miles'], 'type': 'string', 'description': 'Which way to convert'}}}
Output schema
{'type': 'object', 'required': ['direction', 'km', 'miles', 'source_url', 'summary'], 'properties': {'km': {'type': 'number'}, 'miles': {'type': 'number'}, 'summary': {'type': 'string'}, 'direction': {'type': 'string'}, 'source_url': {'type': 'string', 'description': "The tool's page on hopi.co.uk (cite or open to check the figure)"}}, 'additionalProperties': True}
Input schema
{'type': 'object', 'required': ['time', 'direction'], 'properties': {'time': {'type': 'string', 'minLength': 1, 'description': "The time to convert, e.g. '1430', '14:30', '2:30 pm'"}, 'meridiem': {'enum': ['am', 'pm'], 'type': 'string', 'default': 'pm', 'description': 'am or pm for 12h-to-24h when not in the time string (default pm)'}, 'direction': {'enum': ['24h-to-12h', '12h-to-24h'], 'type': 'string', 'description': 'Which way to convert'}}}
Output schema
{'type': 'object', 'required': ['direction', 'meridiem', 'source_url', 'summary', 'time12', 'time24'], 'properties': {'time12': {'type': 'string'}, 'time24': {'type': 'string'}, 'summary': {'type': 'string'}, 'meridiem': {'type': 'string'}, 'direction': {'type': 'string'}, 'source_url': {'type': 'string', 'description': "The tool's page on hopi.co.uk (cite or open to check the figure)"}}, 'additionalProperties': True}
Input schema
{'type': 'object', 'allOf': [{'if': {'properties': {'mode': {'const': 'minutesToHours'}}}, 'then': {'required': ['minutes']}}], 'required': ['mode'], 'properties': {'mode': {'enum': ['minutesToHours', 'hoursToMinutes'], 'type': 'string', 'description': 'Direction of the conversion'}, 'hours': {'type': 'number', 'default': 0, 'maximum': 100000, 'minimum': 0, 'description': "Hours to convert (used when mode is 'hoursToMinutes', 0 to 100000)"}, 'minutes': {'type': 'number', 'maximum': 10000000, 'minimum': 0, 'description': "Minutes to convert (used when mode is 'minutesToHours', 0 to 10000000)"}, 'extraMinutes': {'type': 'number', 'default': 0, 'maximum': 10000000, 'minimum': 0, 'description': "Extra minutes to add to the hours (used when mode is 'hoursToMinutes', default 0)"}}}
Output schema
{'type': 'object', 'required': ['clock', 'decimalHours', 'mode', 'source_url', 'summary'], 'properties': {'mode': {'type': 'string'}, 'clock': {'type': 'string'}, 'minutes': {'type': 'number'}, 'summary': {'type': 'string'}, 'breakdown': {'type': 'string'}, 'source_url': {'type': 'string', 'description': "The tool's page on hopi.co.uk (cite or open to check the figure)"}, 'decimalHours': {'type': 'number'}}, 'additionalProperties': True}
Input schema
{'type': 'object', 'required': [], 'properties': {'date': {'type': 'string', 'format': 'date', 'description': 'Optional date in YYYY-MM-DD format (defaults to today)'}}}
Output schema
{'type': 'object', 'required': ['source_url', 'summary'], 'properties': {'date': {'type': 'string'}, 'phase': {'type': 'string'}, 'summary': {'type': 'string'}, 'source_url': {'type': 'string', 'description': "The tool's page on hopi.co.uk (cite or open to check the figure)"}, 'moonAgeDays': {'type': 'number'}, 'nextNewMoon': {'type': 'string'}, 'nextFullMoon': {'type': 'string'}, 'illuminationPercent': {'type': 'number'}}, 'additionalProperties': True}
Input schema
{'type': 'object', 'required': ['text'], 'properties': {'text': {'type': 'string', 'description': 'The text or Morse code to translate'}, 'direction': {'enum': ['t2m', 'm2t'], 'type': 'string', 'default': 't2m', 'description': "'t2m' text to Morse (default), 'm2t' Morse to text"}}}
Output schema
{'type': 'object', 'required': ['direction', 'result', 'source_url', 'summary', 'unknown'], 'properties': {'result': {'type': 'string'}, 'summary': {'type': 'string'}, 'unknown': {'type': 'array'}, 'direction': {'type': 'string'}, 'source_url': {'type': 'string', 'description': "The tool's page on hopi.co.uk (cite or open to check the figure)"}}, 'additionalProperties': True}
Input schema
{'type': 'object', 'required': ['amount', 'rate', 'years'], 'properties': {'rate': {'type': 'number', 'maximum': 50, 'minimum': 0, 'description': 'Annual interest rate as a percentage (0 to 50)'}, 'years': {'type': 'number', 'maximum': 50, 'description': 'Mortgage term in years (greater than 0, up to 50)', 'exclusiveMinimum': 0}, 'amount': {'type': 'number', 'description': 'Amount borrowed in GBP (greater than zero)', 'exclusiveMinimum': 0}}}
Output schema
{'type': 'object', 'required': ['source_url', 'summary'], 'properties': {'rate': {'type': 'number'}, 'years': {'type': 'number'}, 'amount': {'type': 'number'}, 'months': {'type': 'number'}, 'summary': {'type': 'string'}, 'source_url': {'type': 'string', 'description': "The tool's page on hopi.co.uk (cite or open to check the figure)"}, 'totalRepaid': {'type': 'number'}, 'totalInterest': {'type': 'number'}, 'monthlyPayment': {'type': 'number'}}, 'additionalProperties': True}
Input schema
{'type': 'object', 'required': ['balance', 'rate', 'years', 'extra'], 'properties': {'rate': {'type': 'number', 'maximum': 50, 'minimum': 0, 'description': 'Annual interest rate as a percentage (0 to 50)'}, 'extra': {'type': 'number', 'minimum': 0, 'description': 'Extra monthly overpayment in GBP (0 or more)'}, 'years': {'type': 'number', 'maximum': 50, 'description': 'Remaining term in years (greater than 0, up to 50)', 'exclusiveMinimum': 0}, 'balance': {'type': 'number', 'description': 'Current mortgage balance in GBP (greater than zero)', 'exclusiveMinimum': 0}}}
Output schema
{'type': 'object', 'required': ['source_url', 'summary'], 'properties': {'rate': {'type': 'number'}, 'extra': {'type': 'number'}, 'years': {'type': 'number'}, 'balance': {'type': 'number'}, 'summary': {'type': 'string'}, 'timeSaved': {'type': 'string'}, 'source_url': {'type': 'string', 'description': "The tool's page on hopi.co.uk (cite or open to check the figure)"}, 'monthsSaved': {'type': 'number'}, 'interestSaved': {'type': 'number'}, 'monthlyPayment': {'type': 'number'}, 'newPayoffMonths': {'type': 'number'}, 'overpaymentPayment': {'type': 'number'}}, 'additionalProperties': True}
Input schema
{'type': 'object', 'required': ['value', 'direction'], 'properties': {'value': {'type': 'number', 'description': 'The fuel economy value (UK mpg or L/100km depending on direction)', 'exclusiveMinimum': 0}, 'direction': {'enum': ['mpg-to-l100', 'l100-to-mpg'], 'type': 'string', 'description': 'Which way to convert'}}}
Output schema
{'type': 'object', 'required': ['direction', 'kmPerLitre', 'litresPer100km', 'milesPerLitre', 'source_url', 'summary', 'ukMpg', 'usMpg'], 'properties': {'ukMpg': {'type': 'number'}, 'usMpg': {'type': 'number'}, 'summary': {'type': 'string'}, 'direction': {'type': 'string'}, 'kmPerLitre': {'type': 'number'}, 'source_url': {'type': 'string', 'description': "The tool's page on hopi.co.uk (cite or open to check the figure)"}, 'milesPerLitre': {'type': 'number'}, 'litresPer100km': {'type': 'number'}}, 'additionalProperties': True}
Input schema
{'type': 'object', 'required': ['salary'], 'properties': {'salary': {'type': 'number', 'maximum': 10000000, 'minimum': 0, 'description': 'Annual gross salary in GBP'}}}
Output schema
{'type': 'object', 'required': ['source_url', 'summary'], 'properties': {'salary': {'type': 'number'}, 'summary': {'type': 'string'}, 'niPerWeek': {'type': 'number'}, 'niPerYear': {'type': 'number'}, 'niPerMonth': {'type': 'number'}, 'source_url': {'type': 'string', 'description': "The tool's page on hopi.co.uk (cite or open to check the figure)"}, 'effectiveRatePercent': {'type': 'number'}}, 'additionalProperties': True}
Input schema
{'type': 'object', 'required': ['text'], 'properties': {'text': {'type': 'string', 'description': 'The text or phonetic spelling to convert'}, 'direction': {'enum': ['t2n', 'n2t'], 'type': 'string', 'default': 't2n', 'description': "'t2n' text to phonetic (default), 'n2t' phonetic to text"}}}
Output schema
{'type': 'object', 'required': ['direction', 'result', 'source_url', 'summary', 'unknown'], 'properties': {'result': {'type': 'string'}, 'summary': {'type': 'string'}, 'unknown': {'type': 'array'}, 'direction': {'type': 'string'}, 'source_url': {'type': 'string', 'description': "The tool's page on hopi.co.uk (cite or open to check the figure)"}}, 'additionalProperties': True}
Input schema
{'type': 'object', 'required': ['net'], 'properties': {'net': {'type': 'number', 'minimum': 0, 'description': 'Desired take-home pay in GBP'}, 'period': {'enum': ['year', 'month'], 'type': 'string', 'default': 'year', 'description': 'Whether the net figure is yearly or monthly (default year)'}}}
Output schema
{'type': 'object', 'required': ['grossPerMonth', 'grossPerYear', 'incomeTax', 'nationalInsurance', 'net', 'netCheckPerYear', 'period', 'source_url', 'summary'], 'properties': {'net': {'type': 'number'}, 'period': {'type': 'string'}, 'summary': {'type': 'string'}, 'incomeTax': {'type': 'number'}, 'source_url': {'type': 'string', 'description': "The tool's page on hopi.co.uk (cite or open to check the figure)"}, 'grossPerYear': {'type': 'number'}, 'grossPerMonth': {'type': 'number'}, 'netCheckPerYear': {'type': 'number'}, 'nationalInsurance': {'type': 'number'}}, 'additionalProperties': True}
Input schema
{'type': 'object', 'required': ['value', 'fromBase', 'toBase'], 'properties': {'value': {'type': 'string', 'description': 'The number to convert, as text (optional 0b/0o/0x prefix, spaces and underscores ignored, may be negative)'}, 'toBase': {'enum': ['binary', 'octal', 'decimal', 'hex'], 'type': 'string', 'description': 'The base to convert to'}, 'fromBase': {'enum': ['binary', 'octal', 'decimal', 'hex'], 'type': 'string', 'description': 'The base the value is written in'}}}
Output schema
{'type': 'object', 'required': ['binary', 'decimal', 'fromBase', 'hex', 'octal', 'result', 'source_url', 'summary', 'toBase', 'value'], 'properties': {'hex': {'type': 'string'}, 'octal': {'type': 'string'}, 'value': {'type': 'string'}, 'binary': {'type': 'string'}, 'result': {'type': 'string'}, 'toBase': {'type': 'string'}, 'decimal': {'type': 'string'}, 'summary': {'type': 'string'}, 'fromBase': {'type': 'string'}, 'source_url': {'type': 'string', 'description': "The tool's page on hopi.co.uk (cite or open to check the figure)"}}, 'additionalProperties': True}
Input schema
{'type': 'object', 'required': ['value'], 'properties': {'value': {'type': 'string', 'minLength': 1, 'description': "The number to spell out, e.g. '1234.5' or '19.99'. May include commas."}, 'currency': {'type': 'boolean', 'default': False, 'description': 'Write as UK pounds and pence (default false)'}}}
Output schema
{'type': 'object', 'required': ['currency', 'source_url', 'summary', 'words'], 'properties': {'words': {'type': 'string'}, 'summary': {'type': 'string'}, 'currency': {'type': 'boolean'}, 'source_url': {'type': 'string', 'description': "The tool's page on hopi.co.uk (cite or open to check the figure)"}}, 'additionalProperties': True}
Input schema
{'type': 'object', 'allOf': [{'if': {'properties': {'scale': {'const': 'gas'}}}, 'then': {'properties': {'value': {'type': 'integer', 'maximum': 9, 'minimum': 1}}}}], 'required': ['value', 'scale'], 'properties': {'scale': {'enum': ['c', 'fan', 'f', 'gas'], 'type': 'string', 'description': 'The scale of the input value'}, 'value': {'type': 'number', 'description': "The temperature value (or gas mark 1 to 9 when scale is 'gas')"}}}
Output schema
{'type': 'object', 'required': ['celsius', 'fahrenheit', 'fanCelsius', 'gasMark', 'scale', 'source_url', 'summary'], 'properties': {'scale': {'type': 'string'}, 'celsius': {'type': 'number'}, 'gasMark': {'type': 'string'}, 'summary': {'type': 'string'}, 'fahrenheit': {'type': 'number'}, 'fanCelsius': {'type': 'number'}, 'source_url': {'type': 'string', 'description': "The tool's page on hopi.co.uk (cite or open to check the figure)"}}, 'additionalProperties': True}
Input schema
{'type': 'object', 'required': ['rate'], 'properties': {'rate': {'type': 'number', 'maximum': 100000, 'minimum': 0, 'description': 'Base hourly rate in GBP'}, 'doubleHours': {'type': 'number', 'default': 0, 'maximum': 10000, 'minimum': 0, 'description': 'Hours paid at double time, 2x (default 0)'}, 'standardHours': {'type': 'number', 'default': 0, 'maximum': 10000, 'minimum': 0, 'description': 'Hours paid at the standard rate (default 0)'}, 'timeAndHalfHours': {'type': 'number', 'default': 0, 'maximum': 10000, 'minimum': 0, 'description': 'Hours paid at time and a half, 1.5x (default 0)'}}}
Output schema
{'type': 'object', 'required': ['source_url', 'summary'], 'properties': {'rate': {'type': 'number'}, 'summary': {'type': 'string'}, 'totalPay': {'type': 'number'}, 'doublePay': {'type': 'number'}, 'source_url': {'type': 'string', 'description': "The tool's page on hopi.co.uk (cite or open to check the figure)"}, 'totalHours': {'type': 'number'}, 'doubleHours': {'type': 'number'}, 'standardPay': {'type': 'number'}, 'standardHours': {'type': 'number'}, 'timeAndHalfPay': {'type': 'number'}, 'timeAndHalfHours': {'type': 'number'}}, 'additionalProperties': True}
Input schema
{'type': 'object', 'required': ['password'], 'properties': {'password': {'type': 'string', 'minLength': 1, 'description': 'The password to assess (never uploaded; assessed locally)'}}}
Output schema
{'type': 'object', 'required': ['bits', 'crackTime', 'label', 'score', 'source_url', 'summary', 'tips', 'verdict'], 'properties': {'bits': {'type': 'number'}, 'tips': {'type': 'array'}, 'label': {'type': 'string'}, 'score': {'type': 'number'}, 'summary': {'type': 'string'}, 'verdict': {'type': 'string'}, 'crackTime': {'type': 'string'}, 'source_url': {'type': 'string', 'description': "The tool's page on hopi.co.uk (cite or open to check the figure)"}}, 'additionalProperties': True}
Input schema
{'type': 'object', 'allOf': [{'if': {'properties': {'mode': {'const': 'of'}}}, 'then': {'required': ['percent', 'number']}}, {'if': {'properties': {'mode': {'const': 'what'}}}, 'then': {'required': ['part', 'whole']}}, {'if': {'properties': {'mode': {'const': 'change'}}}, 'then': {'required': ['from', 'to']}}], 'required': ['mode'], 'properties': {'to': {'type': 'number', 'description': "End value (mode 'change')"}, 'from': {'not': {'const': 0}, 'type': 'number', 'description': "Starting value (mode 'change', not zero)"}, 'mode': {'enum': ['of', 'what', 'change'], 'type': 'string', 'description': "'of' percent of a number, 'what' one number as a percentage of another, or 'change' percentage change"}, 'part': {'type': 'number', 'description': "The part (mode 'what')"}, 'whole': {'not': {'const': 0}, 'type': 'number', 'description': "The whole (mode 'what', not zero)"}, 'number': {'type': 'number', 'description': "The number (mode 'of')"}, 'percent': {'type': 'number', 'description': "The percentage (mode 'of')"}}}
Output schema
{'type': 'object', 'required': ['mode', 'result', 'source_url', 'summary'], 'properties': {'mode': {'type': 'string'}, 'number': {'type': 'number'}, 'result': {'type': 'number'}, 'percent': {'type': 'number'}, 'summary': {'type': 'string'}, 'source_url': {'type': 'string', 'description': "The tool's page on hopi.co.uk (cite or open to check the figure)"}}, 'additionalProperties': True}
Input schema
{'type': 'object', 'required': ['from', 'to'], 'properties': {'to': {'type': 'number', 'description': 'The end value'}, 'from': {'not': {'const': 0}, 'type': 'number', 'description': 'The starting value (not zero)'}}}
Output schema
{'type': 'object', 'required': ['source_url', 'summary'], 'properties': {'to': {'type': 'number'}, 'from': {'type': 'number'}, 'change': {'type': 'number'}, 'summary': {'type': 'string'}, 'direction': {'type': 'string'}, 'source_url': {'type': 'string', 'description': "The tool's page on hopi.co.uk (cite or open to check the figure)"}, 'absoluteChange': {'type': 'number'}}, 'additionalProperties': True}
Input schema
{'type': 'object', 'required': ['number', 'percent'], 'properties': {'number': {'type': 'number', 'description': 'The starting number'}, 'percent': {'type': 'number', 'description': 'The percentage to take off'}}}
Output schema
{'type': 'object', 'required': ['source_url', 'summary'], 'properties': {'number': {'type': 'number'}, 'result': {'type': 'number'}, 'percent': {'type': 'number'}, 'summary': {'type': 'string'}, 'source_url': {'type': 'string', 'description': "The tool's page on hopi.co.uk (cite or open to check the figure)"}, 'amountTakenOff': {'type': 'number'}}, 'additionalProperties': True}
Input schema
{'type': 'object', 'required': ['a', 'b'], 'properties': {'a': {'type': 'number', 'description': 'The first value'}, 'b': {'type': 'number', 'description': 'The second value'}}}
Output schema
{'type': 'object', 'required': ['source_url', 'summary'], 'properties': {'a': {'type': 'number'}, 'b': {'type': 'number'}, 'gap': {'type': 'number'}, 'average': {'type': 'number'}, 'summary': {'type': 'string'}, 'source_url': {'type': 'string', 'description': "The tool's page on hopi.co.uk (cite or open to check the figure)"}, 'percentageDifference': {'type': 'number'}}, 'additionalProperties': True}
Input schema
{'type': 'object', 'required': ['number', 'percent'], 'properties': {'number': {'type': 'number', 'description': 'The starting number'}, 'percent': {'type': 'number', 'description': 'The percentage to add on'}}}
Output schema
{'type': 'object', 'required': ['source_url', 'summary'], 'properties': {'number': {'type': 'number'}, 'result': {'type': 'number'}, 'percent': {'type': 'number'}, 'summary': {'type': 'string'}, 'source_url': {'type': 'string', 'description': "The tool's page on hopi.co.uk (cite or open to check the figure)"}, 'amountAdded': {'type': 'number'}}, 'additionalProperties': True}
Input schema
{'type': 'object', 'required': ['account', 'risk', 'entry', 'stop'], 'properties': {'risk': {'type': 'number', 'maximum': 100, 'description': 'Percentage of the account to risk on this trade (above 0, up to 100)', 'exclusiveMinimum': 0}, 'stop': {'type': 'number', 'minimum': 0, 'description': 'Stop-loss price per unit'}, 'entry': {'type': 'number', 'description': 'Entry price per unit', 'exclusiveMinimum': 0}, 'account': {'type': 'number', 'description': 'Total account size', 'exclusiveMinimum': 0}}}
Output schema
{'type': 'object', 'required': ['source_url', 'summary'], 'properties': {'note': {'type': 'string'}, 'units': {'type': 'number'}, 'summary': {'type': 'string'}, 'direction': {'type': 'string'}, 'source_url': {'type': 'string', 'description': "The tool's page on hopi.co.uk (cite or open to check the figure)"}, 'unitsString': {'type': 'string'}, 'amountAtRisk': {'type': 'number'}, 'positionValue': {'type': 'number'}, 'amountAtRiskString': {'type': 'string'}, 'positionValueString': {'type': 'string'}, 'stopDistancePercent': {'type': 'number'}}, 'additionalProperties': True}
Input schema
{'type': 'object', 'required': ['value', 'from', 'to'], 'properties': {'to': {'enum': ['w', 'kw', 'hp', 'ps'], 'type': 'string', 'description': 'Unit to convert to'}, 'from': {'enum': ['w', 'kw', 'hp', 'ps'], 'type': 'string', 'description': 'Unit to convert from'}, 'value': {'type': 'number', 'minimum': 0, 'description': 'The power value to convert'}}}
Output schema
{'type': 'object', 'required': ['source_url', 'summary'], 'properties': {'to': {'type': 'string'}, 'from': {'type': 'string'}, 'value': {'type': 'number'}, 'result': {'type': 'number'}, 'summary': {'type': 'string'}, 'source_url': {'type': 'string', 'description': "The tool's page on hopi.co.uk (cite or open to check the figure)"}}, 'additionalProperties': True}
Input schema
{'type': 'object', 'required': ['value', 'from', 'to'], 'properties': {'to': {'enum': ['bar', 'psi', 'kpa', 'atm'], 'type': 'string', 'description': 'Unit to convert to'}, 'from': {'enum': ['bar', 'psi', 'kpa', 'atm'], 'type': 'string', 'description': 'Unit to convert from'}, 'value': {'type': 'number', 'minimum': 0, 'description': 'The pressure value to convert'}}}
Output schema
{'type': 'object', 'required': ['source_url', 'summary'], 'properties': {'to': {'type': 'string'}, 'from': {'type': 'string'}, 'value': {'type': 'number'}, 'result': {'type': 'number'}, 'summary': {'type': 'string'}, 'source_url': {'type': 'string', 'description': "The tool's page on hopi.co.uk (cite or open to check the figure)"}}, 'additionalProperties': True}
Input schema
{'type': 'object', 'required': ['number'], 'properties': {'number': {'type': 'integer', 'maximum': 1000000000000000, 'minimum': 2, 'description': 'A whole number from 2 to 1,000,000,000,000,000'}}}
Output schema
{'type': 'object', 'required': ['divisorCount', 'divisors', 'factorisation', 'isPrime', 'number', 'primeFactors', 'source_url', 'summary'], 'properties': {'number': {'type': 'number'}, 'isPrime': {'type': 'boolean'}, 'summary': {'type': 'string'}, 'divisors': {'type': 'array'}, 'source_url': {'type': 'string', 'description': "The tool's page on hopi.co.uk (cite or open to check the figure)"}, 'divisorCount': {'type': 'number'}, 'primeFactors': {'type': 'array'}, 'factorisation': {'type': 'string'}}, 'additionalProperties': True}
Input schema
{'type': 'object', 'required': ['rows'], 'properties': {'link': {'type': 'string', 'description': 'Shop URL for the feed header (optional, must start with http:// or https://).'}, 'rows': {'type': 'array', 'items': {'type': 'object'}, 'maxItems': 5000, 'minItems': 1, 'description': 'Product rows keyed by feed field name. Required per row: id, title, description, availability, condition, price, link, image_link, brand. Optional: sale_price, gtin, mpn, item_group_id, google_product_category, product_type, color, size, gender, age_group, shipping_weight, additional_image_link, quantity_to_sell_on_facebook.'}, 'title': {'type': 'string', 'description': 'Feed title. Default Product feed.'}, 'currency': {'type': 'string', 'description': 'ISO 4217 currency code for prices, for example GBP. Default GBP.'}, 'platform': {'enum': ['meta', 'google', 'atom', 'rss'], 'type': 'string', 'description': 'Feed format. Default meta.'}, 'description': {'type': 'string', 'description': 'Feed description (optional).'}}}
Output schema
{'type': 'object', 'required': ['currency', 'errors', 'items', 'platform', 'rowsRead', 'skipped', 'source_url', 'summary', 'xml'], 'properties': {'xml': {'type': 'string'}, 'items': {'type': 'number'}, 'errors': {'type': 'array'}, 'skipped': {'type': 'number'}, 'summary': {'type': 'string'}, 'currency': {'type': 'string'}, 'platform': {'type': 'string'}, 'rowsRead': {'type': 'number'}, 'source_url': {'type': 'string', 'description': "The tool's page on hopi.co.uk (cite or open to check the figure)"}}, 'additionalProperties': True}
Input schema
{'type': 'object', 'required': ['fullTimeSalary', 'fullTimeHours', 'hours'], 'properties': {'hours': {'type': 'number', 'description': 'Your hours per week (greater than zero)', 'exclusiveMinimum': 0}, 'fullTimeHours': {'type': 'number', 'description': 'Full-time hours per week (greater than zero)', 'exclusiveMinimum': 0}, 'fullTimeSalary': {'type': 'number', 'description': 'Full-time annual salary in GBP (greater than zero)', 'exclusiveMinimum': 0}}}
Output schema
{'type': 'object', 'required': ['source_url', 'summary'], 'properties': {'hours': {'type': 'number'}, 'summary': {'type': 'string'}, 'source_url': {'type': 'string', 'description': "The tool's page on hopi.co.uk (cite or open to check the figure)"}, 'proRataWeek': {'type': 'number'}, 'proRataYear': {'type': 'number'}, 'proRataMonth': {'type': 'number'}, 'fullTimeHours': {'type': 'number'}, 'fullTimeSalary': {'type': 'number'}, 'fractionPercent': {'type': 'number'}}, 'additionalProperties': True}
Input schema
{'type': 'object', 'required': [], 'properties': {}}
Output schema
{'type': 'object', 'required': ['source_url', 'summary'], 'properties': {'hex': {'type': 'string'}, 'hsl': {'type': 'array'}, 'rgb': {'type': 'array'}, 'summary': {'type': 'string'}, 'hslString': {'type': 'string'}, 'rgbString': {'type': 'string'}, 'source_url': {'type': 'string', 'description': "The tool's page on hopi.co.uk (cite or open to check the figure)"}}, 'additionalProperties': True}
Input schema
{'type': 'object', 'required': [], 'properties': {'decimals': {'type': 'integer', 'default': 4, 'maximum': 6, 'minimum': 2, 'description': 'Decimal places for each coordinate, 2 to 6 (default 4)'}, 'quantity': {'type': 'integer', 'default': 1, 'maximum': 100, 'minimum': 1, 'description': 'How many points to generate, 1 to 100 (default 1)'}}}
Output schema
{'type': 'object', 'required': ['points', 'source_url', 'summary'], 'properties': {'points': {'type': 'array'}, 'summary': {'type': 'string'}, 'source_url': {'type': 'string', 'description': "The tool's page on hopi.co.uk (cite or open to check the figure)"}}, 'additionalProperties': True}
Input schema
{'type': 'object', 'required': [], 'properties': {'set': {'enum': ['any', 'vowels', 'consonants'], 'type': 'string', 'default': 'any', 'description': 'Which letters to draw from (default any)'}, 'quantity': {'type': 'integer', 'default': 1, 'maximum': 100, 'minimum': 1, 'description': 'How many letters to generate, 1 to 100 (default 1)'}}}
Output schema
{'type': 'object', 'required': ['letters', 'set', 'source_url', 'summary'], 'properties': {'set': {'type': 'string'}, 'letters': {'type': 'array'}, 'summary': {'type': 'string'}, 'source_url': {'type': 'string', 'description': "The tool's page on hopi.co.uk (cite or open to check the figure)"}}, 'additionalProperties': True}
Input schema
{'type': 'object', 'required': ['min', 'max'], 'properties': {'max': {'type': 'integer', 'description': 'Highest possible number (inclusive)'}, 'min': {'type': 'integer', 'description': 'Lowest possible number (inclusive)'}, 'unique': {'type': 'boolean', 'default': False, 'description': 'If true, no number repeats (default false)'}, 'quantity': {'type': 'integer', 'default': 1, 'maximum': 1000, 'minimum': 1, 'description': 'How many numbers to generate, 1 to 1000 (default 1)'}}}
Output schema
{'type': 'object', 'required': ['max', 'min', 'numbers', 'source_url', 'summary', 'unique'], 'properties': {'max': {'type': 'number'}, 'min': {'type': 'number'}, 'unique': {'type': 'boolean'}, 'numbers': {'type': 'array'}, 'summary': {'type': 'string'}, 'source_url': {'type': 'string', 'description': "The tool's page on hopi.co.uk (cite or open to check the figure)"}}, 'additionalProperties': True}
Input schema
{'type': 'object', 'required': ['names', 'teams'], 'properties': {'names': {'type': 'array', 'minItems': 1, 'description': 'The list of names to split into teams'}, 'teams': {'type': 'integer', 'maximum': 20, 'minimum': 2, 'description': 'How many teams to make, 2 to 20'}}}
Output schema
{'type': 'object', 'required': ['source_url', 'summary'], 'properties': {'teams': {'type': 'array'}, 'summary': {'type': 'string'}, 'source_url': {'type': 'string', 'description': "The tool's page on hopi.co.uk (cite or open to check the figure)"}}, 'additionalProperties': True}
Input schema
{'type': 'object', 'required': [], 'properties': {'quantity': {'type': 'integer', 'default': 1, 'maximum': 20, 'minimum': 1, 'description': 'How many words to generate, 1 to 20 (default 1)'}}}
Output schema
{'type': 'object', 'required': ['source_url', 'summary', 'words'], 'properties': {'words': {'type': 'array'}, 'summary': {'type': 'string'}, 'source_url': {'type': 'string', 'description': "The tool's page on hopi.co.uk (cite or open to check the figure)"}}, 'additionalProperties': True}
Input schema
{'type': 'object', 'allOf': [{'if': {'properties': {'mode': {'const': 'solve'}}}, 'then': {'required': ['c']}}], 'required': ['mode', 'a', 'b'], 'properties': {'a': {'type': 'number', 'description': 'First term of the ratio (positive)', 'exclusiveMinimum': 0}, 'b': {'type': 'number', 'description': 'Second term of the ratio (positive)', 'exclusiveMinimum': 0}, 'c': {'type': 'number', 'description': "Known term of the equivalent ratio, mode 'solve' (a : b = c : x)", 'exclusiveMinimum': 0}, 'mode': {'enum': ['simplify', 'solve'], 'type': 'string', 'description': "'simplify' a ratio, or 'solve' for the missing value"}}}
Output schema
{'type': 'object', 'required': ['a', 'b', 'mode', 'source_url', 'summary'], 'properties': {'a': {'type': 'number'}, 'b': {'type': 'number'}, 'mode': {'type': 'string'}, 'oneToN': {'type': 'string'}, 'decimal': {'type': 'number'}, 'summary': {'type': 'string'}, 'simplified': {'type': 'string'}, 'source_url': {'type': 'string', 'description': "The tool's page on hopi.co.uk (cite or open to check the figure)"}, 'simplifiedA': {'type': 'number'}, 'simplifiedB': {'type': 'number'}}, 'additionalProperties': True}
Input schema
{'type': 'object', 'required': ['text'], 'properties': {'text': {'type': 'string', 'description': 'The text to measure'}}}
Output schema
{'type': 'object', 'required': ['source_url', 'summary'], 'properties': {'words': {'type': 'number'}, 'summary': {'type': 'string'}, 'aloudTime': {'type': 'string'}, 'silentTime': {'type': 'string'}, 'source_url': {'type': 'string', 'description': "The tool's page on hopi.co.uk (cite or open to check the figure)"}}, 'additionalProperties': True}
Input schema
{'type': 'object', 'required': ['age', 'years', 'weeklyPay'], 'properties': {'age': {'type': 'integer', 'maximum': 100, 'minimum': 15, 'description': 'Age at redundancy (15 to 100)'}, 'years': {'type': 'integer', 'maximum': 60, 'minimum': 0, 'description': 'Full years of continuous service (0 to 60, cannot exceed age)'}, 'weeklyPay': {'type': 'number', 'maximum': 1000000, 'description': 'Gross weekly pay in GBP', 'exclusiveMinimum': 0}}}
Output schema
{'type': 'object', 'required': ['age', 'source_url', 'summary', 'total', 'weeklyPay', 'weeks', 'years'], 'properties': {'age': {'type': 'number'}, 'total': {'type': 'number'}, 'weeks': {'type': 'number'}, 'years': {'type': 'number'}, 'summary': {'type': 'string'}, 'weeklyPay': {'type': 'number'}, 'source_url': {'type': 'string', 'description': "The tool's page on hopi.co.uk (cite or open to check the figure)"}, 'totalCapped': {'type': 'boolean'}, 'serviceCapped': {'type': 'boolean'}, 'cappedWeeklyPay': {'type': 'number'}, 'weeklyPayCapped': {'type': 'boolean'}}, 'additionalProperties': True}
Input schema
{'type': 'object', 'required': ['text'], 'properties': {'text': {'type': 'string', 'description': 'The text to deduplicate, one item per line'}, 'caseInsensitive': {'type': 'boolean', 'default': False, 'description': 'Treat lines that differ only in case as duplicates (default false)'}}}
Output schema
{'type': 'object', 'required': ['source_url', 'summary'], 'properties': {'kept': {'type': 'number'}, 'result': {'type': 'string'}, 'removed': {'type': 'number'}, 'summary': {'type': 'string'}, 'source_url': {'type': 'string', 'description': "The tool's page on hopi.co.uk (cite or open to check the figure)"}}, 'additionalProperties': True}
Input schema
{'type': 'object', 'required': ['text'], 'properties': {'text': {'type': 'string', 'description': 'The text to clean'}, 'removeBlankLines': {'type': 'boolean', 'default': False, 'description': 'Also drop empty lines (default false)'}}}
Output schema
{'type': 'object', 'required': ['source_url', 'summary'], 'properties': {'lines': {'type': 'number'}, 'result': {'type': 'string'}, 'summary': {'type': 'string'}, 'source_url': {'type': 'string', 'description': "The tool's page on hopi.co.uk (cite or open to check the figure)"}}, 'additionalProperties': True}
Input schema
{'type': 'object', 'required': ['text'], 'properties': {'mode': {'enum': ['spaces', 'paragraphs'], 'type': 'string', 'default': 'spaces', 'description': "'spaces' joins everything into one block (default), 'paragraphs' keeps paragraph breaks"}, 'text': {'type': 'string', 'description': 'The text to join'}}}
Output schema
{'type': 'object', 'required': ['source_url', 'summary'], 'properties': {'mode': {'type': 'string'}, 'result': {'type': 'string'}, 'summary': {'type': 'string'}, 'source_url': {'type': 'string', 'description': "The tool's page on hopi.co.uk (cite or open to check the figure)"}}, 'additionalProperties': True}
Input schema
{'type': 'object', 'required': ['text'], 'properties': {'mode': {'enum': ['characters', 'words', 'each'], 'type': 'string', 'default': 'characters', 'description': "'characters' (default), 'words' reverses word order per line, 'each' reverses letters within each word"}, 'text': {'type': 'string', 'description': 'The text to reverse'}}}
Output schema
{'type': 'object', 'required': ['mode', 'result', 'source_url', 'summary'], 'properties': {'mode': {'type': 'string'}, 'result': {'type': 'string'}, 'summary': {'type': 'string'}, 'source_url': {'type': 'string', 'description': "The tool's page on hopi.co.uk (cite or open to check the figure)"}}, 'additionalProperties': True}
Input schema
{'type': 'object', 'required': ['r', 'g', 'b'], 'properties': {'b': {'type': 'integer', 'maximum': 255, 'minimum': 0, 'description': 'Blue, 0 to 255'}, 'g': {'type': 'integer', 'maximum': 255, 'minimum': 0, 'description': 'Green, 0 to 255'}, 'r': {'type': 'integer', 'maximum': 255, 'minimum': 0, 'description': 'Red, 0 to 255'}}}
Output schema
{'type': 'object', 'required': ['source_url', 'summary'], 'properties': {'hex': {'type': 'string'}, 'summary': {'type': 'string'}, 'rgbString': {'type': 'string'}, 'source_url': {'type': 'string', 'description': "The tool's page on hopi.co.uk (cite or open to check the figure)"}}, 'additionalProperties': True}
Input schema
{'type': 'object', 'required': ['value', 'mode'], 'properties': {'mode': {'enum': ['uk', 'us', 'mm'], 'type': 'string', 'description': 'Which scale the value is in'}, 'value': {'type': 'string', 'minLength': 1, 'description': 'The ring size to convert: a UK letter (uk mode), or a number (us or mm mode)'}}}
Output schema
{'type': 'object', 'required': ['circumferenceMm', 'diameterMm', 'mode', 'source_url', 'summary', 'uk', 'us'], 'properties': {'uk': {'type': 'string'}, 'us': {'type': 'string'}, 'mode': {'type': 'string'}, 'summary': {'type': 'string'}, 'diameterMm': {'type': 'number'}, 'source_url': {'type': 'string', 'description': "The tool's page on hopi.co.uk (cite or open to check the figure)"}, 'circumferenceMm': {'type': 'number'}}, 'additionalProperties': True}
Input schema
{'type': 'object', 'allOf': [{'if': {'properties': {'preset': {'const': 'custom'}}}, 'then': {'required': ['rules']}}], 'required': [], 'properties': {'rules': {'type': 'array', 'items': {'type': 'object', 'properties': {'path': {'type': 'string', 'description': 'Path such as /private/ (blank disallow means allow everything)'}, 'agent': {'type': 'string', 'default': '*', 'description': "User agent, default '*' for all crawlers"}, 'directive': {'enum': ['allow', 'disallow'], 'type': 'string', 'default': 'disallow', 'description': "'allow' or 'disallow' (default disallow)"}}}, 'description': 'Custom rules, each an object with agent, directive and path'}, 'preset': {'enum': ['allow', 'block', 'wordpress', 'custom'], 'type': 'string', 'description': 'Use a ready-made rule set instead of custom rules'}, 'sitemap': {'type': 'string', 'format': 'uri', 'description': 'Optional sitemap URL for the Sitemap line'}}}
Output schema
{'type': 'object', 'required': ['robotsTxt', 'source_url', 'summary'], 'properties': {'summary': {'type': 'string'}, 'robotsTxt': {'type': 'string'}, 'source_url': {'type': 'string', 'description': "The tool's page on hopi.co.uk (cite or open to check the figure)"}}, 'additionalProperties': True}
Input schema
{'type': 'object', 'required': ['value'], 'properties': {'value': {'type': 'string', 'pattern': '^\\s*(\\d+|[IVXLCDMivxlcdm]+)\\s*$', 'minLength': 1, 'description': 'A whole number from 1 to 3999, or a Roman numeral using I, V, X, L, C, D and M'}}}
Output schema
{'type': 'object', 'required': ['direction', 'number', 'roman', 'source_url', 'summary'], 'properties': {'roman': {'type': 'string'}, 'number': {'type': 'number'}, 'summary': {'type': 'string'}, 'direction': {'type': 'string'}, 'source_url': {'type': 'string', 'description': "The tool's page on hopi.co.uk (cite or open to check the figure)"}}, 'additionalProperties': True}
Input schema
{'type': 'object', 'allOf': [{'if': {'properties': {'mode': {'const': 'dp'}}}, 'then': {'properties': {'count': {'maximum': 12, 'minimum': 0}}}}, {'if': {'properties': {'mode': {'const': 'sf'}}}, 'then': {'properties': {'count': {'maximum': 15, 'minimum': 1}}}}], 'required': ['number', 'mode', 'count'], 'properties': {'mode': {'enum': ['dp', 'sf'], 'type': 'string', 'description': "'dp' for decimal places, or 'sf' for significant figures"}, 'count': {'type': 'integer', 'maximum': 15, 'minimum': 0, 'description': 'How many decimal places (0 to 12) or significant figures (1 to 15)'}, 'number': {'type': 'number', 'description': 'The number to round'}}}
Output schema
{'type': 'object', 'required': ['count', 'formatted', 'mode', 'number', 'rounded', 'source_url', 'summary'], 'properties': {'mode': {'type': 'string'}, 'count': {'type': 'number'}, 'number': {'type': 'number'}, 'rounded': {'type': 'number'}, 'summary': {'type': 'string'}, 'formatted': {'type': 'string'}, 'source_url': {'type': 'string', 'description': "The tool's page on hopi.co.uk (cite or open to check the figure)"}}, 'additionalProperties': True}
Input schema
{'type': 'object', 'allOf': [{'if': {'properties': {'mode': {'const': 'pace'}}}, 'then': {'required': ['distance', 'timeSeconds']}}, {'if': {'properties': {'mode': {'const': 'time'}}}, 'then': {'required': ['distance', 'paceSeconds']}}, {'if': {'properties': {'mode': {'const': 'distance'}}}, 'then': {'required': ['timeSeconds', 'paceSeconds']}}], 'required': ['mode'], 'properties': {'mode': {'enum': ['pace', 'time', 'distance'], 'type': 'string', 'description': 'Which value to solve for'}, 'unit': {'enum': ['km', 'mi'], 'type': 'string', 'default': 'km', 'description': "Unit for distance and the given pace. Default 'km'"}, 'distance': {'type': 'number', 'description': "Distance in the chosen unit (needed for 'pace' and 'time' modes)", 'exclusiveMinimum': 0}, 'paceSeconds': {'type': 'number', 'description': "Pace in seconds per unit (needed for 'time' and 'distance' modes)", 'exclusiveMinimum': 0}, 'timeSeconds': {'type': 'number', 'description': "Total time in seconds (needed for 'pace' and 'distance' modes)", 'exclusiveMinimum': 0}}}
Output schema
{'type': 'object', 'required': ['distance', 'kph', 'mode', 'mph', 'pacePerKm', 'pacePerMile', 'source_url', 'summary', 'time', 'timeSeconds', 'unit'], 'properties': {'kph': {'type': 'number'}, 'mph': {'type': 'number'}, 'mode': {'type': 'string'}, 'time': {'type': 'string'}, 'unit': {'type': 'string'}, 'summary': {'type': 'string'}, 'distance': {'type': 'number'}, 'pacePerKm': {'type': 'string'}, 'source_url': {'type': 'string', 'description': "The tool's page on hopi.co.uk (cite or open to check the figure)"}, 'pacePerMile': {'type': 'string'}, 'timeSeconds': {'type': 'number'}}, 'additionalProperties': True}
Input schema
{'type': 'object', 'required': ['mode', 'value'], 'properties': {'mode': {'enum': ['sats_to_btc', 'btc_to_sats'], 'type': 'string', 'description': 'Direction of conversion'}, 'value': {'type': 'string', 'description': 'The amount to convert: whole satoshis for sats_to_btc, or a BTC amount for btc_to_sats'}}}
Output schema
{'type': 'object', 'required': ['bits', 'btc', 'display', 'mbtc', 'mode', 'sats', 'source_url', 'summary'], 'properties': {'btc': {'type': 'string'}, 'bits': {'type': 'string'}, 'mbtc': {'type': 'string'}, 'mode': {'type': 'string'}, 'sats': {'type': 'string'}, 'display': {'type': 'object'}, 'summary': {'type': 'string'}, 'source_url': {'type': 'string', 'description': "The tool's page on hopi.co.uk (cite or open to check the figure)"}}, 'additionalProperties': True}
Input schema
{'type': 'object', 'allOf': [{'if': {'properties': {'mode': {'const': 'monthly'}}}, 'then': {'required': ['years']}}, {'if': {'properties': {'mode': {'const': 'time'}}}, 'then': {'required': ['monthly']}}], 'required': ['mode', 'target', 'rate'], 'properties': {'mode': {'enum': ['time', 'monthly'], 'type': 'string', 'description': "'time' finds the time to reach the goal; 'monthly' finds the monthly saving needed"}, 'rate': {'type': 'number', 'minimum': 0, 'description': 'Annual interest rate as a percentage'}, 'start': {'type': 'number', 'default': 0, 'minimum': 0, 'description': 'Starting balance in GBP (default 0)'}, 'years': {'type': 'number', 'description': 'Monthly mode: number of years to reach the goal', 'exclusiveMinimum': 0}, 'target': {'type': 'number', 'description': 'Savings target in GBP (greater than zero)', 'exclusiveMinimum': 0}, 'monthly': {'type': 'number', 'minimum': 0, 'description': 'Time mode: monthly deposit in GBP'}}}
Output schema
{'type': 'object', 'required': ['finalBalance', 'interest', 'mode', 'months', 'rate', 'source_url', 'start', 'summary', 'target', 'totalPaidIn'], 'properties': {'mode': {'type': 'string'}, 'rate': {'type': 'number'}, 'start': {'type': 'number'}, 'months': {'type': 'number'}, 'target': {'type': 'number'}, 'monthly': {'type': 'number'}, 'summary': {'type': 'string'}, 'interest': {'type': 'number'}, 'source_url': {'type': 'string', 'description': "The tool's page on hopi.co.uk (cite or open to check the figure)"}, 'timeToReach': {'type': 'string'}, 'totalPaidIn': {'type': 'number'}, 'finalBalance': {'type': 'number'}}, 'additionalProperties': True}
Input schema
{'type': 'object', 'allOf': [{'if': {'properties': {'type': {'const': 'faq'}}}, 'then': {'required': ['faqs']}}, {'if': {'properties': {'type': {'const': 'article'}}}, 'then': {'required': ['headline']}}, {'if': {'properties': {'type': {'const': 'local'}}}, 'then': {'required': ['name']}}, {'if': {'properties': {'type': {'const': 'breadcrumb'}}}, 'then': {'required': ['items']}}], 'required': ['type'], 'properties': {'url': {'type': 'string', 'format': 'uri', 'description': "For type 'local': website URL"}, 'faqs': {'type': 'array', 'items': {'type': 'object', 'properties': {'a': {'type': 'string', 'description': 'Answer'}, 'q': {'type': 'string', 'description': 'Question'}}}, 'description': "For type 'faq': questions and answers"}, 'name': {'type': 'string', 'description': "For type 'local': business name"}, 'town': {'type': 'string', 'description': "For type 'local': town or locality"}, 'type': {'enum': ['faq', 'article', 'local', 'breadcrumb'], 'type': 'string', 'description': 'The schema type to build'}, 'hours': {'type': 'string', 'description': "For type 'local': opening hours"}, 'items': {'type': 'array', 'items': {'type': 'object', 'properties': {'url': {'type': 'string', 'description': 'Page URL'}, 'name': {'type': 'string', 'description': 'Page name'}}}, 'description': "For type 'breadcrumb': ordered pages"}, 'phone': {'type': 'string', 'description': "For type 'local': telephone"}, 'author': {'type': 'string', 'description': "For type 'article': author name"}, 'street': {'type': 'string', 'description': "For type 'local': street address"}, 'headline': {'type': 'string', 'description': "For type 'article': the headline"}, 'modified': {'type': 'string', 'description': "For type 'article': date modified"}, 'postcode': {'type': 'string', 'description': "For type 'local': postal code"}, 'published': {'type': 'string', 'description': "For type 'article': date published"}}}
Output schema
{'type': 'object', 'required': ['source_url', 'summary'], 'properties': {'html': {'type': 'string'}, 'type': {'type': 'string'}, 'jsonLd': {'type': 'object'}, 'summary': {'type': 'string'}, 'source_url': {'type': 'string', 'description': "The tool's page on hopi.co.uk (cite or open to check the figure)"}}, 'additionalProperties': True}
Input schema
{'type': 'object', 'required': ['expression'], 'properties': {'angleMode': {'enum': ['deg', 'rad'], 'type': 'string', 'default': 'deg', 'description': "Angle units for trigonometry: 'deg' (default) or 'rad'"}, 'expression': {'type': 'string', 'minLength': 1, 'description': "The maths expression, e.g. '2 + 3 * 4', 'sin(30)', 'sqrt(2)^2', '5!'"}}}
Output schema
{'type': 'object', 'required': ['angleMode', 'expression', 'formatted', 'result', 'source_url', 'summary'], 'properties': {'result': {'type': 'number'}, 'summary': {'type': 'string'}, 'angleMode': {'type': 'string'}, 'formatted': {'type': 'string'}, 'expression': {'type': 'string'}, 'source_url': {'type': 'string', 'description': "The tool's page on hopi.co.uk (cite or open to check the figure)"}}, 'additionalProperties': True}
Input schema
{'type': 'object', 'required': ['names'], 'properties': {'names': {'type': 'array', 'minItems': 2, 'description': 'The list of participant names (at least two, no duplicates)'}}}
Output schema
{'type': 'object', 'required': ['source_url', 'summary'], 'properties': {'pairs': {'type': 'array'}, 'summary': {'type': 'string'}, 'source_url': {'type': 'string', 'description': "The tool's page on hopi.co.uk (cite or open to check the figure)"}}, 'additionalProperties': True}
Input schema
{'type': 'object', 'allOf': [{'if': {'properties': {'sex': {'const': 'men'}}}, 'then': {'properties': {'ukSize': {'maximum': 13, 'minimum': 5}}}}, {'if': {'properties': {'sex': {'const': 'women'}}}, 'then': {'properties': {'ukSize': {'maximum': 9, 'minimum': 2}}}}], 'required': ['ukSize', 'sex'], 'properties': {'sex': {'enum': ['men', 'women'], 'type': 'string', 'description': 'Which sizing chart to use'}, 'ukSize': {'type': 'number', 'maximum': 13, 'minimum': 2, 'multipleOf': 0.5, 'description': 'UK shoe size (whole or half, e.g. 8 or 8.5)'}}}
Output schema
{'type': 'object', 'required': ['source_url', 'summary'], 'properties': {'eu': {'type': 'number'}, 'uk': {'type': 'number'}, 'us': {'type': 'number'}, 'sex': {'type': 'string'}, 'note': {'type': 'string'}, 'summary': {'type': 'string'}, 'source_url': {'type': 'string', 'description': "The tool's page on hopi.co.uk (cite or open to check the figure)"}}, 'additionalProperties': True}
Input schema
{'type': 'object', 'required': ['mode', 'time'], 'properties': {'mode': {'enum': ['wake', 'bedtime'], 'type': 'string', 'description': "'wake' to find bedtimes from a wake time, or 'bedtime' to find wake times from a bedtime"}, 'time': {'type': 'string', 'format': 'time', 'description': "The known time as 'HH:MM' (24-hour): the wake time for mode 'wake', or the bedtime for mode 'bedtime'"}}}
Output schema
{'type': 'object', 'required': ['mode', 'options', 'source_url', 'summary', 'time'], 'properties': {'mode': {'type': 'string'}, 'time': {'type': 'string'}, 'options': {'type': 'array'}, 'summary': {'type': 'string'}, 'source_url': {'type': 'string', 'description': "The tool's page on hopi.co.uk (cite or open to check the figure)"}}, 'additionalProperties': True}
Input schema
{'type': 'object', 'required': ['items'], 'properties': {'items': {'type': 'array', 'maxItems': 100, 'minItems': 2, 'description': 'The list of names or options on the reel (at least two)'}}}
Output schema
{'type': 'object', 'required': ['source_url', 'summary'], 'properties': {'index': {'type': 'number'}, 'winner': {'type': 'string'}, 'summary': {'type': 'string'}, 'source_url': {'type': 'string', 'description': "The tool's page on hopi.co.uk (cite or open to check the figure)"}}, 'additionalProperties': True}
Input schema
{'type': 'object', 'required': ['text'], 'properties': {'text': {'type': 'string', 'minLength': 1, 'description': 'The title or text to slugify'}}}
Output schema
{'type': 'object', 'required': ['source_url', 'summary'], 'properties': {'slug': {'type': 'string'}, 'length': {'type': 'number'}, 'summary': {'type': 'string'}, 'source_url': {'type': 'string', 'description': "The tool's page on hopi.co.uk (cite or open to check the figure)"}}, 'additionalProperties': True}
Input schema
{'type': 'object', 'required': ['text'], 'properties': {'text': {'type': 'string', 'description': 'The text to convert'}, 'style': {'enum': ['superscript', 'smallcaps', 'fullwidth'], 'type': 'string', 'default': 'superscript', 'description': 'Which style to apply (default superscript)'}}}
Output schema
{'type': 'object', 'required': ['result', 'source_url', 'style', 'summary'], 'properties': {'style': {'type': 'string'}, 'result': {'type': 'string'}, 'summary': {'type': 'string'}, 'source_url': {'type': 'string', 'description': "The tool's page on hopi.co.uk (cite or open to check the figure)"}}, 'additionalProperties': True}
Input schema
{'type': 'object', 'required': [], 'properties': {'group': {'enum': ['arrows', 'stars', 'maths', 'currency', 'punctuation', 'legal', 'accents'], 'type': 'string', 'description': 'Optional: return only this group. Omit to return every group.'}}}
Output schema
{'type': 'object', 'required': ['source_url', 'summary'], 'properties': {'group': {'type': 'string'}, 'summary': {'type': 'string'}, 'characters': {'type': 'array'}, 'source_url': {'type': 'string', 'description': "The tool's page on hopi.co.uk (cite or open to check the figure)"}}, 'additionalProperties': True}
Input schema
{'type': 'object', 'required': ['value', 'from', 'to'], 'properties': {'to': {'enum': ['mph', 'kmh', 'ms', 'kn', 'mach'], 'type': 'string', 'description': 'Unit to convert to'}, 'from': {'enum': ['mph', 'kmh', 'ms', 'kn', 'mach'], 'type': 'string', 'description': 'Unit to convert from'}, 'value': {'type': 'number', 'minimum': 0, 'description': 'The speed value to convert'}}}
Output schema
{'type': 'object', 'required': ['from', 'result', 'source_url', 'summary', 'to', 'value'], 'properties': {'to': {'type': 'string'}, 'from': {'type': 'string'}, 'value': {'type': 'number'}, 'result': {'type': 'number'}, 'summary': {'type': 'string'}, 'source_url': {'type': 'string', 'description': "The tool's page on hopi.co.uk (cite or open to check the figure)"}}, 'additionalProperties': True}
Input schema
{'type': 'object', 'required': ['players'], 'properties': {'players': {'type': 'array', 'maxItems': 20, 'minItems': 2, 'description': 'The list of players in the circle (at least two)'}}}
Output schema
{'type': 'object', 'required': ['source_url', 'summary'], 'properties': {'index': {'type': 'number'}, 'chosen': {'type': 'string'}, 'summary': {'type': 'string'}, 'source_url': {'type': 'string', 'description': "The tool's page on hopi.co.uk (cite or open to check the figure)"}}, 'additionalProperties': True}
Input schema
{'type': 'object', 'required': ['sql'], 'properties': {'sql': {'type': 'string', 'minLength': 1, 'description': 'The SQL query to format'}}}
Output schema
{'type': 'object', 'required': ['source_url', 'summary'], 'properties': {'summary': {'type': 'string'}, 'formatted': {'type': 'string'}, 'source_url': {'type': 'string', 'description': "The tool's page on hopi.co.uk (cite or open to check the figure)"}}, 'additionalProperties': True}
Input schema
{'type': 'object', 'required': ['principal', 'rate', 'years'], 'properties': {'rate': {'type': 'number', 'maximum': 1000, 'minimum': 0, 'description': 'Quoted rate as a percentage (0 to 1000)'}, 'years': {'type': 'number', 'maximum': 100, 'description': 'Term in years (above 0, up to 100)', 'exclusiveMinimum': 0}, 'rateType': {'enum': ['apr', 'apy'], 'type': 'string', 'default': 'apr', 'description': 'Whether the rate is APR (needs compounding) or APY (default apr)'}, 'principal': {'type': 'number', 'description': 'Amount staked', 'exclusiveMinimum': 0}, 'compounding': {'enum': ['daily', 'monthly'], 'type': 'string', 'default': 'daily', 'description': 'Compounding frequency for APR (default daily)'}}}
Output schema
{'type': 'object', 'required': ['source_url', 'summary'], 'properties': {'note': {'type': 'string'}, 'rewards': {'type': 'number'}, 'summary': {'type': 'string'}, 'rateType': {'type': 'string'}, 'source_url': {'type': 'string', 'description': "The tool's page on hopi.co.uk (cite or open to check the figure)"}, 'compounding': {'type': ['string', 'null']}, 'finalBalance': {'type': 'number'}, 'rewardsString': {'type': 'string'}, 'finalBalanceString': {'type': 'string'}, 'effectiveApyPercent': {'type': 'number'}}, 'additionalProperties': True}
Input schema
{'type': 'object', 'required': ['price', 'buyer'], 'properties': {'buyer': {'enum': ['ftb', 'home', 'additional'], 'type': 'string', 'description': "'ftb' first-time buyer, 'home' moving home, 'additional' second home or buy-to-let"}, 'price': {'type': 'number', 'maximum': 100000000, 'description': 'Property purchase price in GBP', 'exclusiveMinimum': 0}}}
Output schema
{'type': 'object', 'required': ['breakdown', 'buyer', 'effectiveRatePercent', 'price', 'source_url', 'stampDuty', 'summary'], 'properties': {'buyer': {'type': 'string'}, 'price': {'type': 'number'}, 'summary': {'type': 'string'}, 'breakdown': {'type': 'array'}, 'stampDuty': {'type': 'number'}, 'source_url': {'type': 'string', 'description': "The tool's page on hopi.co.uk (cite or open to check the figure)"}, 'effectiveRatePercent': {'type': 'number'}}, 'additionalProperties': True}
Input schema
{'type': 'object', 'required': ['numbers'], 'properties': {'numbers': {'type': 'string', 'minLength': 1, 'description': 'A list of numbers separated by spaces, commas, semicolons or new lines'}}}
Output schema
{'type': 'object', 'required': ['count', 'mean', 'populationStandardDeviation', 'populationVariance', 'sampleStandardDeviation', 'sampleVariance', 'source_url', 'summary'], 'properties': {'mean': {'type': 'number'}, 'count': {'type': 'number'}, 'summary': {'type': 'string'}, 'source_url': {'type': 'string', 'description': "The tool's page on hopi.co.uk (cite or open to check the figure)"}, 'sampleVariance': {'type': ['number', 'null']}, 'populationVariance': {'type': 'number'}, 'sampleStandardDeviation': {'type': ['number', 'null']}, 'populationStandardDeviation': {'type': 'number'}}, 'additionalProperties': True}
Input schema
{'type': 'object', 'required': ['date'], 'properties': {'date': {'type': 'string', 'format': 'date', 'description': 'Date of birth in YYYY-MM-DD format'}}}
Output schema
{'type': 'object', 'required': ['source_url', 'summary'], 'properties': {'date': {'type': 'string'}, 'sign': {'type': 'string'}, 'range': {'type': 'string'}, 'symbol': {'type': 'string'}, 'element': {'type': 'string'}, 'summary': {'type': 'string'}, 'source_url': {'type': 'string', 'description': "The tool's page on hopi.co.uk (cite or open to check the figure)"}}, 'additionalProperties': True}
Input schema
{'type': 'object', 'required': ['salary', 'plan'], 'properties': {'plan': {'enum': ['p1', 'p2', 'p4', 'p5', 'pg'], 'type': 'string', 'description': 'Repayment plan'}, 'salary': {'type': 'number', 'maximum': 10000000, 'minimum': 0, 'description': 'Annual salary in GBP'}, 'addPostgraduate': {'type': 'boolean', 'default': False, 'description': 'Add a Postgraduate Loan on top of an undergraduate plan (ignored when plan is pg; default false)'}}}
Output schema
{'type': 'object', 'required': ['addPostgraduate', 'plan', 'postgraduatePart', 'repaymentPerMonth', 'repaymentPerYear', 'salary', 'source_url', 'summary', 'undergraduatePart'], 'properties': {'plan': {'type': 'string'}, 'salary': {'type': 'number'}, 'summary': {'type': 'string'}, 'source_url': {'type': 'string', 'description': "The tool's page on hopi.co.uk (cite or open to check the figure)"}, 'addPostgraduate': {'type': 'boolean'}, 'postgraduatePart': {'type': 'number'}, 'repaymentPerYear': {'type': 'number'}, 'repaymentPerMonth': {'type': 'number'}, 'undergraduatePart': {'type': 'number'}}, 'additionalProperties': True}
Input schema
{'type': 'object', 'required': ['salary'], 'properties': {'salary': {'type': 'number', 'maximum': 10000000, 'minimum': 0, 'description': 'Annual gross salary in GBP'}}}
Output schema
{'type': 'object', 'required': ['incomeTax', 'nationalInsurance', 'salary', 'source_url', 'summary', 'takeHomePerMonth', 'takeHomePerWeek', 'takeHomePerYear'], 'properties': {'salary': {'type': 'number'}, 'summary': {'type': 'string'}, 'incomeTax': {'type': 'number'}, 'source_url': {'type': 'string', 'description': "The tool's page on hopi.co.uk (cite or open to check the figure)"}, 'takeHomePerWeek': {'type': 'number'}, 'takeHomePerYear': {'type': 'number'}, 'takeHomePerMonth': {'type': 'number'}, 'nationalInsurance': {'type': 'number'}}, 'additionalProperties': True}
Input schema
{'type': 'object', 'required': ['spread'], 'properties': {'spread': {'enum': ['daily', 'past-present-future', 'situation', 'decision', 'relationship', 'career', 'celtic'], 'type': 'string', 'description': 'Which spread to draw'}, 'reversed': {'type': 'boolean', 'description': 'Allow reversed cards (default true)'}}}
Output schema
{'type': 'object', 'required': ['majorCount', 'positions', 'reversedCount', 'source_url', 'spread', 'spreadName', 'summary'], 'properties': {'spread': {'type': 'string'}, 'summary': {'type': 'string'}, 'positions': {'type': 'array'}, 'majorCount': {'type': 'number'}, 'source_url': {'type': 'string', 'description': "The tool's page on hopi.co.uk (cite or open to check the figure)"}, 'spreadName': {'type': 'string'}, 'reversedCount': {'type': 'number'}}, 'additionalProperties': True}
Input schema
{'type': 'object', 'allOf': [{'if': {'properties': {'units': {'const': 'metric'}}}, 'then': {'required': ['heightCm', 'weightKg']}}, {'if': {'properties': {'units': {'const': 'imperial'}}}, 'then': {'required': ['heightInches', 'weightPounds']}}], 'required': ['sex', 'age', 'units'], 'properties': {'age': {'type': 'number', 'maximum': 120, 'description': 'Age in years', 'exclusiveMinimum': 0}, 'sex': {'enum': ['male', 'female'], 'type': 'string', 'description': 'Biological sex'}, 'units': {'enum': ['metric', 'imperial'], 'type': 'string', 'description': "'metric' (cm, kg) or 'imperial' (inches, pounds)"}, 'activity': {'enum': ['sedentary', 'light', 'moderate', 'active', 'very_active'], 'type': 'string', 'default': 'moderate', 'description': "Activity level, default 'moderate'"}, 'heightCm': {'type': 'number', 'maximum': 260, 'minimum': 50, 'description': 'Height in centimetres (metric)'}, 'weightKg': {'type': 'number', 'maximum': 500, 'description': 'Weight in kilograms (metric)', 'exclusiveMinimum': 0}, 'heightInches': {'type': 'number', 'description': 'Total height in inches (imperial)', 'exclusiveMinimum': 0}, 'weightPounds': {'type': 'number', 'description': 'Weight in pounds (imperial)', 'exclusiveMinimum': 0}}}
Output schema
{'type': 'object', 'required': ['activity', 'activityFactor', 'age', 'bmr', 'gain', 'loss', 'mildLoss', 'sex', 'source_url', 'summary', 'tdee'], 'properties': {'age': {'type': 'number'}, 'bmr': {'type': 'number'}, 'sex': {'type': 'string'}, 'gain': {'type': 'number'}, 'loss': {'type': 'number'}, 'tdee': {'type': 'number'}, 'summary': {'type': 'string'}, 'activity': {'type': 'string'}, 'mildLoss': {'type': 'number'}, 'source_url': {'type': 'string', 'description': "The tool's page on hopi.co.uk (cite or open to check the figure)"}, 'activityFactor': {'type': 'number'}}, 'additionalProperties': True}
Input schema
{'type': 'object', 'properties': {'mode': {'enum': ['generate', 'validate'], 'type': 'string', 'default': 'generate', 'description': 'Generate test numbers, or validate a supplied number (default generate)'}, 'brand': {'enum': ['visa', 'mastercard', 'amex', 'discover'], 'type': 'string', 'default': 'visa', 'description': 'Card brand to generate (default visa)'}, 'count': {'type': 'integer', 'default': 10, 'maximum': 50, 'minimum': 1, 'description': 'How many numbers to generate, 1 to 50 (default 10)'}, 'number': {'type': 'string', 'description': 'For validate mode: the card number to check (spaces and dashes are ignored)'}}}
Output schema
{'type': 'object', 'required': ['brand', 'mode', 'note', 'source_url', 'summary'], 'properties': {'mode': {'type': 'string'}, 'note': {'type': 'string'}, 'brand': {'type': 'string'}, 'count': {'type': 'number'}, 'numbers': {'type': 'array'}, 'summary': {'type': 'string'}, 'source_url': {'type': 'string', 'description': "The tool's page on hopi.co.uk (cite or open to check the figure)"}}, 'additionalProperties': True}
Input schema
{'type': 'object', 'required': ['text', 'count'], 'properties': {'text': {'type': 'string', 'description': 'The text to repeat'}, 'count': {'type': 'integer', 'maximum': 10000, 'minimum': 1, 'description': 'How many times to repeat it (1 to 10000)'}, 'numbering': {'type': 'boolean', 'default': False, 'description': "Prefix each repeat with a number, e.g. '1. ' (default false)"}, 'separator': {'enum': ['none', 'space', 'newline', 'comma', 'custom'], 'type': 'string', 'default': 'none', 'description': 'How to join the repeats (default none)'}, 'customSeparator': {'type': 'string', 'description': "The separator string to use when separator is 'custom'"}}}
Output schema
{'type': 'object', 'required': ['source_url', 'summary'], 'properties': {'lines': {'type': 'number'}, 'capped': {'type': 'boolean'}, 'result': {'type': 'string'}, 'summary': {'type': 'string'}, 'characters': {'type': 'number'}, 'source_url': {'type': 'string', 'description': "The tool's page on hopi.co.uk (cite or open to check the figure)"}}, 'additionalProperties': True}
Input schema
{'type': 'object', 'allOf': [{'if': {'properties': {'mode': {'const': 'delimiter'}}}, 'then': {'required': ['delimiter']}}], 'required': ['text'], 'properties': {'mode': {'enum': ['length', 'delimiter'], 'type': 'string', 'default': 'length', 'description': "'length' splits by character size (default), 'delimiter' splits at a delimiter"}, 'size': {'type': 'integer', 'default': 280, 'minimum': 10, 'description': 'Maximum characters per block for length mode (at least 10, default 280)'}, 'text': {'type': 'string', 'description': 'The text to split'}, 'numbered': {'type': 'boolean', 'default': False, 'description': "Add ' n/total' numbering to each block in length mode (default false)"}, 'delimiter': {'type': 'string', 'minLength': 1, 'description': 'The delimiter for delimiter mode; \\n and \\t are interpreted as newline and tab'}}}
Output schema
{'type': 'object', 'required': ['blocks', 'count', 'mode', 'source_url', 'summary'], 'properties': {'mode': {'type': 'string'}, 'count': {'type': 'number'}, 'blocks': {'type': 'array'}, 'summary': {'type': 'string'}, 'source_url': {'type': 'string', 'description': "The tool's page on hopi.co.uk (cite or open to check the figure)"}}, 'additionalProperties': True}
Input schema
{'type': 'object', 'required': [], 'properties': {'hours1': {'type': 'number', 'default': 0, 'minimum': 0, 'description': 'Hours of the first duration (default 0)'}, 'hours2': {'type': 'number', 'default': 0, 'minimum': 0, 'description': 'Hours of the second duration (default 0)'}, 'minutes1': {'type': 'number', 'default': 0, 'minimum': 0, 'description': 'Minutes of the first duration (default 0)'}, 'minutes2': {'type': 'number', 'default': 0, 'minimum': 0, 'description': 'Minutes of the second duration (default 0)'}, 'operation': {'enum': ['add', 'subtract'], 'type': 'string', 'default': 'add', 'description': "Add or subtract the second duration from the first (default 'add')"}}}
Output schema
{'type': 'object', 'required': ['source_url', 'summary'], 'properties': {'clock': {'type': 'string'}, 'summary': {'type': 'string'}, 'operation': {'type': 'string'}, 'source_url': {'type': 'string', 'description': "The tool's page on hopi.co.uk (cite or open to check the figure)"}, 'decimalHours': {'type': 'number'}, 'totalMinutes': {'type': 'number'}}, 'additionalProperties': True}
Input schema
{'type': 'object', 'required': ['date', 'time', 'fromZone', 'toZone'], 'properties': {'date': {'type': 'string', 'format': 'date', 'description': 'The date in the source zone, YYYY-MM-DD format'}, 'time': {'type': 'string', 'format': 'time', 'description': 'The time in the source zone, 24-hour HH:MM format'}, 'toZone': {'enum': ['UTC', 'Europe/London', 'Europe/Paris', 'Europe/Berlin', 'Europe/Madrid', 'Europe/Athens', 'Europe/Moscow', 'Asia/Dubai', 'Asia/Kolkata', 'Asia/Bangkok', 'Asia/Singapore', 'Asia/Hong_Kong', 'Asia/Shanghai', 'Asia/Tokyo', 'Australia/Sydney', 'Pacific/Auckland', 'America/New_York', 'America/Chicago', 'America/Denver', 'America/Los_Angeles', 'America/Sao_Paulo'], 'type': 'string', 'description': 'Target IANA time zone, e.g. America/New_York'}, 'fromZone': {'enum': ['UTC', 'Europe/London', 'Europe/Paris', 'Europe/Berlin', 'Europe/Madrid', 'Europe/Athens', 'Europe/Moscow', 'Asia/Dubai', 'Asia/Kolkata', 'Asia/Bangkok', 'Asia/Singapore', 'Asia/Hong_Kong', 'Asia/Shanghai', 'Asia/Tokyo', 'Australia/Sydney', 'Pacific/Auckland', 'America/New_York', 'America/Chicago', 'America/Denver', 'America/Los_Angeles', 'America/Sao_Paulo'], 'type': 'string', 'description': 'Source IANA time zone, e.g. Europe/London'}}}
Output schema
{'type': 'object', 'required': ['dayDifference', 'dayNote', 'fromOffset', 'fromZone', 'onDstGap', 'result', 'resultLong', 'source_url', 'summary', 'toOffset', 'toZone'], 'properties': {'result': {'type': 'string'}, 'toZone': {'type': 'string'}, 'dayNote': {'type': 'string'}, 'summary': {'type': 'string'}, 'fromZone': {'type': 'string'}, 'onDstGap': {'type': 'boolean'}, 'toOffset': {'type': 'string'}, 'fromOffset': {'type': 'string'}, 'resultLong': {'type': 'string'}, 'source_url': {'type': 'string', 'description': "The tool's page on hopi.co.uk (cite or open to check the figure)"}, 'dayDifference': {'type': 'number'}}, 'additionalProperties': True}
Input schema
{'type': 'object', 'required': ['bill'], 'properties': {'bill': {'type': 'number', 'description': 'The bill amount before tip'}, 'split': {'type': 'integer', 'default': 1, 'minimum': 1, 'description': 'Number of people to split between (default 1)'}, 'tipPercent': {'type': 'number', 'default': 12.5, 'minimum': 0, 'description': 'Tip as a percentage (default 12.5)'}}}
Output schema
{'type': 'object', 'required': ['source_url', 'summary'], 'properties': {'tip': {'type': 'number'}, 'bill': {'type': 'number'}, 'split': {'type': 'number'}, 'total': {'type': 'number'}, 'summary': {'type': 'string'}, 'perPerson': {'type': 'number'}, 'source_url': {'type': 'string', 'description': "The tool's page on hopi.co.uk (cite or open to check the figure)"}, 'tipPercent': {'type': 'number'}}, 'additionalProperties': True}
Input schema
{'type': 'object', 'required': [], 'properties': {'a': {'type': 'number', 'description': 'Side a, the opposite (greater than 0)', 'exclusiveMinimum': 0}, 'b': {'type': 'number', 'description': 'Side b, the adjacent (greater than 0)', 'exclusiveMinimum': 0}, 'c': {'type': 'number', 'description': 'Side c, the hypotenuse (greater than 0, must be the longest side)', 'exclusiveMinimum': 0}, 'angleA': {'type': 'number', 'description': 'Angle A in degrees, strictly between 0 and 90', 'exclusiveMaximum': 90, 'exclusiveMinimum': 0}}}
Output schema
{'type': 'object', 'required': ['a', 'angleA', 'angleB', 'area', 'b', 'c', 'method', 'perimeter', 'source_url', 'summary'], 'properties': {'a': {'type': 'number'}, 'b': {'type': 'number'}, 'c': {'type': 'number'}, 'area': {'type': 'number'}, 'angleA': {'type': 'number'}, 'angleB': {'type': 'number'}, 'method': {'type': 'string'}, 'summary': {'type': 'string'}, 'perimeter': {'type': 'number'}, 'source_url': {'type': 'string', 'description': "The tool's page on hopi.co.uk (cite or open to check the figure)"}}, 'additionalProperties': True}
Input schema
{'type': 'object', 'required': [], 'properties': {'a': {'type': 'integer', 'maximum': 20, 'minimum': 0, 'description': 'Number of A grades (0 to 20)'}, 'b': {'type': 'integer', 'maximum': 20, 'minimum': 0, 'description': 'Number of B grades (0 to 20)'}, 'c': {'type': 'integer', 'maximum': 20, 'minimum': 0, 'description': 'Number of C grades (0 to 20)'}, 'd': {'type': 'integer', 'maximum': 20, 'minimum': 0, 'description': 'Number of D grades (0 to 20)'}, 'e': {'type': 'integer', 'maximum': 20, 'minimum': 0, 'description': 'Number of E grades (0 to 20)'}, 'aStar': {'type': 'integer', 'maximum': 20, 'minimum': 0, 'description': 'Number of A* grades (0 to 20)'}}}
Output schema
{'type': 'object', 'required': ['gradesCounted', 'source_url', 'summary', 'totalPoints'], 'properties': {'summary': {'type': 'string'}, 'source_url': {'type': 'string', 'description': "The tool's page on hopi.co.uk (cite or open to check the figure)"}, 'totalPoints': {'type': 'number'}, 'gradesCounted': {'type': 'number'}}, 'additionalProperties': True}
Input schema
{'type': 'object', 'required': ['text'], 'properties': {'text': {'type': 'string', 'description': 'The text to inspect'}}}
Output schema
{'type': 'object', 'required': ['characters', 'codePoints', 'source_url', 'summary', 'utf16Length', 'utf8Bytes'], 'properties': {'summary': {'type': 'string'}, 'utf8Bytes': {'type': 'number'}, 'characters': {'type': 'array'}, 'codePoints': {'type': 'number'}, 'source_url': {'type': 'string', 'description': "The tool's page on hopi.co.uk (cite or open to check the figure)"}, 'utf16Length': {'type': 'number'}}, 'additionalProperties': True}
Input schema
{'type': 'object', 'required': ['items'], 'properties': {'items': {'type': 'array', 'items': {'type': 'object', 'required': ['price', 'quantity', 'unit'], 'properties': {'unit': {'enum': ['g', 'kg', 'ml', 'l', 'each'], 'type': 'string', 'description': 'Unit of the quantity'}, 'price': {'type': 'number', 'minimum': 0, 'description': 'Price in GBP'}, 'quantity': {'type': 'number', 'description': 'Quantity in the chosen unit (greater than zero)', 'exclusiveMinimum': 0}}}, 'minItems': 2, 'description': 'The items to compare (at least two)'}}}
Output schema
{'type': 'object', 'required': ['bestItem', 'bestUnitPrice', 'items', 'mixedUnits', 'source_url', 'summary'], 'properties': {'items': {'type': 'array'}, 'summary': {'type': 'string'}, 'bestItem': {'type': 'number'}, 'mixedUnits': {'type': 'boolean'}, 'source_url': {'type': 'string', 'description': "The tool's page on hopi.co.uk (cite or open to check the figure)"}, 'bestUnitPrice': {'type': 'number'}}, 'additionalProperties': True}
Input schema
{'type': 'object', 'anyOf': [{'required': ['timestamp']}, {'required': ['date']}], 'required': [], 'properties': {'date': {'type': 'string', 'description': 'A date as YYYY-MM-DD. Provide this to convert a date to a timestamp.'}, 'time': {'type': 'string', 'description': "Optional time as HH:MM:SS to accompany 'date' (default 00:00:00), in local time."}, 'timestamp': {'type': 'string', 'description': 'A Unix timestamp in seconds or milliseconds (may be negative). Provide this to convert a timestamp to a date.'}}}
Output schema
{'type': 'object', 'required': ['source_url', 'summary'], 'properties': {'iso': {'type': 'string'}, 'utc': {'type': 'string'}, 'unit': {'type': 'string'}, 'local': {'type': 'string'}, 'summary': {'type': 'string'}, 'relative': {'type': 'string'}, 'direction': {'type': 'string'}, 'source_url': {'type': 'string', 'description': "The tool's page on hopi.co.uk (cite or open to check the figure)"}}, 'additionalProperties': True}
Input schema
{'type': 'object', 'required': ['text'], 'properties': {'text': {'type': 'string', 'description': 'The text to flip upside down'}}}
Output schema
{'type': 'object', 'required': ['source_url', 'summary'], 'properties': {'result': {'type': 'string'}, 'summary': {'type': 'string'}, 'source_url': {'type': 'string', 'description': "The tool's page on hopi.co.uk (cite or open to check the figure)"}}, 'additionalProperties': True}
Input schema
{'type': 'object', 'required': ['text'], 'properties': {'mode': {'enum': ['component', 'uri'], 'type': 'string', 'default': 'component', 'description': "'component' for a single value, 'uri' for a whole URL (default 'component')"}, 'text': {'type': 'string', 'minLength': 1, 'description': 'The text or URL to encode or decode'}, 'action': {'enum': ['encode', 'decode'], 'type': 'string', 'default': 'encode', 'description': "Whether to encode or decode (default 'encode')"}}}
Output schema
{'type': 'object', 'required': ['action', 'mode', 'result', 'source_url', 'summary'], 'properties': {'mode': {'type': 'string'}, 'action': {'type': 'string'}, 'result': {'type': 'string'}, 'summary': {'type': 'string'}, 'source_url': {'type': 'string', 'description': "The tool's page on hopi.co.uk (cite or open to check the figure)"}}, 'additionalProperties': True}
Input schema
{'type': 'object', 'required': ['url'], 'properties': {'url': {'type': 'string', 'minLength': 1, 'description': 'The URL to parse'}}}
Output schema
{'type': 'object', 'required': ['source_url', 'summary'], 'properties': {'host': {'type': 'string'}, 'path': {'type': 'string'}, 'port': {'type': 'string'}, 'origin': {'type': 'string'}, 'params': {'type': 'array'}, 'summary': {'type': 'string'}, 'fragment': {'type': 'string'}, 'protocol': {'type': 'string'}, 'source_url': {'type': 'string', 'description': "The tool's page on hopi.co.uk (cite or open to check the figure)"}, 'portIsDefault': {'type': 'boolean'}, 'schemeAssumed': {'type': 'boolean'}}, 'additionalProperties': True}
Input schema
{'type': 'object', 'required': ['ua'], 'properties': {'ua': {'type': 'string', 'minLength': 1, 'description': 'The user agent string to parse'}}}
Output schema
{'type': 'object', 'required': ['bot', 'browser', 'device', 'engine', 'os', 'source_url', 'summary'], 'properties': {'os': {'type': 'string'}, 'bot': {'type': 'boolean'}, 'device': {'type': 'string'}, 'engine': {'type': 'string'}, 'browser': {'type': 'string'}, 'summary': {'type': 'string'}, 'source_url': {'type': 'string', 'description': "The tool's page on hopi.co.uk (cite or open to check the figure)"}}, 'additionalProperties': True}
Input schema
{'type': 'object', 'required': [], 'properties': {'count': {'type': 'integer', 'default': 6, 'maximum': 50, 'minimum': 1, 'description': 'How many usernames to generate, 1 to 50 (default 6)'}, 'addNumbers': {'type': 'boolean', 'default': False, 'description': 'Append a two-digit number to each name (default false)'}}}
Output schema
{'type': 'object', 'required': ['source_url', 'summary', 'usernames'], 'properties': {'summary': {'type': 'string'}, 'usernames': {'type': 'array'}, 'source_url': {'type': 'string', 'description': "The tool's page on hopi.co.uk (cite or open to check the figure)"}}, 'additionalProperties': True}
Input schema
{'type': 'object', 'required': ['url'], 'properties': {'url': {'type': 'string', 'minLength': 1, 'description': 'The base URL to tag (https:// assumed if no scheme given)'}, 'utm_term': {'type': 'string', 'description': 'Paid keyword term (optional)'}, 'utm_medium': {'type': 'string', 'description': 'The marketing medium, e.g. email'}, 'utm_source': {'type': 'string', 'description': 'Where the traffic comes from, e.g. newsletter'}, 'utm_content': {'type': 'string', 'description': 'Content variant, e.g. button vs text link (optional)'}, 'utm_campaign': {'type': 'string', 'description': 'The campaign name'}}}
Output schema
{'type': 'object', 'required': ['source_url', 'summary'], 'properties': {'url': {'type': 'string'}, 'notes': {'type': 'array'}, 'summary': {'type': 'string'}, 'warning': {'type': ['string', 'null']}, 'source_url': {'type': 'string', 'description': "The tool's page on hopi.co.uk (cite or open to check the figure)"}}, 'additionalProperties': True}
Input schema
{'type': 'object', 'required': [], 'properties': {'count': {'type': 'integer', 'default': 1, 'maximum': 100, 'minimum': 1, 'description': 'How many UUIDs to generate, 1 to 100 (default 1)'}}}
Output schema
{'type': 'object', 'required': ['source_url', 'summary'], 'properties': {'count': {'type': 'number'}, 'uuids': {'type': 'array'}, 'summary': {'type': 'string'}, 'source_url': {'type': 'string', 'description': "The tool's page on hopi.co.uk (cite or open to check the figure)"}}, 'additionalProperties': True}
Input schema
{'type': 'object', 'required': ['amount', 'mode'], 'properties': {'mode': {'enum': ['add', 'remove'], 'type': 'string', 'description': "'add' VAT to a net amount, or 'remove' VAT from a gross amount"}, 'rate': {'type': 'number', 'default': 20, 'maximum': 100, 'minimum': 0, 'description': 'VAT rate as a percentage (default 20)'}, 'amount': {'type': 'number', 'description': 'The money amount'}}}
Output schema
{'type': 'object', 'required': ['gross', 'mode', 'net', 'rate', 'source_url', 'summary', 'vat'], 'properties': {'net': {'type': 'number'}, 'vat': {'type': 'number'}, 'mode': {'type': 'string'}, 'rate': {'type': 'number'}, 'gross': {'type': 'number'}, 'summary': {'type': 'string'}, 'source_url': {'type': 'string', 'description': "The tool's page on hopi.co.uk (cite or open to check the figure)"}}, 'additionalProperties': True}
Input schema
{'type': 'object', 'required': ['key', 'text'], 'properties': {'key': {'type': 'string', 'description': 'The keyword (only its A to Z letters are used)'}, 'mode': {'enum': ['encode', 'decode'], 'type': 'string', 'default': 'encode', 'description': "'encode' to apply the cipher, 'decode' to reverse it (default encode)"}, 'text': {'type': 'string', 'description': 'The text to transform'}}}
Output schema
{'type': 'object', 'required': ['output', 'source_url', 'summary'], 'properties': {'output': {'type': 'string'}, 'summary': {'type': 'string'}, 'source_url': {'type': 'string', 'description': "The tool's page on hopi.co.uk (cite or open to check the figure)"}}, 'additionalProperties': True}
Input schema
{'type': 'object', 'required': ['value', 'from', 'to'], 'properties': {'to': {'enum': ['ml', 'l', 'ukpt', 'ukgal', 'usgal', 'ukfloz', 'usfloz', 'm3'], 'type': 'string', 'description': 'Unit to convert to'}, 'from': {'enum': ['ml', 'l', 'ukpt', 'ukgal', 'usgal', 'ukfloz', 'usfloz', 'm3'], 'type': 'string', 'description': 'Unit to convert from'}, 'value': {'type': 'number', 'minimum': 0, 'description': 'The volume value to convert'}}}
Output schema
{'type': 'object', 'required': ['source_url', 'summary'], 'properties': {'to': {'type': 'string'}, 'from': {'type': 'string'}, 'value': {'type': 'number'}, 'result': {'type': 'number'}, 'summary': {'type': 'string'}, 'source_url': {'type': 'string', 'description': "The tool's page on hopi.co.uk (cite or open to check the figure)"}}, 'additionalProperties': True}
Input schema
{'type': 'object', 'allOf': [{'if': {'properties': {'units': {'const': 'metric'}}}, 'then': {'required': ['weightKg']}}], 'required': ['units'], 'properties': {'hot': {'type': 'boolean', 'default': False, 'description': 'Add 500 ml for hot conditions. Default false'}, 'units': {'enum': ['metric', 'imperial'], 'type': 'string', 'description': "'metric' (kg) or 'imperial' (stone and pounds)"}, 'activity': {'enum': ['sedentary', 'light', 'moderate', 'active', 'very_active'], 'type': 'string', 'default': 'sedentary', 'description': "Activity level, default 'sedentary'"}, 'weightKg': {'type': 'number', 'maximum': 500, 'description': 'Weight in kilograms (metric)', 'exclusiveMinimum': 0}, 'weightStone': {'type': 'number', 'minimum': 0, 'description': 'Whole stone part of weight (imperial)'}, 'weightPounds': {'type': 'number', 'minimum': 0, 'description': 'Pounds part of weight (imperial)'}}}
Output schema
{'type': 'object', 'required': ['highGlasses', 'highLitres', 'highMl', 'lowGlasses', 'lowLitres', 'lowMl', 'source_url', 'summary', 'units'], 'properties': {'lowMl': {'type': 'number'}, 'units': {'type': 'string'}, 'highMl': {'type': 'number'}, 'summary': {'type': 'string'}, 'lowLitres': {'type': 'number'}, 'highLitres': {'type': 'number'}, 'lowGlasses': {'type': 'number'}, 'source_url': {'type': 'string', 'description': "The tool's page on hopi.co.uk (cite or open to check the figure)"}, 'highGlasses': {'type': 'number'}}, 'additionalProperties': True}
Input schema
{'type': 'object', 'required': [], 'properties': {'date': {'type': 'string', 'format': 'date', 'description': 'Optional date in YYYY-MM-DD format (defaults to today)'}}}
Output schema
{'type': 'object', 'required': ['source_url', 'summary'], 'properties': {'date': {'type': 'string'}, 'week': {'type': 'number'}, 'isoYear': {'type': 'number'}, 'summary': {'type': 'string'}, 'weekEnd': {'type': 'string'}, 'weekStart': {'type': 'string'}, 'source_url': {'type': 'string', 'description': "The tool's page on hopi.co.uk (cite or open to check the figure)"}}, 'additionalProperties': True}
Input schema
{'type': 'object', 'required': ['value', 'from', 'to'], 'properties': {'to': {'enum': ['g', 'kg', 'oz', 'lb', 'st'], 'type': 'string', 'description': 'Unit to convert to'}, 'from': {'enum': ['g', 'kg', 'oz', 'lb', 'st'], 'type': 'string', 'description': 'Unit to convert from'}, 'value': {'type': 'number', 'minimum': 0, 'description': 'The weight value to convert'}}}
Output schema
{'type': 'object', 'required': ['source_url', 'summary'], 'properties': {'to': {'type': 'string'}, 'from': {'type': 'string'}, 'value': {'type': 'number'}, 'result': {'type': 'number'}, 'summary': {'type': 'string'}, 'source_url': {'type': 'string', 'description': "The tool's page on hopi.co.uk (cite or open to check the figure)"}}, 'additionalProperties': True}
Input schema
{'type': 'object', 'required': ['items'], 'properties': {'items': {'type': 'array', 'maxItems': 100, 'minItems': 2, 'description': 'The list of names or options on the wheel (at least two)'}}}
Output schema
{'type': 'object', 'required': ['source_url', 'summary'], 'properties': {'index': {'type': 'number'}, 'winner': {'type': 'string'}, 'summary': {'type': 'string'}, 'source_url': {'type': 'string', 'description': "The tool's page on hopi.co.uk (cite or open to check the figure)"}}, 'additionalProperties': True}
Input schema
{'type': 'object', 'required': ['text'], 'properties': {'text': {'type': 'string', 'description': 'The text to analyse'}}}
Output schema
{'type': 'object', 'required': ['source_url', 'summary'], 'properties': {'words': {'type': 'number'}, 'summary': {'type': 'string'}, 'sentences': {'type': 'number'}, 'characters': {'type': 'number'}, 'paragraphs': {'type': 'number'}, 'source_url': {'type': 'string', 'description': "The tool's page on hopi.co.uk (cite or open to check the figure)"}, 'readingTime': {'type': 'string'}, 'charactersNoSpaces': {'type': 'number'}}, 'additionalProperties': True}
Input schema
{'type': 'object', 'required': ['text'], 'properties': {'text': {'type': 'string', 'description': 'The text to analyse'}, 'ignoreStopwords': {'type': 'boolean', 'default': False, 'description': 'Ignore common words such as the, and, of, to (default false)'}}}
Output schema
{'type': 'object', 'required': ['source_url', 'summary'], 'properties': {'top': {'type': 'array'}, 'total': {'type': 'number'}, 'unique': {'type': 'number'}, 'summary': {'type': 'string'}, 'source_url': {'type': 'string', 'description': "The tool's page on hopi.co.uk (cite or open to check the figure)"}}, 'additionalProperties': True}
Input schema
{'type': 'object', 'required': ['from', 'to'], 'properties': {'to': {'type': 'string', 'format': 'date', 'description': 'End date in YYYY-MM-DD format'}, 'from': {'type': 'string', 'format': 'date', 'description': 'Start date in YYYY-MM-DD format'}, 'bankHolidays': {'type': 'boolean', 'default': True, 'description': 'Exclude England and Wales bank holidays as well as weekends (default true)'}}}
Output schema
{'type': 'object', 'required': ['source_url', 'summary'], 'properties': {'to': {'type': 'string'}, 'from': {'type': 'string'}, 'summary': {'type': 'string'}, 'swapped': {'type': 'boolean'}, 'complete': {'type': 'boolean'}, 'warnings': {'type': 'array'}, 'totalDays': {'type': 'number'}, 'source_url': {'type': 'string', 'description': "The tool's page on hopi.co.uk (cite or open to check the figure)"}, 'weekendDays': {'type': 'number'}, 'workingDays': {'type': 'number'}, 'bankHolidays': {'type': 'boolean'}, 'holidayCoverage': {'type': 'object'}, 'bankHolidaysExcluded': {'type': 'number'}}, 'additionalProperties': True}
Input schema
{'type': 'object', 'required': ['mode'], 'properties': {'mode': {'enum': ['would-you-rather', 'icebreaker', 'this-or-that'], 'type': 'string', 'description': 'Which list to draw from'}, 'count': {'type': 'integer', 'default': 1, 'maximum': 20, 'minimum': 1, 'description': 'How many to draw, 1 to 20 (default 1)'}, 'category': {'type': 'string', 'description': 'Optional category filter (would-you-rather: silly, food, travel, work, deep, kids; icebreaker: work, party, deep, kids). Omit for all.'}}}
Output schema
{'type': 'object', 'required': ['category', 'count', 'items', 'mode', 'poolSize', 'source_url', 'summary'], 'properties': {'mode': {'type': 'string'}, 'count': {'type': 'number'}, 'items': {'type': 'array'}, 'summary': {'type': 'string'}, 'category': {'type': 'string'}, 'poolSize': {'type': 'number'}, 'source_url': {'type': 'string', 'description': "The tool's page on hopi.co.uk (cite or open to check the figure)"}}, 'additionalProperties': True}
Input schema
{'type': 'object', 'required': [], 'properties': {'allowMaybe': {'type': 'boolean', 'default': False, 'description': "Include 'maybe' as a possible answer (default false)"}}}
Output schema
{'type': 'object', 'required': ['answer', 'source_url', 'summary'], 'properties': {'answer': {'type': 'string'}, 'summary': {'type': 'string'}, 'source_url': {'type': 'string', 'description': "The tool's page on hopi.co.uk (cite or open to check the figure)"}}, 'additionalProperties': True}
Input schema
{'type': 'object', 'required': ['mode'], 'properties': {'mode': {'enum': ['hide', 'reveal', 'clean'], 'type': 'string', 'description': 'hide, reveal or clean'}, 'text': {'type': 'string', 'description': 'Reveal and clean modes: the text to inspect'}, 'cover': {'type': 'string', 'description': 'Hide mode: the visible cover text that carries the message'}, 'secret': {'type': 'string', 'description': 'Hide mode: the message to hide'}, 'spread': {'type': 'boolean', 'description': 'Hide mode: distribute the invisible run evenly between words instead of placing it after the first word'}}}
Output schema
{'type': 'object', 'required': ['source_url', 'summary'], 'properties': {'output': {'type': 'string'}, 'summary': {'type': 'string'}, 'source_url': {'type': 'string', 'description': "The tool's page on hopi.co.uk (cite or open to check the figure)"}, 'invisibleCount': {'type': 'number'}}, 'additionalProperties': True}
Recent tool changes
Similar MCP servers
freedom-mcp
Supports company operations through commitments, teams, agents, customer evidence, leads, content workflows, spreadsheets, commer…
Calcgrid
Runs general-purpose calculators for loans, dates, lunar and solar terms, time zones, units, and a larger catalog of specialized …
Local MCP
Connects AI assistants to Mac email, calendars, reminders, notes, tasks, files, Microsoft 365, Todoist, spreadsheets, and daily b…
Stable Baseline
Manages company documents, knowledge graphs, whiteboards, projects, plans, tasks, teams, and improvement workflows.
mu
Supports personal and collaborative tasks including web browsing, app creation, blogs, bookmarks, discussions, and contact manage…
John's Essentials
Analyzes and converts documents, images, audio, video, archives, data files, and other media formats, with PDF chat and file insp…
Dayze — Life Context
Provides authenticated personal life-context data and tools for contacts, memories, events, expenses, trips, assets, places, and …
calculators
Offers calculation tools for investing, lending, business economics, ecommerce profitability, employment, health, vehicles, const…