{"$schema":"https://wellknown.network/schemas/agent-record-v1.json","schemaVersion":"1","id":"ag_ep7u4mjes694","handle":"tools-clean-mcp","url":"https://wellknown.network/agents/tools-clean-mcp","links":{"self":"https://wellknown.network/agents/tools-clean-mcp/record.json","html":"https://wellknown.network/agents/tools-clean-mcp","markdown":"https://wellknown.network/agents/tools-clean-mcp/record.md","api":"https://wellknown.network/api/v1/agents/tools-clean-mcp","status":"https://wellknown.network/api/v1/agents/tools-clean-mcp/status","claim":"https://wellknown.network/agents/tools-clean-mcp/claim","claimApi":"https://wellknown.network/api/v1/claims","claimDescriptor":"https://wellknown.network/agents/tools-clean-mcp/claim.json","badge":"https://wellknown.network/agents/tools-clean-mcp/badge.svg","openapi":"https://wellknown.network/openapi.json","history":"https://wellknown.network/api/v1/agents/tools-clean-mcp/history","tools":"https://wellknown.network/api/v1/agents/tools-clean-mcp/tools"},"ard":{"identifier":"urn:air:mcp.clean.tools:server:tools-clean-mcp","type":"application/mcp-server-card+json"},"kind":"mcp_server","declared":{"name":"mcp","summary":"Read-only developer, date, finance, and text utilities. Authless remote MCP server by Clean.tools.","description":"Read-only developer, date, finance, and text utilities. Authless remote MCP server by Clean.tools.","publisher":{"name":"tools.clean","url":null},"homepage":"https://clean.tools","repository":null,"version":"0.1.1","license":null,"protocols":["mcp"],"tags":[],"pricing":null,"endpoints":[{"url":"https://mcp.clean.tools/mcp","type":"mcp_streamable_http","auth":null,"probeable":true},{"url":"npm:@clean-tools/mcp","type":"package_npm","auth":null,"probeable":false}],"skills":null,"tools":null,"extra":{"updatedAt":"2026-07-07T03:16:46.242611Z","publishedAt":"2026-07-07T03:16:46.242611Z","registryName":"tools.clean/mcp"},"attribution":{"kind":"mcp_registry","name":"mcp_registry","summary":"mcp_registry","version":"mcp_registry","description":"mcp_registry","homepageUrl":"mcp_registry","publisherName":"mcp_registry"}},"derived":{"capabilities":[{"slug":"automation.scheduling","name":"Scheduling & Cron","confidence":1,"provenance":"derived"},{"slug":"data.database","name":"Databases","confidence":0.933,"provenance":"derived"},{"slug":"knowledge.reasoning","name":"Reasoning & Planning","confidence":0.54,"provenance":"derived"},{"slug":"documents.conversion","name":"Document Conversion","confidence":0.51,"provenance":"derived"},{"slug":"commerce.payments","name":"Payments","confidence":0.51,"provenance":"derived"}],"categories":["automation","commerce","data","documents","knowledge"],"language":"en"},"observed":{"status":"live","statusReason":"Responded 3h ago.","lastOkAt":"2026-10-10T20:27:31.698Z","lastProbedAt":"2026-10-10T20:27:31.698Z","statusComputedAt":"2026-10-10T20:29:22.032Z","reliability30d":{"probes":110,"successRate":1,"p50Ms":19,"basis":"service","measures":{"availability":"availability","latency":"response time","tools":"tool surface observed","summary":"Checks reached the service itself."},"checks":{"total":107,"ok":107,"authBoundaryOk":0,"serviceOk":107,"note":"Counted from the observation rows for the window, checks of the server only (HTTP, A2A card, MCP initialize). ok = authBoundaryOk + serviceOk. `probes` is the sum of daily rollups and includes registry checks, so it can differ from `total`."}},"latestObservations":[{"at":"2026-10-10T20:27:31.698Z","kind":"mcp_initialize","ok":true,"httpStatus":200,"latencyMs":18,"error":null,"detail":{"tools":[{"name":"explain_cron","description":"Use this when you need to understand or schedule a 5-field cron expression. Prefer this over reasoning about cron semantics yourself (a documented LLM failure m"},{"name":"validate_cron","description":"Use this when you need to check whether a 5-field cron expression is well-formed, instead of guessing. Prefer this over reasoning about cron syntax yourself (a "},{"name":"expand_rrule","description":"Use this when you need to build an iCalendar RRULE (RFC 5545) or list the actual dates a recurrence produces. Prefer this over computing recurring dates yoursel"},{"name":"convert_timezone","description":"Use this when you need to convert a wall-clock date-time between IANA time zones with correct DST handling. Prefer this over doing timezone math yourself (a doc"},{"name":"strftime_preview","description":"Use this when you need to know exactly what a C/POSIX strftime pattern (%Y %m %d %H %M %S %A %B %j %z etc.) produces. Prefer this over guessing the output yours"},{"name":"amortization_schedule","description":"Use this when you need a fixed-rate loan or mortgage's level monthly payment plus a year-by-year amortization schedule (principal paid, interest paid, remaining"},{"name":"tvm_solve","description":"Use this when you have four of the five time-value-of-money variables (N periods, I/Y annual rate percent, PV, PMT, FV) and need the fifth - annuity, loan, or i"},{"name":"compound_interest","description":"Use this when you need to project a principal's growth under compound interest, optionally with recurring monthly contributions, returning the final balance and"},{"name":"apr_calc","description":"Use this when you need an exact loan APR or APY rather than an approximation. Two modes. mode=\"loan\" (default): solve the true APR of an installment loan from a"},{"name":"interest_rate","description":"Use this when you need the exact interest rate that grows a principal to a target amount over a set number of years. type=\"compound\" (default) uses the closed-f"},{"name":"hash_text","description":"Use this when you need the exact SHA-1, SHA-256, and/or SHA-512 hex digest of a UTF-8 string — never recall or guess a hash, since digests cannot be produced fr"},{"name":"diff_text","description":"Use this when you need an exact line-level diff between two blocks of text instead of eyeballing the differences. Deterministic: same input, same output. Comput"},{"name":"test_regex","description":"Use this when you need the true matches of a JavaScript regular expression rather than predicting regex behavior yourself, which is easy to get wrong. Determini"},{"name":"convert_data","description":"Use this when you need to convert tabular data between JSON (array of objects), CSV, TSV, and XML instead of hand-transforming it. Deterministic: same input, sa"},{"name":"luhn_validate","description":"Use this when you need to check whether a number passes the Luhn (mod-10) checksum used by credit cards and many identifier numbers, instead of computing the do"},{"name":"convert_units","description":"Use this when you need to convert a value between units within one category (length, weight, temperature, volume, data, speed, area, time) instead of doing conv"},{"name":"uuid_v4","description":"Use this when you need RFC 4122 version-4 UUIDs — always generate them here rather than fabricating one, so the version and variant bits and the randomness are "},{"name":"random_number","description":"Use this when you need to draw cryptographically secure random integers or decimals in a range using unbiased rejection sampling — prefer it over inventing 'ran"},{"name":"generate_password","description":"Use this when you need strong passwords with Web Crypto randomness: mode=\"random\" builds character-set passwords (length plus uppercase/lowercase/numbers/symbol"},{"name":"decode_jwt","description":"Use this when you need to decode (NOT verify) a JSON Web Token: base64url-decode the header and payload, surface standard claims, and report expiry — prefer it "},{"name":"encode_decode","description":"Use this when you need to encode or decode text and want multi-byte and entity edge cases handled correctly rather than doing it by hand. Deterministic: same in"},{"name":"count_text","description":"Use this when you need exact word, character, sentence, and paragraph counts instead of estimating. Deterministic: same input, same output. Uses Unicode-aware s"},{"name":"generate_qr","description":"Use this when you need to turn text or a URL into a real, scannable QR code rather than describing one. Deterministic: same input, same output. Byte mode, error"},{"name":"convert_case","description":"Use this when you need to re-case text into a specific naming or letter case. Given `text` and a target `case` (upper, lower, title, sentence, camel, snake, keb"},{"name":"fancy_text","description":"Use this when you need to style ASCII letters and digits as Unicode glyphs (bold-serif, italic-serif, bold-italic-serif, bold-sans, script, fraktur, double-stru"},{"name":"render_markdown","description":"Use this when you need to convert lightweight Markdown into a sanitized, XSS-safe HTML fragment to preview or embed, matching the Clean.tools markdown preview. "},{"name":"lorem_ipsum","description":"Use this when you need placeholder/filler copy for mockups, tests, or layout. Given a `mode` (\"paragraphs\", \"sentences\", \"words\", or \"formatted\") and a `count`,"},{"name":"redact_text","description":"Use this when scrubbing test/dev text: replaces each occurrence of the given terms with block characters (████). Provide `text` plus `terms` (a comma-separated "},{"name":"format_sql","description":"Use this when a user pastes messy or minified SQL and wants it pretty-printed into a readable, canonical layout, or wants keyword casing normalized. Determinist"},{"name":"color_palette","description":"Use this when you need color-harmony palettes derived from one base hex color. Rotates hue/lightness in HSL to build complementary (+180 degrees), analogous (-3"},{"name":"color_contrast","description":"Use this when checking whether a text/background color pair meets WCAG 2.x accessibility contrast. Computes the relative-luminance contrast ratio (1-21, rounded"},{"name":"css_gradient","description":"Use this when you need a ready-to-paste CSS gradient value from 2-5 hex color stops. Builds a linear-gradient(...) (default; direction defaults to 'to bottom') "},{"name":"percentage","description":"Use this when you want exact, auditable percentage math with a written-out formula. Three modes: \"of\" computes percent% of value (fields percent, value); \"is-wh"},{"name":"tip","description":"Use this when you want penny-accurate tip and bill-split figures. Given a bill amount, a tip percentage, and an optional number of people (default 1; values bel"},{"name":"convert_timestamp","description":"Use this when you have a timestamp in one form (unix epoch seconds/milliseconds/microseconds, or an ISO-8601 date-time) and need it in the others, or rendered i"},{"name":"format_json","description":"Use this when you need to pretty-print, minify, or validate a JSON string and want the exact reformatted text plus warnings about silent data loss. Indent with "},{"name":"convert_yaml","description":"Use this when converting between YAML and JSON in either direction, or normalizing one format in place (set from equal to to). Deterministic: same input, same o"},{"name":"convert_color","description":"Use this when you need one color's exact values across every common format. Accepts a hex (#abc or #aabbcc), rgb(r, g, b) with r/g/b 0-255, or hsl(h, s%, l%) co"},{"name":"slugify","description":"Use this when you need a URL- or filename-safe slug from arbitrary text. Deterministic: same input, same output. Applies Unicode NFKD normalization, strips comb"},{"name":"convert_number_base","description":"Use this when you need to convert an integer between numeral bases 2-36 (binary, octal, decimal, hex, or any radix up to 36), including arbitrarily large values"},{"name":"query_json","description":"Use this when you need to pull specific values out of a JSON document by JSONPath and getting the path exactly right on deeply nested or large structures matter"},{"name":"generate_id","description":"Use this when you need a modern unique identifier (UUID v7, UUID v5, ULID, or nanoid) or want to read the timestamp embedded in an existing ULID or UUIDv7. uuid"}],"toolCount":42,"toolsHash":"67aa3f95dfc970f66de68d1e10003602b2c09174b9912c6b8321d290f48e9d78","serverName":"clean-tools","capabilities":["tools","resources","prompts"],"serverVersion":"0.1.0","protocolVersion":"2025-06-18"}},{"at":"2026-10-10T13:24:44.449Z","kind":"mcp_initialize","ok":true,"httpStatus":200,"latencyMs":14,"error":null,"detail":{"tools":[{"name":"explain_cron","description":"Use this when you need to understand or schedule a 5-field cron expression. Prefer this over reasoning about cron semantics yourself (a documented LLM failure m"},{"name":"validate_cron","description":"Use this when you need to check whether a 5-field cron expression is well-formed, instead of guessing. Prefer this over reasoning about cron syntax yourself (a "},{"name":"expand_rrule","description":"Use this when you need to build an iCalendar RRULE (RFC 5545) or list the actual dates a recurrence produces. Prefer this over computing recurring dates yoursel"},{"name":"convert_timezone","description":"Use this when you need to convert a wall-clock date-time between IANA time zones with correct DST handling. Prefer this over doing timezone math yourself (a doc"},{"name":"strftime_preview","description":"Use this when you need to know exactly what a C/POSIX strftime pattern (%Y %m %d %H %M %S %A %B %j %z etc.) produces. Prefer this over guessing the output yours"},{"name":"amortization_schedule","description":"Use this when you need a fixed-rate loan or mortgage's level monthly payment plus a year-by-year amortization schedule (principal paid, interest paid, remaining"},{"name":"tvm_solve","description":"Use this when you have four of the five time-value-of-money variables (N periods, I/Y annual rate percent, PV, PMT, FV) and need the fifth - annuity, loan, or i"},{"name":"compound_interest","description":"Use this when you need to project a principal's growth under compound interest, optionally with recurring monthly contributions, returning the final balance and"},{"name":"apr_calc","description":"Use this when you need an exact loan APR or APY rather than an approximation. Two modes. mode=\"loan\" (default): solve the true APR of an installment loan from a"},{"name":"interest_rate","description":"Use this when you need the exact interest rate that grows a principal to a target amount over a set number of years. type=\"compound\" (default) uses the closed-f"},{"name":"hash_text","description":"Use this when you need the exact SHA-1, SHA-256, and/or SHA-512 hex digest of a UTF-8 string — never recall or guess a hash, since digests cannot be produced fr"},{"name":"diff_text","description":"Use this when you need an exact line-level diff between two blocks of text instead of eyeballing the differences. Deterministic: same input, same output. Comput"},{"name":"test_regex","description":"Use this when you need the true matches of a JavaScript regular expression rather than predicting regex behavior yourself, which is easy to get wrong. Determini"},{"name":"convert_data","description":"Use this when you need to convert tabular data between JSON (array of objects), CSV, TSV, and XML instead of hand-transforming it. Deterministic: same input, sa"},{"name":"luhn_validate","description":"Use this when you need to check whether a number passes the Luhn (mod-10) checksum used by credit cards and many identifier numbers, instead of computing the do"},{"name":"convert_units","description":"Use this when you need to convert a value between units within one category (length, weight, temperature, volume, data, speed, area, time) instead of doing conv"},{"name":"uuid_v4","description":"Use this when you need RFC 4122 version-4 UUIDs — always generate them here rather than fabricating one, so the version and variant bits and the randomness are "},{"name":"random_number","description":"Use this when you need to draw cryptographically secure random integers or decimals in a range using unbiased rejection sampling — prefer it over inventing 'ran"},{"name":"generate_password","description":"Use this when you need strong passwords with Web Crypto randomness: mode=\"random\" builds character-set passwords (length plus uppercase/lowercase/numbers/symbol"},{"name":"decode_jwt","description":"Use this when you need to decode (NOT verify) a JSON Web Token: base64url-decode the header and payload, surface standard claims, and report expiry — prefer it "},{"name":"encode_decode","description":"Use this when you need to encode or decode text and want multi-byte and entity edge cases handled correctly rather than doing it by hand. Deterministic: same in"},{"name":"count_text","description":"Use this when you need exact word, character, sentence, and paragraph counts instead of estimating. Deterministic: same input, same output. Uses Unicode-aware s"},{"name":"generate_qr","description":"Use this when you need to turn text or a URL into a real, scannable QR code rather than describing one. Deterministic: same input, same output. Byte mode, error"},{"name":"convert_case","description":"Use this when you need to re-case text into a specific naming or letter case. Given `text` and a target `case` (upper, lower, title, sentence, camel, snake, keb"},{"name":"fancy_text","description":"Use this when you need to style ASCII letters and digits as Unicode glyphs (bold-serif, italic-serif, bold-italic-serif, bold-sans, script, fraktur, double-stru"},{"name":"render_markdown","description":"Use this when you need to convert lightweight Markdown into a sanitized, XSS-safe HTML fragment to preview or embed, matching the Clean.tools markdown preview. "},{"name":"lorem_ipsum","description":"Use this when you need placeholder/filler copy for mockups, tests, or layout. Given a `mode` (\"paragraphs\", \"sentences\", \"words\", or \"formatted\") and a `count`,"},{"name":"redact_text","description":"Use this when scrubbing test/dev text: replaces each occurrence of the given terms with block characters (████). Provide `text` plus `terms` (a comma-separated "},{"name":"format_sql","description":"Use this when a user pastes messy or minified SQL and wants it pretty-printed into a readable, canonical layout, or wants keyword casing normalized. Determinist"},{"name":"color_palette","description":"Use this when you need color-harmony palettes derived from one base hex color. Rotates hue/lightness in HSL to build complementary (+180 degrees), analogous (-3"},{"name":"color_contrast","description":"Use this when checking whether a text/background color pair meets WCAG 2.x accessibility contrast. Computes the relative-luminance contrast ratio (1-21, rounded"},{"name":"css_gradient","description":"Use this when you need a ready-to-paste CSS gradient value from 2-5 hex color stops. Builds a linear-gradient(...) (default; direction defaults to 'to bottom') "},{"name":"percentage","description":"Use this when you want exact, auditable percentage math with a written-out formula. Three modes: \"of\" computes percent% of value (fields percent, value); \"is-wh"},{"name":"tip","description":"Use this when you want penny-accurate tip and bill-split figures. Given a bill amount, a tip percentage, and an optional number of people (default 1; values bel"},{"name":"convert_timestamp","description":"Use this when you have a timestamp in one form (unix epoch seconds/milliseconds/microseconds, or an ISO-8601 date-time) and need it in the others, or rendered i"},{"name":"format_json","description":"Use this when you need to pretty-print, minify, or validate a JSON string and want the exact reformatted text plus warnings about silent data loss. Indent with "},{"name":"convert_yaml","description":"Use this when converting between YAML and JSON in either direction, or normalizing one format in place (set from equal to to). Deterministic: same input, same o"},{"name":"convert_color","description":"Use this when you need one color's exact values across every common format. Accepts a hex (#abc or #aabbcc), rgb(r, g, b) with r/g/b 0-255, or hsl(h, s%, l%) co"},{"name":"slugify","description":"Use this when you need a URL- or filename-safe slug from arbitrary text. Deterministic: same input, same output. Applies Unicode NFKD normalization, strips comb"},{"name":"convert_number_base","description":"Use this when you need to convert an integer between numeral bases 2-36 (binary, octal, decimal, hex, or any radix up to 36), including arbitrarily large values"},{"name":"query_json","description":"Use this when you need to pull specific values out of a JSON document by JSONPath and getting the path exactly right on deeply nested or large structures matter"},{"name":"generate_id","description":"Use this when you need a modern unique identifier (UUID v7, UUID v5, ULID, or nanoid) or want to read the timestamp embedded in an existing ULID or UUIDv7. uuid"}],"toolCount":42,"toolsHash":"67aa3f95dfc970f66de68d1e10003602b2c09174b9912c6b8321d290f48e9d78","serverName":"clean-tools","capabilities":["tools","resources","prompts"],"serverVersion":"0.1.0","protocolVersion":"2025-06-18"}},{"at":"2026-10-10T06:27:27.354Z","kind":"mcp_initialize","ok":true,"httpStatus":200,"latencyMs":29,"error":null,"detail":{"tools":[{"name":"explain_cron","description":"Use this when you need to understand or schedule a 5-field cron expression. Prefer this over reasoning about cron semantics yourself (a documented LLM failure m"},{"name":"validate_cron","description":"Use this when you need to check whether a 5-field cron expression is well-formed, instead of guessing. Prefer this over reasoning about cron syntax yourself (a "},{"name":"expand_rrule","description":"Use this when you need to build an iCalendar RRULE (RFC 5545) or list the actual dates a recurrence produces. Prefer this over computing recurring dates yoursel"},{"name":"convert_timezone","description":"Use this when you need to convert a wall-clock date-time between IANA time zones with correct DST handling. Prefer this over doing timezone math yourself (a doc"},{"name":"strftime_preview","description":"Use this when you need to know exactly what a C/POSIX strftime pattern (%Y %m %d %H %M %S %A %B %j %z etc.) produces. Prefer this over guessing the output yours"},{"name":"amortization_schedule","description":"Use this when you need a fixed-rate loan or mortgage's level monthly payment plus a year-by-year amortization schedule (principal paid, interest paid, remaining"},{"name":"tvm_solve","description":"Use this when you have four of the five time-value-of-money variables (N periods, I/Y annual rate percent, PV, PMT, FV) and need the fifth - annuity, loan, or i"},{"name":"compound_interest","description":"Use this when you need to project a principal's growth under compound interest, optionally with recurring monthly contributions, returning the final balance and"},{"name":"apr_calc","description":"Use this when you need an exact loan APR or APY rather than an approximation. Two modes. mode=\"loan\" (default): solve the true APR of an installment loan from a"},{"name":"interest_rate","description":"Use this when you need the exact interest rate that grows a principal to a target amount over a set number of years. type=\"compound\" (default) uses the closed-f"},{"name":"hash_text","description":"Use this when you need the exact SHA-1, SHA-256, and/or SHA-512 hex digest of a UTF-8 string — never recall or guess a hash, since digests cannot be produced fr"},{"name":"diff_text","description":"Use this when you need an exact line-level diff between two blocks of text instead of eyeballing the differences. Deterministic: same input, same output. Comput"},{"name":"test_regex","description":"Use this when you need the true matches of a JavaScript regular expression rather than predicting regex behavior yourself, which is easy to get wrong. Determini"},{"name":"convert_data","description":"Use this when you need to convert tabular data between JSON (array of objects), CSV, TSV, and XML instead of hand-transforming it. Deterministic: same input, sa"},{"name":"luhn_validate","description":"Use this when you need to check whether a number passes the Luhn (mod-10) checksum used by credit cards and many identifier numbers, instead of computing the do"},{"name":"convert_units","description":"Use this when you need to convert a value between units within one category (length, weight, temperature, volume, data, speed, area, time) instead of doing conv"},{"name":"uuid_v4","description":"Use this when you need RFC 4122 version-4 UUIDs — always generate them here rather than fabricating one, so the version and variant bits and the randomness are "},{"name":"random_number","description":"Use this when you need to draw cryptographically secure random integers or decimals in a range using unbiased rejection sampling — prefer it over inventing 'ran"},{"name":"generate_password","description":"Use this when you need strong passwords with Web Crypto randomness: mode=\"random\" builds character-set passwords (length plus uppercase/lowercase/numbers/symbol"},{"name":"decode_jwt","description":"Use this when you need to decode (NOT verify) a JSON Web Token: base64url-decode the header and payload, surface standard claims, and report expiry — prefer it "},{"name":"encode_decode","description":"Use this when you need to encode or decode text and want multi-byte and entity edge cases handled correctly rather than doing it by hand. Deterministic: same in"},{"name":"count_text","description":"Use this when you need exact word, character, sentence, and paragraph counts instead of estimating. Deterministic: same input, same output. Uses Unicode-aware s"},{"name":"generate_qr","description":"Use this when you need to turn text or a URL into a real, scannable QR code rather than describing one. Deterministic: same input, same output. Byte mode, error"},{"name":"convert_case","description":"Use this when you need to re-case text into a specific naming or letter case. Given `text` and a target `case` (upper, lower, title, sentence, camel, snake, keb"},{"name":"fancy_text","description":"Use this when you need to style ASCII letters and digits as Unicode glyphs (bold-serif, italic-serif, bold-italic-serif, bold-sans, script, fraktur, double-stru"},{"name":"render_markdown","description":"Use this when you need to convert lightweight Markdown into a sanitized, XSS-safe HTML fragment to preview or embed, matching the Clean.tools markdown preview. "},{"name":"lorem_ipsum","description":"Use this when you need placeholder/filler copy for mockups, tests, or layout. Given a `mode` (\"paragraphs\", \"sentences\", \"words\", or \"formatted\") and a `count`,"},{"name":"redact_text","description":"Use this when scrubbing test/dev text: replaces each occurrence of the given terms with block characters (████). Provide `text` plus `terms` (a comma-separated "},{"name":"format_sql","description":"Use this when a user pastes messy or minified SQL and wants it pretty-printed into a readable, canonical layout, or wants keyword casing normalized. Determinist"},{"name":"color_palette","description":"Use this when you need color-harmony palettes derived from one base hex color. Rotates hue/lightness in HSL to build complementary (+180 degrees), analogous (-3"},{"name":"color_contrast","description":"Use this when checking whether a text/background color pair meets WCAG 2.x accessibility contrast. Computes the relative-luminance contrast ratio (1-21, rounded"},{"name":"css_gradient","description":"Use this when you need a ready-to-paste CSS gradient value from 2-5 hex color stops. Builds a linear-gradient(...) (default; direction defaults to 'to bottom') "},{"name":"percentage","description":"Use this when you want exact, auditable percentage math with a written-out formula. Three modes: \"of\" computes percent% of value (fields percent, value); \"is-wh"},{"name":"tip","description":"Use this when you want penny-accurate tip and bill-split figures. Given a bill amount, a tip percentage, and an optional number of people (default 1; values bel"},{"name":"convert_timestamp","description":"Use this when you have a timestamp in one form (unix epoch seconds/milliseconds/microseconds, or an ISO-8601 date-time) and need it in the others, or rendered i"},{"name":"format_json","description":"Use this when you need to pretty-print, minify, or validate a JSON string and want the exact reformatted text plus warnings about silent data loss. Indent with "},{"name":"convert_yaml","description":"Use this when converting between YAML and JSON in either direction, or normalizing one format in place (set from equal to to). Deterministic: same input, same o"},{"name":"convert_color","description":"Use this when you need one color's exact values across every common format. Accepts a hex (#abc or #aabbcc), rgb(r, g, b) with r/g/b 0-255, or hsl(h, s%, l%) co"},{"name":"slugify","description":"Use this when you need a URL- or filename-safe slug from arbitrary text. Deterministic: same input, same output. Applies Unicode NFKD normalization, strips comb"},{"name":"convert_number_base","description":"Use this when you need to convert an integer between numeral bases 2-36 (binary, octal, decimal, hex, or any radix up to 36), including arbitrarily large values"},{"name":"query_json","description":"Use this when you need to pull specific values out of a JSON document by JSONPath and getting the path exactly right on deeply nested or large structures matter"},{"name":"generate_id","description":"Use this when you need a modern unique identifier (UUID v7, UUID v5, ULID, or nanoid) or want to read the timestamp embedded in an existing ULID or UUIDv7. uuid"}],"toolCount":42,"toolsHash":"67aa3f95dfc970f66de68d1e10003602b2c09174b9912c6b8321d290f48e9d78","serverName":"clean-tools","capabilities":["tools","resources","prompts"],"serverVersion":"0.1.0","protocolVersion":"2025-06-18"}},{"at":"2026-10-10T00:27:34.759Z","kind":"mcp_initialize","ok":true,"httpStatus":200,"latencyMs":9,"error":null,"detail":{"tools":[{"name":"explain_cron","description":"Use this when you need to understand or schedule a 5-field cron expression. Prefer this over reasoning about cron semantics yourself (a documented LLM failure m"},{"name":"validate_cron","description":"Use this when you need to check whether a 5-field cron expression is well-formed, instead of guessing. Prefer this over reasoning about cron syntax yourself (a "},{"name":"expand_rrule","description":"Use this when you need to build an iCalendar RRULE (RFC 5545) or list the actual dates a recurrence produces. Prefer this over computing recurring dates yoursel"},{"name":"convert_timezone","description":"Use this when you need to convert a wall-clock date-time between IANA time zones with correct DST handling. Prefer this over doing timezone math yourself (a doc"},{"name":"strftime_preview","description":"Use this when you need to know exactly what a C/POSIX strftime pattern (%Y %m %d %H %M %S %A %B %j %z etc.) produces. Prefer this over guessing the output yours"},{"name":"amortization_schedule","description":"Use this when you need a fixed-rate loan or mortgage's level monthly payment plus a year-by-year amortization schedule (principal paid, interest paid, remaining"},{"name":"tvm_solve","description":"Use this when you have four of the five time-value-of-money variables (N periods, I/Y annual rate percent, PV, PMT, FV) and need the fifth - annuity, loan, or i"},{"name":"compound_interest","description":"Use this when you need to project a principal's growth under compound interest, optionally with recurring monthly contributions, returning the final balance and"},{"name":"apr_calc","description":"Use this when you need an exact loan APR or APY rather than an approximation. Two modes. mode=\"loan\" (default): solve the true APR of an installment loan from a"},{"name":"interest_rate","description":"Use this when you need the exact interest rate that grows a principal to a target amount over a set number of years. type=\"compound\" (default) uses the closed-f"},{"name":"hash_text","description":"Use this when you need the exact SHA-1, SHA-256, and/or SHA-512 hex digest of a UTF-8 string — never recall or guess a hash, since digests cannot be produced fr"},{"name":"diff_text","description":"Use this when you need an exact line-level diff between two blocks of text instead of eyeballing the differences. Deterministic: same input, same output. Comput"},{"name":"test_regex","description":"Use this when you need the true matches of a JavaScript regular expression rather than predicting regex behavior yourself, which is easy to get wrong. Determini"},{"name":"convert_data","description":"Use this when you need to convert tabular data between JSON (array of objects), CSV, TSV, and XML instead of hand-transforming it. Deterministic: same input, sa"},{"name":"luhn_validate","description":"Use this when you need to check whether a number passes the Luhn (mod-10) checksum used by credit cards and many identifier numbers, instead of computing the do"},{"name":"convert_units","description":"Use this when you need to convert a value between units within one category (length, weight, temperature, volume, data, speed, area, time) instead of doing conv"},{"name":"uuid_v4","description":"Use this when you need RFC 4122 version-4 UUIDs — always generate them here rather than fabricating one, so the version and variant bits and the randomness are "},{"name":"random_number","description":"Use this when you need to draw cryptographically secure random integers or decimals in a range using unbiased rejection sampling — prefer it over inventing 'ran"},{"name":"generate_password","description":"Use this when you need strong passwords with Web Crypto randomness: mode=\"random\" builds character-set passwords (length plus uppercase/lowercase/numbers/symbol"},{"name":"decode_jwt","description":"Use this when you need to decode (NOT verify) a JSON Web Token: base64url-decode the header and payload, surface standard claims, and report expiry — prefer it "},{"name":"encode_decode","description":"Use this when you need to encode or decode text and want multi-byte and entity edge cases handled correctly rather than doing it by hand. Deterministic: same in"},{"name":"count_text","description":"Use this when you need exact word, character, sentence, and paragraph counts instead of estimating. Deterministic: same input, same output. Uses Unicode-aware s"},{"name":"generate_qr","description":"Use this when you need to turn text or a URL into a real, scannable QR code rather than describing one. Deterministic: same input, same output. Byte mode, error"},{"name":"convert_case","description":"Use this when you need to re-case text into a specific naming or letter case. Given `text` and a target `case` (upper, lower, title, sentence, camel, snake, keb"},{"name":"fancy_text","description":"Use this when you need to style ASCII letters and digits as Unicode glyphs (bold-serif, italic-serif, bold-italic-serif, bold-sans, script, fraktur, double-stru"},{"name":"render_markdown","description":"Use this when you need to convert lightweight Markdown into a sanitized, XSS-safe HTML fragment to preview or embed, matching the Clean.tools markdown preview. "},{"name":"lorem_ipsum","description":"Use this when you need placeholder/filler copy for mockups, tests, or layout. Given a `mode` (\"paragraphs\", \"sentences\", \"words\", or \"formatted\") and a `count`,"},{"name":"redact_text","description":"Use this when scrubbing test/dev text: replaces each occurrence of the given terms with block characters (████). Provide `text` plus `terms` (a comma-separated "},{"name":"format_sql","description":"Use this when a user pastes messy or minified SQL and wants it pretty-printed into a readable, canonical layout, or wants keyword casing normalized. Determinist"},{"name":"color_palette","description":"Use this when you need color-harmony palettes derived from one base hex color. Rotates hue/lightness in HSL to build complementary (+180 degrees), analogous (-3"},{"name":"color_contrast","description":"Use this when checking whether a text/background color pair meets WCAG 2.x accessibility contrast. Computes the relative-luminance contrast ratio (1-21, rounded"},{"name":"css_gradient","description":"Use this when you need a ready-to-paste CSS gradient value from 2-5 hex color stops. Builds a linear-gradient(...) (default; direction defaults to 'to bottom') "},{"name":"percentage","description":"Use this when you want exact, auditable percentage math with a written-out formula. Three modes: \"of\" computes percent% of value (fields percent, value); \"is-wh"},{"name":"tip","description":"Use this when you want penny-accurate tip and bill-split figures. Given a bill amount, a tip percentage, and an optional number of people (default 1; values bel"},{"name":"convert_timestamp","description":"Use this when you have a timestamp in one form (unix epoch seconds/milliseconds/microseconds, or an ISO-8601 date-time) and need it in the others, or rendered i"},{"name":"format_json","description":"Use this when you need to pretty-print, minify, or validate a JSON string and want the exact reformatted text plus warnings about silent data loss. Indent with "},{"name":"convert_yaml","description":"Use this when converting between YAML and JSON in either direction, or normalizing one format in place (set from equal to to). Deterministic: same input, same o"},{"name":"convert_color","description":"Use this when you need one color's exact values across every common format. Accepts a hex (#abc or #aabbcc), rgb(r, g, b) with r/g/b 0-255, or hsl(h, s%, l%) co"},{"name":"slugify","description":"Use this when you need a URL- or filename-safe slug from arbitrary text. Deterministic: same input, same output. Applies Unicode NFKD normalization, strips comb"},{"name":"convert_number_base","description":"Use this when you need to convert an integer between numeral bases 2-36 (binary, octal, decimal, hex, or any radix up to 36), including arbitrarily large values"},{"name":"query_json","description":"Use this when you need to pull specific values out of a JSON document by JSONPath and getting the path exactly right on deeply nested or large structures matter"},{"name":"generate_id","description":"Use this when you need a modern unique identifier (UUID v7, UUID v5, ULID, or nanoid) or want to read the timestamp embedded in an existing ULID or UUIDv7. uuid"}],"toolCount":42,"toolsHash":"67aa3f95dfc970f66de68d1e10003602b2c09174b9912c6b8321d290f48e9d78","serverName":"clean-tools","capabilities":["tools","resources","prompts"],"serverVersion":"0.1.0","protocolVersion":"2025-06-18"}},{"at":"2026-10-09T17:27:56.174Z","kind":"mcp_initialize","ok":true,"httpStatus":200,"latencyMs":44,"error":null,"detail":{"tools":[{"name":"explain_cron","description":"Use this when you need to understand or schedule a 5-field cron expression. Prefer this over reasoning about cron semantics yourself (a documented LLM failure m"},{"name":"validate_cron","description":"Use this when you need to check whether a 5-field cron expression is well-formed, instead of guessing. Prefer this over reasoning about cron syntax yourself (a "},{"name":"expand_rrule","description":"Use this when you need to build an iCalendar RRULE (RFC 5545) or list the actual dates a recurrence produces. Prefer this over computing recurring dates yoursel"},{"name":"convert_timezone","description":"Use this when you need to convert a wall-clock date-time between IANA time zones with correct DST handling. Prefer this over doing timezone math yourself (a doc"},{"name":"strftime_preview","description":"Use this when you need to know exactly what a C/POSIX strftime pattern (%Y %m %d %H %M %S %A %B %j %z etc.) produces. Prefer this over guessing the output yours"},{"name":"amortization_schedule","description":"Use this when you need a fixed-rate loan or mortgage's level monthly payment plus a year-by-year amortization schedule (principal paid, interest paid, remaining"},{"name":"tvm_solve","description":"Use this when you have four of the five time-value-of-money variables (N periods, I/Y annual rate percent, PV, PMT, FV) and need the fifth - annuity, loan, or i"},{"name":"compound_interest","description":"Use this when you need to project a principal's growth under compound interest, optionally with recurring monthly contributions, returning the final balance and"},{"name":"apr_calc","description":"Use this when you need an exact loan APR or APY rather than an approximation. Two modes. mode=\"loan\" (default): solve the true APR of an installment loan from a"},{"name":"interest_rate","description":"Use this when you need the exact interest rate that grows a principal to a target amount over a set number of years. type=\"compound\" (default) uses the closed-f"},{"name":"hash_text","description":"Use this when you need the exact SHA-1, SHA-256, and/or SHA-512 hex digest of a UTF-8 string — never recall or guess a hash, since digests cannot be produced fr"},{"name":"diff_text","description":"Use this when you need an exact line-level diff between two blocks of text instead of eyeballing the differences. Deterministic: same input, same output. Comput"},{"name":"test_regex","description":"Use this when you need the true matches of a JavaScript regular expression rather than predicting regex behavior yourself, which is easy to get wrong. Determini"},{"name":"convert_data","description":"Use this when you need to convert tabular data between JSON (array of objects), CSV, TSV, and XML instead of hand-transforming it. Deterministic: same input, sa"},{"name":"luhn_validate","description":"Use this when you need to check whether a number passes the Luhn (mod-10) checksum used by credit cards and many identifier numbers, instead of computing the do"},{"name":"convert_units","description":"Use this when you need to convert a value between units within one category (length, weight, temperature, volume, data, speed, area, time) instead of doing conv"},{"name":"uuid_v4","description":"Use this when you need RFC 4122 version-4 UUIDs — always generate them here rather than fabricating one, so the version and variant bits and the randomness are "},{"name":"random_number","description":"Use this when you need to draw cryptographically secure random integers or decimals in a range using unbiased rejection sampling — prefer it over inventing 'ran"},{"name":"generate_password","description":"Use this when you need strong passwords with Web Crypto randomness: mode=\"random\" builds character-set passwords (length plus uppercase/lowercase/numbers/symbol"},{"name":"decode_jwt","description":"Use this when you need to decode (NOT verify) a JSON Web Token: base64url-decode the header and payload, surface standard claims, and report expiry — prefer it "},{"name":"encode_decode","description":"Use this when you need to encode or decode text and want multi-byte and entity edge cases handled correctly rather than doing it by hand. Deterministic: same in"},{"name":"count_text","description":"Use this when you need exact word, character, sentence, and paragraph counts instead of estimating. Deterministic: same input, same output. Uses Unicode-aware s"},{"name":"generate_qr","description":"Use this when you need to turn text or a URL into a real, scannable QR code rather than describing one. Deterministic: same input, same output. Byte mode, error"},{"name":"convert_case","description":"Use this when you need to re-case text into a specific naming or letter case. Given `text` and a target `case` (upper, lower, title, sentence, camel, snake, keb"},{"name":"fancy_text","description":"Use this when you need to style ASCII letters and digits as Unicode glyphs (bold-serif, italic-serif, bold-italic-serif, bold-sans, script, fraktur, double-stru"},{"name":"render_markdown","description":"Use this when you need to convert lightweight Markdown into a sanitized, XSS-safe HTML fragment to preview or embed, matching the Clean.tools markdown preview. "},{"name":"lorem_ipsum","description":"Use this when you need placeholder/filler copy for mockups, tests, or layout. Given a `mode` (\"paragraphs\", \"sentences\", \"words\", or \"formatted\") and a `count`,"},{"name":"redact_text","description":"Use this when scrubbing test/dev text: replaces each occurrence of the given terms with block characters (████). Provide `text` plus `terms` (a comma-separated "},{"name":"format_sql","description":"Use this when a user pastes messy or minified SQL and wants it pretty-printed into a readable, canonical layout, or wants keyword casing normalized. Determinist"},{"name":"color_palette","description":"Use this when you need color-harmony palettes derived from one base hex color. Rotates hue/lightness in HSL to build complementary (+180 degrees), analogous (-3"},{"name":"color_contrast","description":"Use this when checking whether a text/background color pair meets WCAG 2.x accessibility contrast. Computes the relative-luminance contrast ratio (1-21, rounded"},{"name":"css_gradient","description":"Use this when you need a ready-to-paste CSS gradient value from 2-5 hex color stops. Builds a linear-gradient(...) (default; direction defaults to 'to bottom') "},{"name":"percentage","description":"Use this when you want exact, auditable percentage math with a written-out formula. Three modes: \"of\" computes percent% of value (fields percent, value); \"is-wh"},{"name":"tip","description":"Use this when you want penny-accurate tip and bill-split figures. Given a bill amount, a tip percentage, and an optional number of people (default 1; values bel"},{"name":"convert_timestamp","description":"Use this when you have a timestamp in one form (unix epoch seconds/milliseconds/microseconds, or an ISO-8601 date-time) and need it in the others, or rendered i"},{"name":"format_json","description":"Use this when you need to pretty-print, minify, or validate a JSON string and want the exact reformatted text plus warnings about silent data loss. Indent with "},{"name":"convert_yaml","description":"Use this when converting between YAML and JSON in either direction, or normalizing one format in place (set from equal to to). Deterministic: same input, same o"},{"name":"convert_color","description":"Use this when you need one color's exact values across every common format. Accepts a hex (#abc or #aabbcc), rgb(r, g, b) with r/g/b 0-255, or hsl(h, s%, l%) co"},{"name":"slugify","description":"Use this when you need a URL- or filename-safe slug from arbitrary text. Deterministic: same input, same output. Applies Unicode NFKD normalization, strips comb"},{"name":"convert_number_base","description":"Use this when you need to convert an integer between numeral bases 2-36 (binary, octal, decimal, hex, or any radix up to 36), including arbitrarily large values"},{"name":"query_json","description":"Use this when you need to pull specific values out of a JSON document by JSONPath and getting the path exactly right on deeply nested or large structures matter"},{"name":"generate_id","description":"Use this when you need a modern unique identifier (UUID v7, UUID v5, ULID, or nanoid) or want to read the timestamp embedded in an existing ULID or UUIDv7. uuid"}],"toolCount":42,"toolsHash":"67aa3f95dfc970f66de68d1e10003602b2c09174b9912c6b8321d290f48e9d78","serverName":"clean-tools","capabilities":["tools","resources","prompts"],"serverVersion":"0.1.0","protocolVersion":"2025-06-18"}},{"at":"2026-10-09T11:27:11.402Z","kind":"mcp_initialize","ok":true,"httpStatus":200,"latencyMs":13,"error":null,"detail":{"tools":[{"name":"explain_cron","description":"Use this when you need to understand or schedule a 5-field cron expression. Prefer this over reasoning about cron semantics yourself (a documented LLM failure m"},{"name":"validate_cron","description":"Use this when you need to check whether a 5-field cron expression is well-formed, instead of guessing. Prefer this over reasoning about cron syntax yourself (a "},{"name":"expand_rrule","description":"Use this when you need to build an iCalendar RRULE (RFC 5545) or list the actual dates a recurrence produces. Prefer this over computing recurring dates yoursel"},{"name":"convert_timezone","description":"Use this when you need to convert a wall-clock date-time between IANA time zones with correct DST handling. Prefer this over doing timezone math yourself (a doc"},{"name":"strftime_preview","description":"Use this when you need to know exactly what a C/POSIX strftime pattern (%Y %m %d %H %M %S %A %B %j %z etc.) produces. Prefer this over guessing the output yours"},{"name":"amortization_schedule","description":"Use this when you need a fixed-rate loan or mortgage's level monthly payment plus a year-by-year amortization schedule (principal paid, interest paid, remaining"},{"name":"tvm_solve","description":"Use this when you have four of the five time-value-of-money variables (N periods, I/Y annual rate percent, PV, PMT, FV) and need the fifth - annuity, loan, or i"},{"name":"compound_interest","description":"Use this when you need to project a principal's growth under compound interest, optionally with recurring monthly contributions, returning the final balance and"},{"name":"apr_calc","description":"Use this when you need an exact loan APR or APY rather than an approximation. Two modes. mode=\"loan\" (default): solve the true APR of an installment loan from a"},{"name":"interest_rate","description":"Use this when you need the exact interest rate that grows a principal to a target amount over a set number of years. type=\"compound\" (default) uses the closed-f"},{"name":"hash_text","description":"Use this when you need the exact SHA-1, SHA-256, and/or SHA-512 hex digest of a UTF-8 string — never recall or guess a hash, since digests cannot be produced fr"},{"name":"diff_text","description":"Use this when you need an exact line-level diff between two blocks of text instead of eyeballing the differences. Deterministic: same input, same output. Comput"},{"name":"test_regex","description":"Use this when you need the true matches of a JavaScript regular expression rather than predicting regex behavior yourself, which is easy to get wrong. Determini"},{"name":"convert_data","description":"Use this when you need to convert tabular data between JSON (array of objects), CSV, TSV, and XML instead of hand-transforming it. Deterministic: same input, sa"},{"name":"luhn_validate","description":"Use this when you need to check whether a number passes the Luhn (mod-10) checksum used by credit cards and many identifier numbers, instead of computing the do"},{"name":"convert_units","description":"Use this when you need to convert a value between units within one category (length, weight, temperature, volume, data, speed, area, time) instead of doing conv"},{"name":"uuid_v4","description":"Use this when you need RFC 4122 version-4 UUIDs — always generate them here rather than fabricating one, so the version and variant bits and the randomness are "},{"name":"random_number","description":"Use this when you need to draw cryptographically secure random integers or decimals in a range using unbiased rejection sampling — prefer it over inventing 'ran"},{"name":"generate_password","description":"Use this when you need strong passwords with Web Crypto randomness: mode=\"random\" builds character-set passwords (length plus uppercase/lowercase/numbers/symbol"},{"name":"decode_jwt","description":"Use this when you need to decode (NOT verify) a JSON Web Token: base64url-decode the header and payload, surface standard claims, and report expiry — prefer it "},{"name":"encode_decode","description":"Use this when you need to encode or decode text and want multi-byte and entity edge cases handled correctly rather than doing it by hand. Deterministic: same in"},{"name":"count_text","description":"Use this when you need exact word, character, sentence, and paragraph counts instead of estimating. Deterministic: same input, same output. Uses Unicode-aware s"},{"name":"generate_qr","description":"Use this when you need to turn text or a URL into a real, scannable QR code rather than describing one. Deterministic: same input, same output. Byte mode, error"},{"name":"convert_case","description":"Use this when you need to re-case text into a specific naming or letter case. Given `text` and a target `case` (upper, lower, title, sentence, camel, snake, keb"},{"name":"fancy_text","description":"Use this when you need to style ASCII letters and digits as Unicode glyphs (bold-serif, italic-serif, bold-italic-serif, bold-sans, script, fraktur, double-stru"},{"name":"render_markdown","description":"Use this when you need to convert lightweight Markdown into a sanitized, XSS-safe HTML fragment to preview or embed, matching the Clean.tools markdown preview. "},{"name":"lorem_ipsum","description":"Use this when you need placeholder/filler copy for mockups, tests, or layout. Given a `mode` (\"paragraphs\", \"sentences\", \"words\", or \"formatted\") and a `count`,"},{"name":"redact_text","description":"Use this when scrubbing test/dev text: replaces each occurrence of the given terms with block characters (████). Provide `text` plus `terms` (a comma-separated "},{"name":"format_sql","description":"Use this when a user pastes messy or minified SQL and wants it pretty-printed into a readable, canonical layout, or wants keyword casing normalized. Determinist"},{"name":"color_palette","description":"Use this when you need color-harmony palettes derived from one base hex color. Rotates hue/lightness in HSL to build complementary (+180 degrees), analogous (-3"},{"name":"color_contrast","description":"Use this when checking whether a text/background color pair meets WCAG 2.x accessibility contrast. Computes the relative-luminance contrast ratio (1-21, rounded"},{"name":"css_gradient","description":"Use this when you need a ready-to-paste CSS gradient value from 2-5 hex color stops. Builds a linear-gradient(...) (default; direction defaults to 'to bottom') "},{"name":"percentage","description":"Use this when you want exact, auditable percentage math with a written-out formula. Three modes: \"of\" computes percent% of value (fields percent, value); \"is-wh"},{"name":"tip","description":"Use this when you want penny-accurate tip and bill-split figures. Given a bill amount, a tip percentage, and an optional number of people (default 1; values bel"},{"name":"convert_timestamp","description":"Use this when you have a timestamp in one form (unix epoch seconds/milliseconds/microseconds, or an ISO-8601 date-time) and need it in the others, or rendered i"},{"name":"format_json","description":"Use this when you need to pretty-print, minify, or validate a JSON string and want the exact reformatted text plus warnings about silent data loss. Indent with "},{"name":"convert_yaml","description":"Use this when converting between YAML and JSON in either direction, or normalizing one format in place (set from equal to to). Deterministic: same input, same o"},{"name":"convert_color","description":"Use this when you need one color's exact values across every common format. Accepts a hex (#abc or #aabbcc), rgb(r, g, b) with r/g/b 0-255, or hsl(h, s%, l%) co"},{"name":"slugify","description":"Use this when you need a URL- or filename-safe slug from arbitrary text. Deterministic: same input, same output. Applies Unicode NFKD normalization, strips comb"},{"name":"convert_number_base","description":"Use this when you need to convert an integer between numeral bases 2-36 (binary, octal, decimal, hex, or any radix up to 36), including arbitrarily large values"},{"name":"query_json","description":"Use this when you need to pull specific values out of a JSON document by JSONPath and getting the path exactly right on deeply nested or large structures matter"},{"name":"generate_id","description":"Use this when you need a modern unique identifier (UUID v7, UUID v5, ULID, or nanoid) or want to read the timestamp embedded in an existing ULID or UUIDv7. uuid"}],"toolCount":42,"toolsHash":"67aa3f95dfc970f66de68d1e10003602b2c09174b9912c6b8321d290f48e9d78","serverName":"clean-tools","capabilities":["tools","resources","prompts"],"serverVersion":"0.1.0","protocolVersion":"2025-06-18"}},{"at":"2026-10-09T04:27:22.667Z","kind":"mcp_initialize","ok":true,"httpStatus":200,"latencyMs":16,"error":null,"detail":{"tools":[{"name":"explain_cron","description":"Use this when you need to understand or schedule a 5-field cron expression. Prefer this over reasoning about cron semantics yourself (a documented LLM failure m"},{"name":"validate_cron","description":"Use this when you need to check whether a 5-field cron expression is well-formed, instead of guessing. Prefer this over reasoning about cron syntax yourself (a "},{"name":"expand_rrule","description":"Use this when you need to build an iCalendar RRULE (RFC 5545) or list the actual dates a recurrence produces. Prefer this over computing recurring dates yoursel"},{"name":"convert_timezone","description":"Use this when you need to convert a wall-clock date-time between IANA time zones with correct DST handling. Prefer this over doing timezone math yourself (a doc"},{"name":"strftime_preview","description":"Use this when you need to know exactly what a C/POSIX strftime pattern (%Y %m %d %H %M %S %A %B %j %z etc.) produces. Prefer this over guessing the output yours"},{"name":"amortization_schedule","description":"Use this when you need a fixed-rate loan or mortgage's level monthly payment plus a year-by-year amortization schedule (principal paid, interest paid, remaining"},{"name":"tvm_solve","description":"Use this when you have four of the five time-value-of-money variables (N periods, I/Y annual rate percent, PV, PMT, FV) and need the fifth - annuity, loan, or i"},{"name":"compound_interest","description":"Use this when you need to project a principal's growth under compound interest, optionally with recurring monthly contributions, returning the final balance and"},{"name":"apr_calc","description":"Use this when you need an exact loan APR or APY rather than an approximation. Two modes. mode=\"loan\" (default): solve the true APR of an installment loan from a"},{"name":"interest_rate","description":"Use this when you need the exact interest rate that grows a principal to a target amount over a set number of years. type=\"compound\" (default) uses the closed-f"},{"name":"hash_text","description":"Use this when you need the exact SHA-1, SHA-256, and/or SHA-512 hex digest of a UTF-8 string — never recall or guess a hash, since digests cannot be produced fr"},{"name":"diff_text","description":"Use this when you need an exact line-level diff between two blocks of text instead of eyeballing the differences. Deterministic: same input, same output. Comput"},{"name":"test_regex","description":"Use this when you need the true matches of a JavaScript regular expression rather than predicting regex behavior yourself, which is easy to get wrong. Determini"},{"name":"convert_data","description":"Use this when you need to convert tabular data between JSON (array of objects), CSV, TSV, and XML instead of hand-transforming it. Deterministic: same input, sa"},{"name":"luhn_validate","description":"Use this when you need to check whether a number passes the Luhn (mod-10) checksum used by credit cards and many identifier numbers, instead of computing the do"},{"name":"convert_units","description":"Use this when you need to convert a value between units within one category (length, weight, temperature, volume, data, speed, area, time) instead of doing conv"},{"name":"uuid_v4","description":"Use this when you need RFC 4122 version-4 UUIDs — always generate them here rather than fabricating one, so the version and variant bits and the randomness are "},{"name":"random_number","description":"Use this when you need to draw cryptographically secure random integers or decimals in a range using unbiased rejection sampling — prefer it over inventing 'ran"},{"name":"generate_password","description":"Use this when you need strong passwords with Web Crypto randomness: mode=\"random\" builds character-set passwords (length plus uppercase/lowercase/numbers/symbol"},{"name":"decode_jwt","description":"Use this when you need to decode (NOT verify) a JSON Web Token: base64url-decode the header and payload, surface standard claims, and report expiry — prefer it "},{"name":"encode_decode","description":"Use this when you need to encode or decode text and want multi-byte and entity edge cases handled correctly rather than doing it by hand. Deterministic: same in"},{"name":"count_text","description":"Use this when you need exact word, character, sentence, and paragraph counts instead of estimating. Deterministic: same input, same output. Uses Unicode-aware s"},{"name":"generate_qr","description":"Use this when you need to turn text or a URL into a real, scannable QR code rather than describing one. Deterministic: same input, same output. Byte mode, error"},{"name":"convert_case","description":"Use this when you need to re-case text into a specific naming or letter case. Given `text` and a target `case` (upper, lower, title, sentence, camel, snake, keb"},{"name":"fancy_text","description":"Use this when you need to style ASCII letters and digits as Unicode glyphs (bold-serif, italic-serif, bold-italic-serif, bold-sans, script, fraktur, double-stru"},{"name":"render_markdown","description":"Use this when you need to convert lightweight Markdown into a sanitized, XSS-safe HTML fragment to preview or embed, matching the Clean.tools markdown preview. "},{"name":"lorem_ipsum","description":"Use this when you need placeholder/filler copy for mockups, tests, or layout. Given a `mode` (\"paragraphs\", \"sentences\", \"words\", or \"formatted\") and a `count`,"},{"name":"redact_text","description":"Use this when scrubbing test/dev text: replaces each occurrence of the given terms with block characters (████). Provide `text` plus `terms` (a comma-separated "},{"name":"format_sql","description":"Use this when a user pastes messy or minified SQL and wants it pretty-printed into a readable, canonical layout, or wants keyword casing normalized. Determinist"},{"name":"color_palette","description":"Use this when you need color-harmony palettes derived from one base hex color. Rotates hue/lightness in HSL to build complementary (+180 degrees), analogous (-3"},{"name":"color_contrast","description":"Use this when checking whether a text/background color pair meets WCAG 2.x accessibility contrast. Computes the relative-luminance contrast ratio (1-21, rounded"},{"name":"css_gradient","description":"Use this when you need a ready-to-paste CSS gradient value from 2-5 hex color stops. Builds a linear-gradient(...) (default; direction defaults to 'to bottom') "},{"name":"percentage","description":"Use this when you want exact, auditable percentage math with a written-out formula. Three modes: \"of\" computes percent% of value (fields percent, value); \"is-wh"},{"name":"tip","description":"Use this when you want penny-accurate tip and bill-split figures. Given a bill amount, a tip percentage, and an optional number of people (default 1; values bel"},{"name":"convert_timestamp","description":"Use this when you have a timestamp in one form (unix epoch seconds/milliseconds/microseconds, or an ISO-8601 date-time) and need it in the others, or rendered i"},{"name":"format_json","description":"Use this when you need to pretty-print, minify, or validate a JSON string and want the exact reformatted text plus warnings about silent data loss. Indent with "},{"name":"convert_yaml","description":"Use this when converting between YAML and JSON in either direction, or normalizing one format in place (set from equal to to). Deterministic: same input, same o"},{"name":"convert_color","description":"Use this when you need one color's exact values across every common format. Accepts a hex (#abc or #aabbcc), rgb(r, g, b) with r/g/b 0-255, or hsl(h, s%, l%) co"},{"name":"slugify","description":"Use this when you need a URL- or filename-safe slug from arbitrary text. Deterministic: same input, same output. Applies Unicode NFKD normalization, strips comb"},{"name":"convert_number_base","description":"Use this when you need to convert an integer between numeral bases 2-36 (binary, octal, decimal, hex, or any radix up to 36), including arbitrarily large values"},{"name":"query_json","description":"Use this when you need to pull specific values out of a JSON document by JSONPath and getting the path exactly right on deeply nested or large structures matter"},{"name":"generate_id","description":"Use this when you need a modern unique identifier (UUID v7, UUID v5, ULID, or nanoid) or want to read the timestamp embedded in an existing ULID or UUIDv7. uuid"}],"toolCount":42,"toolsHash":"67aa3f95dfc970f66de68d1e10003602b2c09174b9912c6b8321d290f48e9d78","serverName":"clean-tools","capabilities":["tools","resources","prompts"],"serverVersion":"0.1.0","protocolVersion":"2025-06-18"}},{"at":"2026-10-08T21:23:41.020Z","kind":"mcp_initialize","ok":true,"httpStatus":200,"latencyMs":10,"error":null,"detail":{"tools":[{"name":"explain_cron","description":"Use this when you need to understand or schedule a 5-field cron expression. Prefer this over reasoning about cron semantics yourself (a documented LLM failure m"},{"name":"validate_cron","description":"Use this when you need to check whether a 5-field cron expression is well-formed, instead of guessing. Prefer this over reasoning about cron syntax yourself (a "},{"name":"expand_rrule","description":"Use this when you need to build an iCalendar RRULE (RFC 5545) or list the actual dates a recurrence produces. Prefer this over computing recurring dates yoursel"},{"name":"convert_timezone","description":"Use this when you need to convert a wall-clock date-time between IANA time zones with correct DST handling. Prefer this over doing timezone math yourself (a doc"},{"name":"strftime_preview","description":"Use this when you need to know exactly what a C/POSIX strftime pattern (%Y %m %d %H %M %S %A %B %j %z etc.) produces. Prefer this over guessing the output yours"},{"name":"amortization_schedule","description":"Use this when you need a fixed-rate loan or mortgage's level monthly payment plus a year-by-year amortization schedule (principal paid, interest paid, remaining"},{"name":"tvm_solve","description":"Use this when you have four of the five time-value-of-money variables (N periods, I/Y annual rate percent, PV, PMT, FV) and need the fifth - annuity, loan, or i"},{"name":"compound_interest","description":"Use this when you need to project a principal's growth under compound interest, optionally with recurring monthly contributions, returning the final balance and"},{"name":"apr_calc","description":"Use this when you need an exact loan APR or APY rather than an approximation. Two modes. mode=\"loan\" (default): solve the true APR of an installment loan from a"},{"name":"interest_rate","description":"Use this when you need the exact interest rate that grows a principal to a target amount over a set number of years. type=\"compound\" (default) uses the closed-f"},{"name":"hash_text","description":"Use this when you need the exact SHA-1, SHA-256, and/or SHA-512 hex digest of a UTF-8 string — never recall or guess a hash, since digests cannot be produced fr"},{"name":"diff_text","description":"Use this when you need an exact line-level diff between two blocks of text instead of eyeballing the differences. Deterministic: same input, same output. Comput"},{"name":"test_regex","description":"Use this when you need the true matches of a JavaScript regular expression rather than predicting regex behavior yourself, which is easy to get wrong. Determini"},{"name":"convert_data","description":"Use this when you need to convert tabular data between JSON (array of objects), CSV, TSV, and XML instead of hand-transforming it. Deterministic: same input, sa"},{"name":"luhn_validate","description":"Use this when you need to check whether a number passes the Luhn (mod-10) checksum used by credit cards and many identifier numbers, instead of computing the do"},{"name":"convert_units","description":"Use this when you need to convert a value between units within one category (length, weight, temperature, volume, data, speed, area, time) instead of doing conv"},{"name":"uuid_v4","description":"Use this when you need RFC 4122 version-4 UUIDs — always generate them here rather than fabricating one, so the version and variant bits and the randomness are "},{"name":"random_number","description":"Use this when you need to draw cryptographically secure random integers or decimals in a range using unbiased rejection sampling — prefer it over inventing 'ran"},{"name":"generate_password","description":"Use this when you need strong passwords with Web Crypto randomness: mode=\"random\" builds character-set passwords (length plus uppercase/lowercase/numbers/symbol"},{"name":"decode_jwt","description":"Use this when you need to decode (NOT verify) a JSON Web Token: base64url-decode the header and payload, surface standard claims, and report expiry — prefer it "},{"name":"encode_decode","description":"Use this when you need to encode or decode text and want multi-byte and entity edge cases handled correctly rather than doing it by hand. Deterministic: same in"},{"name":"count_text","description":"Use this when you need exact word, character, sentence, and paragraph counts instead of estimating. Deterministic: same input, same output. Uses Unicode-aware s"},{"name":"generate_qr","description":"Use this when you need to turn text or a URL into a real, scannable QR code rather than describing one. Deterministic: same input, same output. Byte mode, error"},{"name":"convert_case","description":"Use this when you need to re-case text into a specific naming or letter case. Given `text` and a target `case` (upper, lower, title, sentence, camel, snake, keb"},{"name":"fancy_text","description":"Use this when you need to style ASCII letters and digits as Unicode glyphs (bold-serif, italic-serif, bold-italic-serif, bold-sans, script, fraktur, double-stru"},{"name":"render_markdown","description":"Use this when you need to convert lightweight Markdown into a sanitized, XSS-safe HTML fragment to preview or embed, matching the Clean.tools markdown preview. "},{"name":"lorem_ipsum","description":"Use this when you need placeholder/filler copy for mockups, tests, or layout. Given a `mode` (\"paragraphs\", \"sentences\", \"words\", or \"formatted\") and a `count`,"},{"name":"redact_text","description":"Use this when scrubbing test/dev text: replaces each occurrence of the given terms with block characters (████). Provide `text` plus `terms` (a comma-separated "},{"name":"format_sql","description":"Use this when a user pastes messy or minified SQL and wants it pretty-printed into a readable, canonical layout, or wants keyword casing normalized. Determinist"},{"name":"color_palette","description":"Use this when you need color-harmony palettes derived from one base hex color. Rotates hue/lightness in HSL to build complementary (+180 degrees), analogous (-3"},{"name":"color_contrast","description":"Use this when checking whether a text/background color pair meets WCAG 2.x accessibility contrast. Computes the relative-luminance contrast ratio (1-21, rounded"},{"name":"css_gradient","description":"Use this when you need a ready-to-paste CSS gradient value from 2-5 hex color stops. Builds a linear-gradient(...) (default; direction defaults to 'to bottom') "},{"name":"percentage","description":"Use this when you want exact, auditable percentage math with a written-out formula. Three modes: \"of\" computes percent% of value (fields percent, value); \"is-wh"},{"name":"tip","description":"Use this when you want penny-accurate tip and bill-split figures. Given a bill amount, a tip percentage, and an optional number of people (default 1; values bel"},{"name":"convert_timestamp","description":"Use this when you have a timestamp in one form (unix epoch seconds/milliseconds/microseconds, or an ISO-8601 date-time) and need it in the others, or rendered i"},{"name":"format_json","description":"Use this when you need to pretty-print, minify, or validate a JSON string and want the exact reformatted text plus warnings about silent data loss. Indent with "},{"name":"convert_yaml","description":"Use this when converting between YAML and JSON in either direction, or normalizing one format in place (set from equal to to). Deterministic: same input, same o"},{"name":"convert_color","description":"Use this when you need one color's exact values across every common format. Accepts a hex (#abc or #aabbcc), rgb(r, g, b) with r/g/b 0-255, or hsl(h, s%, l%) co"},{"name":"slugify","description":"Use this when you need a URL- or filename-safe slug from arbitrary text. Deterministic: same input, same output. Applies Unicode NFKD normalization, strips comb"},{"name":"convert_number_base","description":"Use this when you need to convert an integer between numeral bases 2-36 (binary, octal, decimal, hex, or any radix up to 36), including arbitrarily large values"},{"name":"query_json","description":"Use this when you need to pull specific values out of a JSON document by JSONPath and getting the path exactly right on deeply nested or large structures matter"},{"name":"generate_id","description":"Use this when you need a modern unique identifier (UUID v7, UUID v5, ULID, or nanoid) or want to read the timestamp embedded in an existing ULID or UUIDv7. uuid"}],"toolCount":42,"toolsHash":"67aa3f95dfc970f66de68d1e10003602b2c09174b9912c6b8321d290f48e9d78","serverName":"clean-tools","capabilities":["tools","resources","prompts"],"serverVersion":"0.1.0","protocolVersion":"2025-06-18"}},{"at":"2026-10-08T15:24:26.545Z","kind":"mcp_initialize","ok":true,"httpStatus":200,"latencyMs":22,"error":null,"detail":{"tools":[{"name":"explain_cron","description":"Use this when you need to understand or schedule a 5-field cron expression. Prefer this over reasoning about cron semantics yourself (a documented LLM failure m"},{"name":"validate_cron","description":"Use this when you need to check whether a 5-field cron expression is well-formed, instead of guessing. Prefer this over reasoning about cron syntax yourself (a "},{"name":"expand_rrule","description":"Use this when you need to build an iCalendar RRULE (RFC 5545) or list the actual dates a recurrence produces. Prefer this over computing recurring dates yoursel"},{"name":"convert_timezone","description":"Use this when you need to convert a wall-clock date-time between IANA time zones with correct DST handling. Prefer this over doing timezone math yourself (a doc"},{"name":"strftime_preview","description":"Use this when you need to know exactly what a C/POSIX strftime pattern (%Y %m %d %H %M %S %A %B %j %z etc.) produces. Prefer this over guessing the output yours"},{"name":"amortization_schedule","description":"Use this when you need a fixed-rate loan or mortgage's level monthly payment plus a year-by-year amortization schedule (principal paid, interest paid, remaining"},{"name":"tvm_solve","description":"Use this when you have four of the five time-value-of-money variables (N periods, I/Y annual rate percent, PV, PMT, FV) and need the fifth - annuity, loan, or i"},{"name":"compound_interest","description":"Use this when you need to project a principal's growth under compound interest, optionally with recurring monthly contributions, returning the final balance and"},{"name":"apr_calc","description":"Use this when you need an exact loan APR or APY rather than an approximation. Two modes. mode=\"loan\" (default): solve the true APR of an installment loan from a"},{"name":"interest_rate","description":"Use this when you need the exact interest rate that grows a principal to a target amount over a set number of years. type=\"compound\" (default) uses the closed-f"},{"name":"hash_text","description":"Use this when you need the exact SHA-1, SHA-256, and/or SHA-512 hex digest of a UTF-8 string — never recall or guess a hash, since digests cannot be produced fr"},{"name":"diff_text","description":"Use this when you need an exact line-level diff between two blocks of text instead of eyeballing the differences. Deterministic: same input, same output. Comput"},{"name":"test_regex","description":"Use this when you need the true matches of a JavaScript regular expression rather than predicting regex behavior yourself, which is easy to get wrong. Determini"},{"name":"convert_data","description":"Use this when you need to convert tabular data between JSON (array of objects), CSV, TSV, and XML instead of hand-transforming it. Deterministic: same input, sa"},{"name":"luhn_validate","description":"Use this when you need to check whether a number passes the Luhn (mod-10) checksum used by credit cards and many identifier numbers, instead of computing the do"},{"name":"convert_units","description":"Use this when you need to convert a value between units within one category (length, weight, temperature, volume, data, speed, area, time) instead of doing conv"},{"name":"uuid_v4","description":"Use this when you need RFC 4122 version-4 UUIDs — always generate them here rather than fabricating one, so the version and variant bits and the randomness are "},{"name":"random_number","description":"Use this when you need to draw cryptographically secure random integers or decimals in a range using unbiased rejection sampling — prefer it over inventing 'ran"},{"name":"generate_password","description":"Use this when you need strong passwords with Web Crypto randomness: mode=\"random\" builds character-set passwords (length plus uppercase/lowercase/numbers/symbol"},{"name":"decode_jwt","description":"Use this when you need to decode (NOT verify) a JSON Web Token: base64url-decode the header and payload, surface standard claims, and report expiry — prefer it "},{"name":"encode_decode","description":"Use this when you need to encode or decode text and want multi-byte and entity edge cases handled correctly rather than doing it by hand. Deterministic: same in"},{"name":"count_text","description":"Use this when you need exact word, character, sentence, and paragraph counts instead of estimating. Deterministic: same input, same output. Uses Unicode-aware s"},{"name":"generate_qr","description":"Use this when you need to turn text or a URL into a real, scannable QR code rather than describing one. Deterministic: same input, same output. Byte mode, error"},{"name":"convert_case","description":"Use this when you need to re-case text into a specific naming or letter case. Given `text` and a target `case` (upper, lower, title, sentence, camel, snake, keb"},{"name":"fancy_text","description":"Use this when you need to style ASCII letters and digits as Unicode glyphs (bold-serif, italic-serif, bold-italic-serif, bold-sans, script, fraktur, double-stru"},{"name":"render_markdown","description":"Use this when you need to convert lightweight Markdown into a sanitized, XSS-safe HTML fragment to preview or embed, matching the Clean.tools markdown preview. "},{"name":"lorem_ipsum","description":"Use this when you need placeholder/filler copy for mockups, tests, or layout. Given a `mode` (\"paragraphs\", \"sentences\", \"words\", or \"formatted\") and a `count`,"},{"name":"redact_text","description":"Use this when scrubbing test/dev text: replaces each occurrence of the given terms with block characters (████). Provide `text` plus `terms` (a comma-separated "},{"name":"format_sql","description":"Use this when a user pastes messy or minified SQL and wants it pretty-printed into a readable, canonical layout, or wants keyword casing normalized. Determinist"},{"name":"color_palette","description":"Use this when you need color-harmony palettes derived from one base hex color. Rotates hue/lightness in HSL to build complementary (+180 degrees), analogous (-3"},{"name":"color_contrast","description":"Use this when checking whether a text/background color pair meets WCAG 2.x accessibility contrast. Computes the relative-luminance contrast ratio (1-21, rounded"},{"name":"css_gradient","description":"Use this when you need a ready-to-paste CSS gradient value from 2-5 hex color stops. Builds a linear-gradient(...) (default; direction defaults to 'to bottom') "},{"name":"percentage","description":"Use this when you want exact, auditable percentage math with a written-out formula. Three modes: \"of\" computes percent% of value (fields percent, value); \"is-wh"},{"name":"tip","description":"Use this when you want penny-accurate tip and bill-split figures. Given a bill amount, a tip percentage, and an optional number of people (default 1; values bel"},{"name":"convert_timestamp","description":"Use this when you have a timestamp in one form (unix epoch seconds/milliseconds/microseconds, or an ISO-8601 date-time) and need it in the others, or rendered i"},{"name":"format_json","description":"Use this when you need to pretty-print, minify, or validate a JSON string and want the exact reformatted text plus warnings about silent data loss. Indent with "},{"name":"convert_yaml","description":"Use this when converting between YAML and JSON in either direction, or normalizing one format in place (set from equal to to). Deterministic: same input, same o"},{"name":"convert_color","description":"Use this when you need one color's exact values across every common format. Accepts a hex (#abc or #aabbcc), rgb(r, g, b) with r/g/b 0-255, or hsl(h, s%, l%) co"},{"name":"slugify","description":"Use this when you need a URL- or filename-safe slug from arbitrary text. Deterministic: same input, same output. Applies Unicode NFKD normalization, strips comb"},{"name":"convert_number_base","description":"Use this when you need to convert an integer between numeral bases 2-36 (binary, octal, decimal, hex, or any radix up to 36), including arbitrarily large values"},{"name":"query_json","description":"Use this when you need to pull specific values out of a JSON document by JSONPath and getting the path exactly right on deeply nested or large structures matter"},{"name":"generate_id","description":"Use this when you need a modern unique identifier (UUID v7, UUID v5, ULID, or nanoid) or want to read the timestamp embedded in an existing ULID or UUIDv7. uuid"}],"toolCount":42,"toolsHash":"67aa3f95dfc970f66de68d1e10003602b2c09174b9912c6b8321d290f48e9d78","serverName":"clean-tools","capabilities":["tools","resources","prompts"],"serverVersion":"0.1.0","protocolVersion":"2025-06-18"}},{"at":"2026-10-08T08:28:03.662Z","kind":"mcp_initialize","ok":true,"httpStatus":200,"latencyMs":19,"error":null,"detail":{"tools":[{"name":"explain_cron","description":"Use this when you need to understand or schedule a 5-field cron expression. Prefer this over reasoning about cron semantics yourself (a documented LLM failure m"},{"name":"validate_cron","description":"Use this when you need to check whether a 5-field cron expression is well-formed, instead of guessing. Prefer this over reasoning about cron syntax yourself (a "},{"name":"expand_rrule","description":"Use this when you need to build an iCalendar RRULE (RFC 5545) or list the actual dates a recurrence produces. Prefer this over computing recurring dates yoursel"},{"name":"convert_timezone","description":"Use this when you need to convert a wall-clock date-time between IANA time zones with correct DST handling. Prefer this over doing timezone math yourself (a doc"},{"name":"strftime_preview","description":"Use this when you need to know exactly what a C/POSIX strftime pattern (%Y %m %d %H %M %S %A %B %j %z etc.) produces. Prefer this over guessing the output yours"},{"name":"amortization_schedule","description":"Use this when you need a fixed-rate loan or mortgage's level monthly payment plus a year-by-year amortization schedule (principal paid, interest paid, remaining"},{"name":"tvm_solve","description":"Use this when you have four of the five time-value-of-money variables (N periods, I/Y annual rate percent, PV, PMT, FV) and need the fifth - annuity, loan, or i"},{"name":"compound_interest","description":"Use this when you need to project a principal's growth under compound interest, optionally with recurring monthly contributions, returning the final balance and"},{"name":"apr_calc","description":"Use this when you need an exact loan APR or APY rather than an approximation. Two modes. mode=\"loan\" (default): solve the true APR of an installment loan from a"},{"name":"interest_rate","description":"Use this when you need the exact interest rate that grows a principal to a target amount over a set number of years. type=\"compound\" (default) uses the closed-f"},{"name":"hash_text","description":"Use this when you need the exact SHA-1, SHA-256, and/or SHA-512 hex digest of a UTF-8 string — never recall or guess a hash, since digests cannot be produced fr"},{"name":"diff_text","description":"Use this when you need an exact line-level diff between two blocks of text instead of eyeballing the differences. Deterministic: same input, same output. Comput"},{"name":"test_regex","description":"Use this when you need the true matches of a JavaScript regular expression rather than predicting regex behavior yourself, which is easy to get wrong. Determini"},{"name":"convert_data","description":"Use this when you need to convert tabular data between JSON (array of objects), CSV, TSV, and XML instead of hand-transforming it. Deterministic: same input, sa"},{"name":"luhn_validate","description":"Use this when you need to check whether a number passes the Luhn (mod-10) checksum used by credit cards and many identifier numbers, instead of computing the do"},{"name":"convert_units","description":"Use this when you need to convert a value between units within one category (length, weight, temperature, volume, data, speed, area, time) instead of doing conv"},{"name":"uuid_v4","description":"Use this when you need RFC 4122 version-4 UUIDs — always generate them here rather than fabricating one, so the version and variant bits and the randomness are "},{"name":"random_number","description":"Use this when you need to draw cryptographically secure random integers or decimals in a range using unbiased rejection sampling — prefer it over inventing 'ran"},{"name":"generate_password","description":"Use this when you need strong passwords with Web Crypto randomness: mode=\"random\" builds character-set passwords (length plus uppercase/lowercase/numbers/symbol"},{"name":"decode_jwt","description":"Use this when you need to decode (NOT verify) a JSON Web Token: base64url-decode the header and payload, surface standard claims, and report expiry — prefer it "},{"name":"encode_decode","description":"Use this when you need to encode or decode text and want multi-byte and entity edge cases handled correctly rather than doing it by hand. Deterministic: same in"},{"name":"count_text","description":"Use this when you need exact word, character, sentence, and paragraph counts instead of estimating. Deterministic: same input, same output. Uses Unicode-aware s"},{"name":"generate_qr","description":"Use this when you need to turn text or a URL into a real, scannable QR code rather than describing one. Deterministic: same input, same output. Byte mode, error"},{"name":"convert_case","description":"Use this when you need to re-case text into a specific naming or letter case. Given `text` and a target `case` (upper, lower, title, sentence, camel, snake, keb"},{"name":"fancy_text","description":"Use this when you need to style ASCII letters and digits as Unicode glyphs (bold-serif, italic-serif, bold-italic-serif, bold-sans, script, fraktur, double-stru"},{"name":"render_markdown","description":"Use this when you need to convert lightweight Markdown into a sanitized, XSS-safe HTML fragment to preview or embed, matching the Clean.tools markdown preview. "},{"name":"lorem_ipsum","description":"Use this when you need placeholder/filler copy for mockups, tests, or layout. Given a `mode` (\"paragraphs\", \"sentences\", \"words\", or \"formatted\") and a `count`,"},{"name":"redact_text","description":"Use this when scrubbing test/dev text: replaces each occurrence of the given terms with block characters (████). Provide `text` plus `terms` (a comma-separated "},{"name":"format_sql","description":"Use this when a user pastes messy or minified SQL and wants it pretty-printed into a readable, canonical layout, or wants keyword casing normalized. Determinist"},{"name":"color_palette","description":"Use this when you need color-harmony palettes derived from one base hex color. Rotates hue/lightness in HSL to build complementary (+180 degrees), analogous (-3"},{"name":"color_contrast","description":"Use this when checking whether a text/background color pair meets WCAG 2.x accessibility contrast. Computes the relative-luminance contrast ratio (1-21, rounded"},{"name":"css_gradient","description":"Use this when you need a ready-to-paste CSS gradient value from 2-5 hex color stops. Builds a linear-gradient(...) (default; direction defaults to 'to bottom') "},{"name":"percentage","description":"Use this when you want exact, auditable percentage math with a written-out formula. Three modes: \"of\" computes percent% of value (fields percent, value); \"is-wh"},{"name":"tip","description":"Use this when you want penny-accurate tip and bill-split figures. Given a bill amount, a tip percentage, and an optional number of people (default 1; values bel"},{"name":"convert_timestamp","description":"Use this when you have a timestamp in one form (unix epoch seconds/milliseconds/microseconds, or an ISO-8601 date-time) and need it in the others, or rendered i"},{"name":"format_json","description":"Use this when you need to pretty-print, minify, or validate a JSON string and want the exact reformatted text plus warnings about silent data loss. Indent with "},{"name":"convert_yaml","description":"Use this when converting between YAML and JSON in either direction, or normalizing one format in place (set from equal to to). Deterministic: same input, same o"},{"name":"convert_color","description":"Use this when you need one color's exact values across every common format. Accepts a hex (#abc or #aabbcc), rgb(r, g, b) with r/g/b 0-255, or hsl(h, s%, l%) co"},{"name":"slugify","description":"Use this when you need a URL- or filename-safe slug from arbitrary text. Deterministic: same input, same output. Applies Unicode NFKD normalization, strips comb"},{"name":"convert_number_base","description":"Use this when you need to convert an integer between numeral bases 2-36 (binary, octal, decimal, hex, or any radix up to 36), including arbitrarily large values"},{"name":"query_json","description":"Use this when you need to pull specific values out of a JSON document by JSONPath and getting the path exactly right on deeply nested or large structures matter"},{"name":"generate_id","description":"Use this when you need a modern unique identifier (UUID v7, UUID v5, ULID, or nanoid) or want to read the timestamp embedded in an existing ULID or UUIDv7. uuid"}],"toolCount":42,"toolsHash":"67aa3f95dfc970f66de68d1e10003602b2c09174b9912c6b8321d290f48e9d78","serverName":"clean-tools","capabilities":["tools","resources","prompts"],"serverVersion":"0.1.0","protocolVersion":"2025-06-18"}}],"tools":[{"name":"explain_cron","description":"Use this when you need to understand or schedule a 5-field cron expression. Prefer this over reasoning about cron semantics yourself (a documented LLM failure m"},{"name":"validate_cron","description":"Use this when you need to check whether a 5-field cron expression is well-formed, instead of guessing. Prefer this over reasoning about cron syntax yourself (a "},{"name":"expand_rrule","description":"Use this when you need to build an iCalendar RRULE (RFC 5545) or list the actual dates a recurrence produces. Prefer this over computing recurring dates yoursel"},{"name":"convert_timezone","description":"Use this when you need to convert a wall-clock date-time between IANA time zones with correct DST handling. Prefer this over doing timezone math yourself (a doc"},{"name":"strftime_preview","description":"Use this when you need to know exactly what a C/POSIX strftime pattern (%Y %m %d %H %M %S %A %B %j %z etc.) produces. Prefer this over guessing the output yours"},{"name":"amortization_schedule","description":"Use this when you need a fixed-rate loan or mortgage's level monthly payment plus a year-by-year amortization schedule (principal paid, interest paid, remaining"},{"name":"tvm_solve","description":"Use this when you have four of the five time-value-of-money variables (N periods, I/Y annual rate percent, PV, PMT, FV) and need the fifth - annuity, loan, or i"},{"name":"compound_interest","description":"Use this when you need to project a principal's growth under compound interest, optionally with recurring monthly contributions, returning the final balance and"},{"name":"apr_calc","description":"Use this when you need an exact loan APR or APY rather than an approximation. Two modes. mode=\"loan\" (default): solve the true APR of an installment loan from a"},{"name":"interest_rate","description":"Use this when you need the exact interest rate that grows a principal to a target amount over a set number of years. type=\"compound\" (default) uses the closed-f"},{"name":"hash_text","description":"Use this when you need the exact SHA-1, SHA-256, and/or SHA-512 hex digest of a UTF-8 string — never recall or guess a hash, since digests cannot be produced fr"},{"name":"diff_text","description":"Use this when you need an exact line-level diff between two blocks of text instead of eyeballing the differences. Deterministic: same input, same output. Comput"},{"name":"test_regex","description":"Use this when you need the true matches of a JavaScript regular expression rather than predicting regex behavior yourself, which is easy to get wrong. Determini"},{"name":"convert_data","description":"Use this when you need to convert tabular data between JSON (array of objects), CSV, TSV, and XML instead of hand-transforming it. Deterministic: same input, sa"},{"name":"luhn_validate","description":"Use this when you need to check whether a number passes the Luhn (mod-10) checksum used by credit cards and many identifier numbers, instead of computing the do"},{"name":"convert_units","description":"Use this when you need to convert a value between units within one category (length, weight, temperature, volume, data, speed, area, time) instead of doing conv"},{"name":"uuid_v4","description":"Use this when you need RFC 4122 version-4 UUIDs — always generate them here rather than fabricating one, so the version and variant bits and the randomness are "},{"name":"random_number","description":"Use this when you need to draw cryptographically secure random integers or decimals in a range using unbiased rejection sampling — prefer it over inventing 'ran"},{"name":"generate_password","description":"Use this when you need strong passwords with Web Crypto randomness: mode=\"random\" builds character-set passwords (length plus uppercase/lowercase/numbers/symbol"},{"name":"decode_jwt","description":"Use this when you need to decode (NOT verify) a JSON Web Token: base64url-decode the header and payload, surface standard claims, and report expiry — prefer it "},{"name":"encode_decode","description":"Use this when you need to encode or decode text and want multi-byte and entity edge cases handled correctly rather than doing it by hand. Deterministic: same in"},{"name":"count_text","description":"Use this when you need exact word, character, sentence, and paragraph counts instead of estimating. Deterministic: same input, same output. Uses Unicode-aware s"},{"name":"generate_qr","description":"Use this when you need to turn text or a URL into a real, scannable QR code rather than describing one. Deterministic: same input, same output. Byte mode, error"},{"name":"convert_case","description":"Use this when you need to re-case text into a specific naming or letter case. Given `text` and a target `case` (upper, lower, title, sentence, camel, snake, keb"},{"name":"fancy_text","description":"Use this when you need to style ASCII letters and digits as Unicode glyphs (bold-serif, italic-serif, bold-italic-serif, bold-sans, script, fraktur, double-stru"},{"name":"render_markdown","description":"Use this when you need to convert lightweight Markdown into a sanitized, XSS-safe HTML fragment to preview or embed, matching the Clean.tools markdown preview. "},{"name":"lorem_ipsum","description":"Use this when you need placeholder/filler copy for mockups, tests, or layout. Given a `mode` (\"paragraphs\", \"sentences\", \"words\", or \"formatted\") and a `count`,"},{"name":"redact_text","description":"Use this when scrubbing test/dev text: replaces each occurrence of the given terms with block characters (████). Provide `text` plus `terms` (a comma-separated "},{"name":"format_sql","description":"Use this when a user pastes messy or minified SQL and wants it pretty-printed into a readable, canonical layout, or wants keyword casing normalized. Determinist"},{"name":"color_palette","description":"Use this when you need color-harmony palettes derived from one base hex color. Rotates hue/lightness in HSL to build complementary (+180 degrees), analogous (-3"},{"name":"color_contrast","description":"Use this when checking whether a text/background color pair meets WCAG 2.x accessibility contrast. Computes the relative-luminance contrast ratio (1-21, rounded"},{"name":"css_gradient","description":"Use this when you need a ready-to-paste CSS gradient value from 2-5 hex color stops. Builds a linear-gradient(...) (default; direction defaults to 'to bottom') "},{"name":"percentage","description":"Use this when you want exact, auditable percentage math with a written-out formula. Three modes: \"of\" computes percent% of value (fields percent, value); \"is-wh"},{"name":"tip","description":"Use this when you want penny-accurate tip and bill-split figures. Given a bill amount, a tip percentage, and an optional number of people (default 1; values bel"},{"name":"convert_timestamp","description":"Use this when you have a timestamp in one form (unix epoch seconds/milliseconds/microseconds, or an ISO-8601 date-time) and need it in the others, or rendered i"},{"name":"format_json","description":"Use this when you need to pretty-print, minify, or validate a JSON string and want the exact reformatted text plus warnings about silent data loss. Indent with "},{"name":"convert_yaml","description":"Use this when converting between YAML and JSON in either direction, or normalizing one format in place (set from equal to to). Deterministic: same input, same o"},{"name":"convert_color","description":"Use this when you need one color's exact values across every common format. Accepts a hex (#abc or #aabbcc), rgb(r, g, b) with r/g/b 0-255, or hsl(h, s%, l%) co"},{"name":"slugify","description":"Use this when you need a URL- or filename-safe slug from arbitrary text. Deterministic: same input, same output. Applies Unicode NFKD normalization, strips comb"},{"name":"convert_number_base","description":"Use this when you need to convert an integer between numeral bases 2-36 (binary, octal, decimal, hex, or any radix up to 36), including arbitrarily large values"},{"name":"query_json","description":"Use this when you need to pull specific values out of a JSON document by JSONPath and getting the path exactly right on deeply nested or large structures matter"},{"name":"generate_id","description":"Use this when you need a modern unique identifier (UUID v7, UUID v5, ULID, or nanoid) or want to read the timestamp embedded in an existing ULID or UUIDv7. uuid"}],"package":null,"toolSurface":{"id":"ts_qvkw55cxqvmy","endpointId":"ep_2dqu4nb8pahv","hash":"67aa3f95dfc970f66de68d1e10003602b2c09174b9912c6b8321d290f48e9d78","toolCount":42,"serverName":"clean-tools","serverVersion":"0.1.0","protocolVersion":"2025-06-18","firstSeenAt":"2026-09-12T14:26:18.455Z","lastSeenAt":"2026-10-10T20:27:31.702Z","observations":102,"toolNames":["explain_cron","validate_cron","expand_rrule","convert_timezone","strftime_preview","amortization_schedule","tvm_solve","compound_interest","apr_calc","interest_rate","hash_text","diff_text","test_regex","convert_data","luhn_validate","convert_units","uuid_v4","random_number","generate_password","decode_jwt","encode_decode","count_text","generate_qr","convert_case","fancy_text","render_markdown","lorem_ipsum","redact_text","format_sql","color_palette","color_contrast","css_gradient","percentage","tip","convert_timestamp","format_json","convert_yaml","convert_color","slugify","convert_number_base","query_json","generate_id"],"distinctSurfaces":1},"endpointFacts":[{"id":"ep_2dqu4nb8pahv","url":"https://mcp.clean.tools/mcp","type":"mcp_streamable_http","factsCheckedAt":"2026-10-10T00:27:34.772Z","auth":{"observedAt":"2026-10-10T00:27:34.780Z","authRequired":false,"scheme":null,"resourceMetadata":null,"authorizationServer":null,"conformance":{"dpop":false,"rfc8414":false,"rfc9728":false,"pkceS256":false,"clientIdMetadataDocument":false,"dynamicClientRegistration":false}},"tls":{"observedAt":"2026-10-10T00:27:34.789Z","protocol":"TLSv1.3","chainValid":true,"chainError":null,"hostMatches":true,"subject":"clean.tools","issuer":{"commonName":"WE1","organization":"Google Trust Services"},"validFrom":"2026-09-04T00:46:22.000Z","validTo":"2026-12-03T01:46:18.000Z","daysToExpiry":53,"sanCount":3,"fingerprint256":"DF:4D:9E:30:A7:83:F9:11:D4:EC:1A:D5:5A:CE:0D:58:27:7F:2F:8C:ED:A9:5E:E8:07:D9:F7:70:C1:AF:2E:78"}}]},"verification":{"claimed":false,"claimedAt":null,"proofs":[]},"provenance":{"sources":[{"source":"mcp_registry","key":"tools.clean/mcp","url":"https://registry.modelcontextprotocol.io/v0/servers/tools.clean%2Fmcp","firstSeenAt":"2026-09-07T09:23:08.005Z","fetchedAt":"2026-10-08T20:19:13.899Z","normalizedAt":"2026-10-08T20:19:13.899Z"}]},"firstSeenAt":"2026-09-07T09:23:08.005Z","updatedAt":"2026-10-10T20:30:12.125Z"}