API and MCP setup
The same engine behind the web page is exposed as markdown, a JSON API, and an MCP server. All four surfaces are thin wrappers over one pure function, so they cannot disagree.
MCP server
Streamable HTTP at https://check-digit.gumballtools.com/api/mcp. No authentication required.
Claude Code
claude mcp add --transport http check-digit https://check-digit.gumballtools.com/api/mcpClaude Desktop or Cursor
{
"mcpServers": {
"check-digit": {
"type": "http",
"url": "https://check-digit.gumballtools.com/api/mcp"
}
}
}Verify it works
curl -X POST 'https://check-digit.gumballtools.com/api/mcp' \
-H 'Content-Type: application/json' \
-H 'Accept: application/json, text/event-stream' \
-d '{"jsonrpc":"2.0","id":1,"method":"tools/list"}'JSON API
Every endpoint accepts GET with query parameters or POST with a JSON body. CORS is open. `format` is required — one of iban, isbn10, isbn13, ean13, upca, luhn — and is never auto-detected. Full machine-readable description at /.well-known/openapi.json.
curl 'https://check-digit.gumballtools.com/api/v1/run?input=DE89370400440532013000&format=iban'Markdown instead of HTML
Every page has a markdown representation at the same canonical URL. Send Accept: text/markdown or append ?format=md. Responses set Vary: Accept. Do not parse the HTML.
curl -H 'Accept: text/markdown' 'https://check-digit.gumballtools.com/'Errors
Every failure returns the same shape, with a stable code and a hint describing what to change before retrying.
{
"error": {
"code": "invalid_length",
"message": "...",
"fix_hint": "...",
"docs": "https://check-digit.gumballtools.com/docs"
}
}Rate limits and pricing
- Free: 250 calls per UTC day per caller, on every surface. Quotas apply to humans and agents alike.
- Past the quota: HTTP 402 with an x402 v1 payment requirement — $0.001 per call in USDC on base.
- Settlement is not live yet. While that is true the 402 body carries
payment_enabled: false, so do not attempt payment — wait for the reset time inquota.resetsAt.