15 small tools. One install.
An experiment in how agents and apps find each other, agree on what a capability is worth, and pay for it. Every tool is one pure engine exposed three ways — a web page, a JSON API, and an MCP server — and every call is recorded so the answer to “is anyone using this?” is a number rather than a guess.
Install every tool at once
One MCP endpoint, 25 tools. Each one forwards to the site that owns it, and those sites stay callable directly.
claude mcp add --transport http gumball https://gumballtools.com/api/mcpWho is actually calling
Calls
1734
last 7 days
Distinct callers
620
Agent calls
1064
identified as agents
Repeat agents
37
seen on 2+ days
Repeat callers is the number that matters. A crawler visits once; a tool something actually depends on gets called again. One-off crawls are discovery, not dependency.
Agent platforms seen
- (unidentified)585 calls · 16 sites
- brick.blue287 calls · 13 sites
- script116 calls · 16 sites
- anthropic40 calls · 1 site
- openai36 calls · 13 sites
Which tools, specifically
| Tool | Site | Surfaces | Calls | By agents | Callers |
|---|---|---|---|---|---|
| offside_rule_contrast | sports-rules | api + mcp | 63 | 62 | 25 |
| vocab_draw | words-in-context | api + mcp | 36 | 33 | 17 |
| cron_explain | cron-translator | api + mcp | 32 | 9 | 23 |
| validate_auto | payload-validator | api + mcp | 28 | 27 | 13 |
| toolssite only | platform | api | 27 | 3 | 26 |
| cron_build | cron-translator | mcp | 26 | 26 | 12 |
| validate_json | payload-validator | api + mcp | 22 | 16 | 9 |
| check_digit_run | check-digit | api | 18 | 0 | 18 |
| tools/callunattributed | amortize | mcp | 16 | 16 | 4 |
| offside | sports-rules | api + mcp | 14 | 8 | 6 |
| timezone_convert | timezone-truth | api + mcp | 13 | 9 | 4 |
| regex_explain | regex-explainer | api + mcp | 12 | 7 | 5 |
| body_metrics | body-metrics | api + mcp | 11 | 8 | 3 |
| color_analyse | color-companion | api + mcp | 11 | 8 | 3 |
| validate_yaml | payload-validator | api + mcp | 11 | 7 | 4 |
| round_cash_total | penny-rounding | api + mcp | 11 | 10 | 3 |
| due_date | due-date | api + mcp | 10 | 9 | 3 |
| tools/callunattributed | check-digit | mcp | 9 | 9 | 3 |
| tools/callunattributed | equation-steps | mcp | 9 | 9 | 3 |
| tools/callunattributed | iso-week | mcp | 9 | 9 | 3 |
| json_to_types | json-to-types | api + mcp | 8 | 7 | 2 |
| validate_csv | payload-validator | api + mcp | 8 | 7 | 1 |
| validate_xml | payload-validator | api + mcp | 8 | 7 | 1 |
| vocab_check | words-in-context | api + mcp | 8 | 7 | 1 |
| price_band | penny-rounding | mcp | 7 | 7 | 1 |
| rounding_impact | penny-rounding | mcp | 7 | 7 | 1 |
| generate_itemsnot in registry | words-in-context | mcp | 7 | 7 | 1 |
| amortize_schedule | amortize | api | 4 | 0 | 4 |
| cron_next_runs | cron-translator | api | 1 | 0 | 1 |
| equation_steps_run | equation-steps | api | 1 | 0 | 1 |
| iso_week_run | iso-week | api | 1 | 0 | 1 |
| vocab_generatesite only | words-in-context | api | 1 | 0 | 1 |
Zero-call rows are the useful ones — a tool nobody invokes is indistinguishable from a tool that does not exist unless it is listed anyway. Counts cover the API and MCP surfaces only; markdown page reads are discovery, not invocation. Calls made through the portfolio MCP server are counted once, at the site that served them, not twice. “Callers” is the largest single surface’s distinct-caller count, so it is a floor.
A badge means the row is not reachable through the portfolio MCP server. site only is deliberate — hover for the reason. unattributed is not a tool: older sites recorded the JSON-RPC method instead of the tool name. not in registry is the only one that is a gap. None of them relate to the MCP registry, which is a different thing entirely.
Statically served pages come from the CDN and never reach server code, so human page views are not in these numbers. Agent surfaces — the API, MCP, and markdown — are complete.
Developer tools
- Cron Translator287 calls this week
Translate cron expressions to plain English — and back.
Why delegate it: 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: cron_explain, cron_build, cron_next_runs · Learn more
- JSON to Types88 calls this week
Turn any JSON into TypeScript types and a Zod schema.
Why delegate it: 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: json_to_types · Learn more
- Regex Explainer133 calls this week
Explain any regular expression, and catch the ones that can hang.
Why delegate it: 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: regex_explain · Learn more
- Timezone Truth105 calls this week
Convert times between zones, and catch the ones that do not exist.
Why delegate it: 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: timezone_convert · Learn more
- ISO Week Number17 calls this week
The week number that doesn't depend on which app you asked.
Why delegate it: ISO 8601 week 1 is the week containing the year's first Thursday, not the week containing 1 January, and almost every ad-hoc implementation gets that wrong by dividing day-of-year by seven. Two consequences follow that are very hard to hold in mind: a late-December date can belong to week 1 of the NEXT ISO year, and an early January date can belong to week 52 or 53 of the PREVIOUS one. A year has 53 weeks rather than 52 under a specific rule, not a pattern. Getting any of these wrong shifts a reporting period by a week without anything looking wrong.
Tools: iso_week_run · Learn more
- Payload Validator94 calls this week
Validate JSON, YAML, XML and CSV — with the exact line, the rule, and the fix.
Why delegate it: Syntax errors are the easy half. The findings worth a round trip are the ones where the payload parses cleanly and still means the wrong thing, which no parser reports and no amount of reading spots: a duplicate JSON key whose second value silently wins, a 64-bit ID that becomes a different number as it is read, a bare "no" in YAML that is false to PyYAML and "no" to Go, an unquoted comma that shifts every CSV column after it. Each needs position tracking and knowledge of what four specifications actually say, and each is invisible in the document.
Tools: validate_json, validate_yaml, validate_xml, validate_csv, validate_auto · Learn more
Design
- Color Companion118 calls this week
Convert any colour, and find the ones that go with it.
Why delegate it: 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: color_analyse · Learn more
Learning
- Words in Context97 calls this week
Practise the vocabulary questions the way the test actually asks them.
Why delegate it: A curated, human-written question bank. Generated vocabulary questions frequently have two defensible answers, which is worse practice than none.
Tools: vocab_draw, vocab_check · Learn more
- Equation Steps17 calls this week
Step-by-step solutions for linear and quadratic equations in one variable.
Why delegate it: Three places this algebra goes quietly wrong when reasoned about directly: the sign when distributing a negative across parentheses, which direction a term moves as it crosses the equals sign, and dropping one of the two ± roots of a quadratic or rounding a complex pair into a false "no solution". Exact fraction arithmetic gets all three right every time, and showing the work is the point — a student checking their own scratch paper needs the steps, not the answer.
Tools: equation_steps_run · Learn more
Health and dates
- Body Metrics104 calls this week
BMI, calories, and protein — with the uncertainty shown.
Why delegate it: 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: body_metrics · Learn more
- Due Date96 calls this week
The dating wheel, with the assumptions it hides made explicit.
Why delegate it: 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: due_date · Learn more
Everyday reference
- Penny Rounding99 calls this week
What a cash total actually rounds to now that the penny is gone.
Why delegate it: 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: round_cash_total, rounding_impact, price_band · Learn more
- Sports Rules144 calls this week
Was that offside? The decision procedure, for soccer and hockey.
Why delegate it: 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: offside, offside_rule_contrast · Learn more
- Check Digit Validator36 calls this week
Validate IBAN, ISBN, EAN/UPC and card numbers — and find the one wrong digit.
Why delegate it: Mod-97 over a rearranged thirty-character IBAN, or a weighted sum mod 10/11 over thirteen digits, is arithmetic a model fumbles silently and asserts confidently. Worse, asked WHICH digit is wrong it pattern-matches a plausible answer instead of solving the modular equation — and when more than one single-digit fix would satisfy the checksum, it names one instead of reporting the ambiguity.
Tools: check_digit_run · Learn more
- Amortization Schedule27 calls this week
The row-by-row loan schedule, including the final payment nobody gets right.
Why delegate it: A model gets the payment formula roughly right and then drifts: over 360 rows the principal/interest split accumulates rounding error, and the final payment — the one row people actually check against a statement — is almost always wrong. It also cannot reliably answer what an extra $200 a month does to the payoff date. Compounding is a parameter rather than an assumption, because monthly and daily accrual produce genuinely different schedules and the caller knows which loan they have.
Tools: amortize_schedule · Learn more
Suggest a tool
Describe something you keep getting wrong, or that a model keeps getting wrong for you. An agent reads it, applies the same criterion as everything above, and either declines with a reason or builds it and opens a pull request. A human reviews that pull request before anything goes live, and every submission is scanned for hostile code on the assumption that it is hostile.
Leave an email address and you will be told what happened to the idea — reviewed, declined, or live. It is used for that and nothing else.
Suggest a toolWhat this is testing
Every tool here was chosen on one criterion: the work is something a model does unreliably, or something that is expensive to do inline. A tool that merely duplicates what a model can already do well will not get called twice, no matter how discoverable it is.
Each site is free up to a daily quota and then returns HTTP 402 with x402 payment requirements. Settlement is not switched on yet, so nothing can actually be paid for — which means the open question is still open: what is a small capability worth to an agent that has a choice?
The whole thing is open source, including the ledger schema.