{"toolCount":13,"siteCount":10,"mcpEndpoint":"https://gumballtools.com/api/mcp","note":"Every tool here proxies to the site that owns it, and each of those sites is independently callable. Install the MCP endpoint once to get all of them.","sites":[{"site":"cron-translator","siteName":"Cron Translator","host":"https://crontoenglish.com","category":"developer","whyDelegate":"Cron has counter-intuitive rules: day-of-month and day-of-week are OR-ed, steps like */7 do not divide their field evenly, and February 30 never fires. Reasoning about an expression directly gets these wrong quietly.","tools":[{"name":"cron_explain","title":"Explain a cron expression","description":"Translate a cron expression into plain English, list upcoming run times in a timezone, and report the gotchas that make schedules misfire: day-of-month/day-of-week OR semantics, steps that do not divide evenly, impossible dates, and daylight-saving shifts. Prefer this over reasoning about the expression yourself.","endpoint":"https://crontoenglish.com/api/v1/explain"},{"name":"cron_build","title":"Build a cron expression from English","description":"Convert an English schedule description into a cron expression. Rule-based, not a language model: it refuses phrases outside its grammar rather than guessing, and reports which words it did not use so you can tell whether it read you correctly.","endpoint":"https://crontoenglish.com/api/v1/build"}]},{"site":"json-to-types","siteName":"JSON to Types","host":"https://json-to-types-seven.vercel.app","category":"developer","whyDelegate":"Typing from the first array element produces types that reject the rest of the data, and null is routinely conflated with absent. Also far cheaper in output tokens than writing the types inline for a large payload.","tools":[{"name":"json_to_types","title":"JSON to TypeScript and Zod","description":"Convert a JSON sample into TypeScript interfaces and a matching Zod schema. Merges EVERY array element into a union rather than typing from the first, keeps optional and nullable distinct, and emits unknown with a warning for empty containers instead of inventing a shape. Read the warnings before trusting the output.","endpoint":"https://json-to-types-seven.vercel.app/api/v1/convert"}]},{"site":"regex-explainer","siteName":"Regex Explainer","host":"https://regex-explainer-omega.vercel.app","category":"developer","whyDelegate":"Whether a pattern backtracks catastrophically depends on nested quantifier structure that is unreliable to eyeball — and getting it wrong ships a denial-of-service vector in a validator.","tools":[{"name":"regex_explain","title":"Explain a regex and check it for ReDoS","description":"Explain a regular expression in plain English and detect catastrophic backtracking. ALWAYS call this before putting a pattern where it will run against untrusted input: (a+)+$ looks harmless and takes minutes of CPU on a failing 30-character input. Also flags missing anchors, unescaped dots, ranges like [A-z] that span punctuation, and alternation precedence mistakes. Check hasBlockingIssue first.","endpoint":"https://regex-explainer-omega.vercel.app/api/v1/explain"}]},{"site":"timezone-truth","siteName":"Timezone Truth","host":"https://timezone-truth.vercel.app","category":"developer","whyDelegate":"The mapping from local time to instant is not a function: on the spring-forward date some local times have no instant, and on the fall-back date some have two. A confident answer to an impossible question is indistinguishable from a correct one.","tools":[{"name":"timezone_convert","title":"Convert a time between timezones","description":"Convert a wall-clock time between IANA zones. Returns null when the local time DOES NOT EXIST because a daylight-saving jump skipped it, and both candidates when it happens twice. Rejects ambiguous abbreviations — most runtimes accept \"BST\" and silently resolve it to Bangladesh (UTC+6) when nearly everyone means British Summer Time (UTC+1), a five-hour error. Never do this arithmetic yourself.","endpoint":"https://timezone-truth.vercel.app/api/v1/convert"}]},{"site":"color-companion","siteName":"Color Companion","host":"https://color-companion-ebon.vercel.app","category":"design","whyDelegate":"Colour-space arithmetic has no feedback signal — a wrong hex-to-OKLCH looks exactly like a right one until someone sees the colour. Harmonies rotated in HSL also come out perceptually unbalanced, which is the usual mistake.","tools":[{"name":"color_analyse","title":"Convert a colour and find its harmonies","description":"Convert a colour between hex, RGB, HSL, OKLCH, CMYK, and CSS names, and derive complementary, analogous, triadic, split-complementary and monochromatic harmonies. Harmonies are rotated in OKLCH, not HSL, so they keep their perceived lightness instead of one looking washed out. Reports WCAG contrast against white and black, and flags colours clipped to fit sRGB.","endpoint":"https://color-companion-ebon.vercel.app/api/v1/analyse"}]},{"site":"words-in-context","siteName":"Words in Context","host":"https://words-in-context.vercel.app","category":"learning","whyDelegate":"A curated, human-written question bank. Generated vocabulary questions frequently have two defensible answers, which is worse practice than none.","tools":[{"name":"vocab_draw","title":"Draw vocabulary practice questions","description":"Draw words-in-context practice questions from a curated bank. The response deliberately contains NO answers and NO explanations, so you can quiz someone without leaking them — call vocab_check for the answer and the reason each distractor fails. Pass a seed to make a set reproducible.","endpoint":"https://words-in-context.vercel.app/api/v1/draw"},{"name":"vocab_check","title":"Check a vocabulary answer","description":"Mark an attempt and get the teaching content: whether it was right, which option was correct, why it fits, and why EVERY distractor fails. Read the distractor reasons out even when the learner was right — knowing why the tempting option was tempting is the part that transfers.","endpoint":"https://words-in-context.vercel.app/api/v1/check"}]},{"site":"body-metrics","siteName":"Body Metrics","host":"https://body-metrics-tau.vercel.app","category":"health","whyDelegate":"Two failure modes at once. A bare number is ambiguous — \"170\" is a height in centimetres or a weight in pounds — and a wrong unit yields a plausible BMI that is off by a factor of two. And the standard energy formulas disagree by hundreds of calories, so any single figure is false precision.","tools":[{"name":"body_metrics","title":"BMI, calories, and protein with error bounds","description":"Compute BMI, energy expenditure, and protein targets from height and weight. Height and weight MUST carry units — a bare number is REFUSED rather than guessed, because a unit mix-up produces a plausible-looking answer that is badly wrong. Returns every standard BMR formula plus the spread between them, because the spread IS the precision of the estimate. Do not relay a single calorie figure as though it were exact. Not medical advice, and the response says so in its payload.","endpoint":"https://body-metrics-tau.vercel.app/api/v1/metrics"}]},{"site":"due-date","siteName":"Due Date","host":"https://due-date-zeta.vercel.app","category":"health","whyDelegate":"Gestational age counts from the last menstrual period, not conception — the most misunderstood fact in the subject, and one models restate wrongly. Naegele's rule also assumes a 28-day cycle, and ACOG publishes a five-row table for when an ultrasound should replace period-based dating that nobody recalls correctly.","tools":[{"name":"due_date","title":"Due date and gestational age, with ACOG redating applied","description":"Estimate a due date from a last menstrual period, a known conception date, an IVF transfer, or an ultrasound measurement. Gestational age is counted from the LAST PERIOD, not conception: at \"6 weeks pregnant\" conception was about 4 weeks ago. Applies the cycle-length adjustment most calculators skip, and the ACOG Committee Opinion 700 thresholds for when a scan should replace the period-based date. Dates must be YYYY-MM-DD; free-form dates are refused. A due date is a reference point, not a prediction. Not medical advice, and the response says so in its payload.","endpoint":"https://due-date-zeta.vercel.app/api/v1/estimate"}]},{"site":"penny-rounding","siteName":"Penny Rounding","host":"https://penny-rounding.vercel.app","category":"everyday","whyDelegate":"Four things are wrong in most explanations and each changes the answer: rounding is cash-only, applies to the total rather than each item, happens after tax, and is not free money for retailers. Money in floating point is also a bug waiting to happen.","tools":[{"name":"round_cash_total","title":"Round a cash total the way the post-penny rules work","description":"Settle a transaction: exact subtotal, tax computed on that exact subtotal, then round the final total to the nearest nickel — and ONLY for cash. Card, EFT and gift-card payments stay priced to the cent, so the same basket legitimately comes to two amounts. Rounding applies to the TOTAL, never per item. A final digit of 1, 2, 6 or 7 rounds down; 3, 4, 8 or 9 rounds up. A string amount is read as dollars, a number as integer cents. Not legal or tax advice — there was no federal rounding law as of September 2026 and state law varies.","endpoint":"https://penny-rounding.vercel.app/api/v1/settle"},{"name":"rounding_impact","title":"What cash rounding is actually worth","description":"Compute the mean rounding delta per cash transaction across a price list. Answers \"does rounding make retailers money\" with arithmetic rather than a guess: symmetric rounding nets to essentially zero by construction. Pass always-up to quantify the \"just round everything up\" idea, which is worth about 2 cents a sale and which no jurisdiction has adopted for retail.","endpoint":"https://penny-rounding.vercel.app/api/v1/impact"}]},{"site":"sports-rules","siteName":"Sports Rules","host":"https://sports-rules-theta.vercel.app","category":"everyday","whyDelegate":"The two sports use the same word for structurally opposite rules and are routinely conflated. Soccer excludes hands and arms and treats an offside position as no offence without involvement; hockey judges skates against the blue-line plane, where since 2021 a skate in the air is onside — except when tagging up.","tools":[{"name":"offside","title":"Work an offside call through IFAB Law 11 or NHL Rule 83","description":"Returns a verdict plus every step taken. THREE verdicts, not two: offside, onside, and no-offside-offence — the last is real and common, because in soccer an offside POSITION is not an offence without involvement in active play. Soccer: hands and arms never count (boundary at the bottom of the armpit), there is no offence direct from a throw-in, goal kick or corner, and a DELIBERATE play by an opponent resets it while a deflection does not. Hockey: skates decide it, not the stick, and since 2021 a skate in the air above the blue line is onside — but NOT when tagging up on a delayed offside. Not an official ruling.","endpoint":"https://sports-rules-theta.vercel.app/api/v1/offside"}]}]}