Developers
Connect Clean.tools to your scripts or AI agents. Read-only tools, JSON in and JSON out: no key, no signup, requests processed in memory and never written to storage or logs. Deterministic where determinism is the point; cryptographically random where randomness is.
Connect in 30 seconds
One click above, or point any MCP client at the Clean.tools server and every tool below shows up ready to call. Pick your client:
claude mcp add --scope user --transport http clean-tools https://mcp.clean.tools/mcpclaude mcp add --scope user --transport http clean-tools https://mcp.clean.tools/mcphttps://mcp.clean.tools/mcphttps://mcp.clean.tools/mcp{"mcpServers":{"clean-tools":{"url":"https://mcp.clean.tools/mcp"}}}{"mcpServers":{"clean-tools":{"url":"https://mcp.clean.tools/mcp"}}}npx @clean-tools/mcpnpx @clean-tools/mcpAny other MCP-compatible client: point it at https://mcp.clean.tools/mcp (streamable HTTP, authless, no key).
VS Code, Windsurf, Cline, Zed, Continue, Gemini CLI, JetBrains, Warp, Goose, LibreChat, n8n, Zapier and the OpenAI Agents SDK all connect too. Choose your client above for its exact config, or see @clean-tools/mcp on npm for any stdio client.
Slim mounts — save your agent's context
Tool definitions cost context. If you only want a few tools, mount a subset with ?tools= and the server lists only those (calls to everything else still work):
https://mcp.clean.tools/mcp?tools=explain_cron,validate_cron,convert_timezone,strftime_previewhttps://mcp.clean.tools/mcp?tools=explain_cron,validate_cron,convert_timezone,strftime_previewREST quickstart
Every tool is also a plain HTTP endpoint at https://api.clean.tools/v1/<tool>. Here is a full request and response:
{
"category": "length",
"value": 26.2,
"from": "mile",
"to": "km"
}{
"category": "length",
"value": 26.2,
"from": "mile",
"to": "km"
}{
"category": "length",
"value": 26.2,
"from": "mile",
"to": "km",
"result": 42.1648128
}{
"category": "length",
"value": 26.2,
"from": "mile",
"to": "km",
"result": 42.1648128
}curl -s https://api.clean.tools/v1/convert_units \
-H 'content-type: application/json' \
-d '{"category":"length","value":26.2,"from":"mile","to":"km"}'curl -s https://api.clean.tools/v1/convert_units \
-H 'content-type: application/json' \
-d '{"category":"length","value":26.2,"from":"mile","to":"km"}'const res = await fetch('https://api.clean.tools/v1/convert_units', {
method: 'POST',
headers: { 'content-type': 'application/json' },
body: JSON.stringify({ category: 'length', value: 26.2, from: 'mile', to: 'km' })
});
const data = await res.json();const res = await fetch('https://api.clean.tools/v1/convert_units', {
method: 'POST',
headers: { 'content-type': 'application/json' },
body: JSON.stringify({ category: 'length', value: 26.2, from: 'mile', to: 'km' })
});
const data = await res.json();JSON in, JSON out. Bad input returns a 4xx with `{ "error": "...", "code": "..." }`. No auth, no keys. Request bodies are capped at 128 KB. Rate limit: about 60 requests/minute per caller with burst headroom — responses carry standard RateLimit-* headers, and a 429 includes Retry-After; honor it and add jitter. Requests are processed in memory and never written to storage or logs; the only thing counted is anonymous per-tool call totals (never arguments, results, or IPs).
The tools
The same engines behind these tool pages, callable by name.
| Tool | What it does | Page |
|---|---|---|
explain_cron | Describe a cron expression and list its next run times | Open |
validate_cron | Validate a cron expression and expand each field | Open |
expand_rrule | Build an iCalendar RRULE and expand its occurrences | Open |
convert_timezone | Convert a time between two time zones | Open |
strftime_preview | Render a strftime format string for a given time | Open |
amortization_schedule | Compute a mortgage payment and amortization schedule | Open |
tvm_solve | Solve for any time-value-of-money variable | Open |
compound_interest | Project compound growth with optional contributions | Open |
apr_calc | Convert rates and solve a loan's APR | Open |
interest_rate | Find the interest rate between two values | Open |
hash_text | Hash text with SHA-1, SHA-256, or SHA-512 | Open |
diff_text | Line diff two blocks of text | Open |
test_regex | Run a regular expression and return the matches | Open |
convert_data | Convert between JSON, CSV, TSV, and XML | Open |
luhn_validate | Validate a number with the Luhn checksum | Open |
convert_units | Convert between units of measurement | Open |
uuid_v4 | Generate version 4 UUIDs | Open |
random_number | Generate cryptographically random numbers | Open |
generate_password | Generate a strong random password | Open |
decode_jwt | Decode a JWT's header and payload and check claims | Open |
encode_decode | Encode or decode URL and HTML text | Open |
count_text | Count words, characters, sentences, and paragraphs | Open |
generate_qr | Generate a QR code as an SVG | Open |
convert_case | Convert text between cases (camelCase, snake_case, and more) | Open |
fancy_text | Style text with Unicode glyphs (bold, italic, script) | Open |
render_markdown | Render Markdown to sanitized HTML | Open |
lorem_ipsum | Generate lorem ipsum placeholder text | Open |
redact_text | Redact terms in text with block characters | Open |
format_sql | Format and indent SQL queries | Open |
color_palette | Build color palettes from a base color | Open |
color_contrast | Check WCAG contrast between two colors | Open |
css_gradient | Build a CSS gradient from color stops | Open |
percentage | Percentage of, is what percent, and percent change | Open |
tip | Split a bill and calculate the tip | Open |
convert_timestamp | Convert epoch and ISO timestamps across time zones | — |
format_json | Format, minify, and validate JSON with data-loss warnings | Open |
convert_yaml | Convert between YAML and JSON | Open |
convert_color | Convert a color between hex, RGB, HSL, HSV, CMYK, and OKLCH | Open |
slugify | Turn text into URL and filename-safe slugs | — |
convert_number_base | Convert numbers between bases 2-36 exactly | — |
query_json | Extract values from JSON with JSONPath | — |
generate_id | Generate UUID v5/v7, ULID, and Nano ID identifiers | Open |
Schemas and discovery
- OpenAPI spec Machine-readable REST schema
- API catalog Well-known index of the endpoints
- llms.txt Plain-text guide for language models
- MCP registry: tools.clean/mcp The MCP server endpoint
- npm: @clean-tools/mcp The stdio MCP package
Privacy
The API runs the same engines as the tool pages: every tool is read-only and side-effect-free, most are deterministic (same input, same output), and the generator tools use cryptographic randomness. Requests are processed in memory and never written to storage or logs, and nothing is used to train anything. The only thing counted is anonymous per-tool call totals — never arguments, results, or IPs. There are no accounts and no keys. Full details on the privacy page.