MCP HeartbeatTHE MCP OBSERVATORY
Public workspace

Explore

Evidence for your next connection.

Independent measurements of remote MCP servers. Every observation has a timestamp.

Read-only probes

MCP server · Code & DevOps

RedBison

500+ free tools over MCP: dev, text and security utilities, 230+ calculators. No sign-up.

Checks passed
13 / 22

1 failed · 8 not measured

Median response
1741 ms

Median of successful probes over 7 days

30-day uptime
Not measured

Share of countable probes over 30 days, including daily rollups. Auth challenges are excluded.

Discovered tools
87

Tool definitions returned by this server

Independent monitoring

Health & checks

Status history

Responded

The server completed its last measured handshake. This is an observation, not a guarantee.

Last checked
Check summary by test group
Test areaPassedFailedUnmeasured
ConnectionCan a client connect and discover tools?
500
Reliability & speedDoes it respond consistently and quickly?
004
Access & authenticationWhat is required to use this server?
102
Tool qualityAre the tool definitions usable by an agent?
400
Publisher identityCan the publisher be traced to its source?
312

Unmeasured means there is not enough evidence to decide. How these checks work

Inspect individual checks 22 recorded

Core

  • Pass
    Reachable

    Latest probe returned HTTP 200 in 1741 ms.

  • Pass
    Valid handshake

    protocolVersion 2025-11-25, serverInfo.name redbison-mcp.

  • Pass
    Lists tools

    tools/list returned 87 tools.

  • Pass
    Current protocol

    Negotiated 2025-11-25. The bar is 2025-06-18 or newer.

  • Pass
    HTTPS

    The endpoint URL is https.

Performance

  • Not measured
    Fast (p50)

    Median latency 1741 ms over 1 samples in 7 days. The bar is 1000 ms. Need at least 5 samples.

  • Not measured
    Consistent (p95)

    95th percentile 1741 ms over 1 samples in 7 days. The bar is 3000 ms. Need at least 20 samples.

  • Not measured
    Reliable (uptime)

    1 of 1 attempts returned a tool list in 30 days (100%). The bar is 99%. Need at least 30 samples.

  • Not measured
    Stable tool list

    Fewer than two successful probes in 30 days, so tool-list stability is not measured.

Access

  • Pass
    Open access

    tools/list succeeded with no credential, and the record declares none.

  • Not measured
    Standard auth

    Auth is not required, so the OAuth metadata check does not apply.

  • Not measured
    Free tier cited

    No publisher quote has been checked.

Tools

  • Pass
    Tools described

    Every tool description is at least 20 characters.

  • Pass
    Valid input schemas

    Every inputSchema is a JSON Schema object.

  • Pass
    Parameters documented

    223 of 235 parameters have a description (95%). The bar is 80%.

  • Pass
    Safety hints

    Every tool sets readOnlyHint or destructiveHint.

Publisher

  • Pass
    Verified namespace

    Listed in the Official MCP Registry.

  • Pass
    Website matches publisher

    The website host matches the reverse-domain namespace.

  • Fail
    Source repo linked

    No repository URL is on file.

  • Not measured
    Repo owner matches

    This namespace is not an io.github login, so the owner comparison does not apply.

  • Pass
    Recently updated

    Updated 2026-10-29T22:16:46.388342Z, within 180 days.

  • Not measured
    Open-source licence

    No GitHub repository to ask about a licence.

Start using RedBison

Connect to this server

Choose your client, copy the configuration, then enable the server in your client’s MCP settings.

Run this command in your terminal, then restart Claude Code.

Claude Code

claude mcp add --transport http redbison https://mcp.redbison.dev

Capabilities

Tools 87

ascii_art_text

Render text as a FIGlet ASCII art banner in one of 7 bundled fonts (Standard, Slant, Small, Big, Doom, ANSI Shadow, Mini), optionally wrapped at a column width and inside code comment markers. Printable ASCII only. The page at redbison.dev/ascii-art-text-generator has more fonts. Returns: Text: the banner (show it in a monospace code block). structuredContent { art, font, lines, columns, unsupported[] }. Example input: {"text":"Hello","font":"Slant","layout":"default","width":80,"comment":"none"}

Discovered
barcode_check_digit

Compute or validate the GS1 mod-10 check digit of an EAN-8, UPC-A, EAN-13 or ITF-14 (GTIN-8/12/13/14) number. Give the digits without the check digit to compute it, or the full code to validate it. Returns: JSON { digits, checkDigit, fullCode, valid, gtin14, formats[] }. valid is true/false when a full code was checked and null when the check digit was computed. Example input: {"code":"400638133393","mode":"compute"}

Discovered
base64_decode

Base64-decode a string back to UTF-8. Returns: UTF-8 decoded plain text. Example input: {"text":"aGVsbG8gd29ybGQ="}

Discovered
base64_encode

Base64-encode a UTF-8 string. Returns: Base64-encoded string (UTF-8 safe). Example input: {"text":"hello world"}

Discovered
bcrypt_hash

Hash a password with bcrypt. Returns: Bcrypt hash string (includes cost + salt). Example input: {"password":"s3cret!","cost":10} On error, includes hint: `cost` must be an integer between 4 and 12. Higher cost is exponentially slower.

Discovered
bcrypt_verify

Check whether a password matches a bcrypt hash. Returns: JSON { match: boolean }. Example input: {"password":"s3cret!","hash":"$2a$10$abcdefghijklmnopqrstuv"} On error, includes hint: `hash` must be a full bcrypt string starting with $2a$, $2b$, or $2y$.

Discovered
bmi_calculate

Calculate Body Mass Index in metric (kg/cm) or imperial (lb/in) units. Returns: JSON { bmi, category } (Underweight / Normal / Overweight / Obese). Example input: {"weight":70,"height":175,"units":"metric"}

Discovered
case_convert

Convert text between upper, lower, title, camel, pascal, snake, and kebab case. Returns: String converted to the requested case. Example input: {"text":"hello world example","style":"camel"} On error, includes hint: `style` must be one of: upper, lower, title, camel, pascal, snake, kebab.

Discovered
chmod_convert

Convert Unix permissions between octal (755, 4755), symbolic (rwxr-xr-x) and ls -l strings, or apply a chmod expression such as 'go-w,u+x' to a starting mode. Explains each class, setuid/setgid/sticky bits and risky modes, and gives umask defaults. Returns: JSON { octal, symbolic, ls, description[], warnings[], command, symbolicArg, umaskDefaults{ umask, newFile, newDirectory } }. Example input: {"mode":"rwxr-x---"} On error, includes hint: Use 1-4 octal digits, nine rwx characters (optionally with a leading file type), or a symbolic expression like u+x,go-w.

Discovered
color_convert

Convert a color between hex, rgb, and hsl. Accepts inputs like '#3B82F6', 'rgb(59,130,246)', or 'hsl(217,91%,60%)'. Returns: JSON with hex, rgb, and hsl representations of the color. Example input: {"color":"#3b82f6"} On error, includes hint: `color` accepts #rgb, #rrggbb, rgb(r,g,b), or hsl(h,s%,l%).

Discovered
color_palette

Build a harmonious color palette from one base color (complementary, analogous, triadic, split-complementary, tetradic, square, monochromatic or tints and shades). Returns each color as HEX, RGB, HSL and OKLCH with WCAG contrast against white and black, an 11-step 50-950 scale of the base, and ready-to-paste CSS variables and Tailwind config. Same maths as https://redbison.dev/color-palette-generator. Returns: JSON { base, rule, wheel, colors[] { role, hex, rgb, hsl, oklch, contrastOnWhite, contrastOnBlack, bestTextColor, wcagNormalText }, scale { '50'..'950': hex }, baseScaleStep, css, tailwindV3, tailwindV4 }. Example input: {"base":"#3b82f6","rule":"triadic","wheel":"rgb","name":"brand"} On error, includes hint: Pass the base color as hex like #3b82f6 (rgb(), hsl(), oklch() and CSS names also work). rule must be one of complementary, analogous, triadic, split-complementary, tetradic, square, monochromatic, shades.

Discovered
comma_to_lines

Split a delimited string into one item per line. Returns: Multi-line string, one item per line. Example input: {"text":"apple, banana, cherry","separator":",","trim":true}

Discovered
compound_interest

Compute compound interest: A = P(1 + r/n)^(nt). Returns: JSON { interest, total } computed as P(1+r/n)^(nt). Example input: {"principal":10000,"annualRatePercent":5,"years":10,"compoundsPerYear":12}

Discovered
contrast_check

Compute the WCAG contrast ratio between two hex colors and report AA/AAA pass/fail for normal and large text. Returns: JSON { ratio, AA, AAA, AALarge, AAALarge } for the two colors. Example input: {"foreground":"#ffffff","background":"#3b82f6"} On error, includes hint: Both colors must be hex (#rgb or #rrggbb).

Discovered
cron_build

Build a standard five-field cron expression from plain choices (every N minutes, hourly, daily, weekly, monthly, yearly) or explain an existing one. Returns the expression, an English description, the next run times in a time zone, and the same schedule for crontab, Kubernetes, GitHub Actions, Quartz and AWS EventBridge. Returns: JSON { expression, description, nextRuns[], timezone, platforms[{ id, name, value, notes[] }], warnings[] }. value is null on Quartz/EventBridge when both day fields are restricted. Example input: {"frequency":"weekly","daysOfWeek":["mon","wed","fri"],"hours":[9],"minute":30,"timezone":"America/New_York"} On error, includes hint: Give either plain choices (frequency plus minute/hours/days) or a five-field expression. Days of week accept names or 0-6 with 0 = Sunday.

Discovered
cron_validate

Validate a standard 5-field cron expression (minute hour day month weekday). Returns a human-readable summary and any parse error. Returns: JSON { valid: boolean, nextRuns?: string[], error?: string }. Example input: {"expression":"*/5 * * * *"} On error, includes hint: `expression` must be a 5-field cron (minute hour dom month dow). 6-field / Quartz syntax is not supported.

Discovered
css_beautify

Pretty-print or minify CSS, SCSS or Less, optionally sorting declarations alphabetically. Sorting is cascade-safe: a shorthand and its longhands (border / border-top, margin / margin-top, font / line-height) keep their original relative order. Minify removes comments and whitespace only; values such as 0px or colours are never rewritten. Returns: Text: the stylesheet. structuredContent { code, movedDeclarations, warnings[] }. Example input: {"css":".a{z-index:1;color:red;border-top:1px solid;border:0}","mode":"beautify","syntax":"css","sort":true,"indent":2} On error, includes hint: Unbalanced braces or an unterminated string or comment are reported as errors.

Discovered
css_gradient

Build a CSS linear or radial gradient string from color stops. Returns: CSS gradient string (linear or radial). Example input: {"type":"linear","angle":45,"stops":["#3b82f6","#8b5cf6"]} On error, includes hint: `type` is 'linear' or 'radial'; provide at least 2 color `stops`.

Discovered
csv_to_json

Parse CSV text into JSON. Uses the first row as headers unless header=false. Returns: JSON array of row objects keyed by the header row. Example input: {"text":"name,age\nAda,36\nGrace,85","delimiter":","} On error, includes hint: `text` must be CSV with a header row unless `header:false`. Escape embedded quotes as "".

Discovered
curl_to_code

Convert a curl command (bash/zsh quoting, $'...' strings, \ line continuations, or Windows cmd ^ escaping from 'Copy as cURL') into JavaScript fetch, Node Axios, Python requests, Go net/http or PHP ext-curl. Follows curl semantics: -d implies POST with application/x-www-form-urlencoded, repeated -d joins with &, --json sets JSON headers, -G moves data to the query string, -F is multipart, -u is Basic auth, no redirects without -L. Nothing is sent over the network. Returns: Text: the generated code, followed by notes on anything not translated. structuredContent { code, method, url, headers[{ name, value }], hasBody, warnings[] }. Example input: {"command":"curl -X POST https://api.example.com/v1/items -H 'Content-Type: application/json' -d '{\"name\":\"Ada\"}'","target":"python"} On error, includes hint: Send the command exactly as copied, including quotes. The word curl must be present.

Discovered
date_diff

Compute the difference between two ISO 8601 timestamps in days, hours, minutes, and seconds. Returns: JSON with milliseconds, totalSeconds/Minutes/Hours/Days, and a { days, hours, minutes, seconds } breakdown. Example input: {"from":"2026-01-01T00:00:00Z","to":"2026-07-11T12:00:00Z"} On error, includes hint: Both `from` and `to` must be ISO 8601 timestamps.

Discovered
dice_roll

Roll dice from standard notation (3d6+2, d20, d%, 4d6kh3 keep highest, 2d20kl1 keep lowest, 4d6dl1 drop lowest, 1d8+1d6-1) with crypto-random, unbiased dice, and get the exact odds: average, standard deviation, most likely totals and, optionally, the chance of every total counted over all face combinations. Returns: JSON { notation, min, max, rolls[{ total, detail }], odds{ outcomes, mean, sd, mostLikely[], median, table?[{ total, ways, p, atLeast, atMost }], tableNote? }|null }. table is given for up to 1,000 possible totals; above that tableNote explains why it is missing. Dropped dice appear in parentheses in detail; odds is null when the expression has too many combinations to count. Example input: {"notation":"4d6kh3","rolls":0} On error, includes hint: Join terms with + or -; keep with kh/kl (4d6kh3), drop with dl/dh (4d6dl1). Set rolls to 0 for odds only and table to true for every total.

Discovered
docker_run_to_compose

Convert one or more 'docker run' commands into a Compose file (services, ports, volumes, environment, networks, healthcheck, GPUs, limits), or convert a compose.yaml back into docker run commands. Unsupported flags are reported as warnings. Returns: run_to_compose: JSON { compose (YAML text), services[], warnings[] }. compose_to_run: JSON { commands[], warnings[] }. Example input: {"input":"docker run -d --name web -p 8080:80 -v html:/usr/share/nginx/html --restart unless-stopped nginx:alpine"} On error, includes hint: Each command must start with 'docker run' (or 'docker container run'). Separate several commands with new lines.

Discovered
emi_calculate

Compute the equated monthly installment (EMI) for a loan. Returns: JSON { emi, totalInterest, totalPayment } for the loan. Example input: {"principal":500000,"annualRatePercent":8.5,"months":240}

Discovered
epoch_convert

Convert between Unix epoch seconds/milliseconds and ISO 8601. Pass a number to convert to ISO, or an ISO string to convert to epoch. Returns: JSON with ISO string, epoch seconds, epoch milliseconds, and a UTC-formatted representation. Example input: {"value":"1700000000"} On error, includes hint: `value` is a string: either an integer (seconds or ms since epoch) or an ISO 8601 timestamp.

Discovered
escape_characters

Escape or unescape a string for JSON, HTML, XML, JavaScript, or SQL. Returns: Escaped or unescaped string for the chosen format. Example input: {"text":"He said \"hi\"","format":"json","mode":"escape"} On error, includes hint: `mode` is 'escape' or 'unescape'; `format` is one of: json, html, xml, js, sql.

Discovered
find_duplicate_entries

Return lines that appear more than once in the input, with their occurrence counts. Returns: JSON array of { value, count } for lines appearing more than once. Example input: {"text":"apple\nbanana\napple\ncherry\nbanana"}

Discovered
get_tool

Get full metadata for a specific RedBison tool by its id (slug). Returns: Full JSON metadata for the tool: { id, name, description, url, category, subcategory?, keywords[] }. Example input: {"id":"jwt-decoder"}

Discovered
gitignore_generate

Combine .gitignore templates (based on github/gitignore) for languages, frameworks, tools, editors and operating systems into one deduplicated file, optionally test paths against it. Template ids: node, python, django, jupyter, java, maven, gradle, kotlin, android, go, rust, ruby, rails, php, laravel, dotnet, c, cpp, swift, flutter, elixir, scala, r, nextjs, terraform, unity, docker, secrets, vscode, jetbrains, visualstudio, eclipse, vim, emacs, sublime, macos, windows, linux. Returns: JSON { content (.gitignore text), unknownTemplates[], duplicatesRemoved, tests[{ path, ignored, rule{pattern,line,negate}, via }] }. Example input: {"templates":["node","macos","vscode"],"testPaths":[".env","node_modules/x.js",".vscode/settings.json"]}

Discovered
hash

Compute a cryptographic hash of a string. Returns: Hex digest of the input using the requested algorithm. Example input: {"text":"hello world","algorithm":"sha256"} On error, includes hint: `algorithm` must be one of: md5, sha1, sha256, sha384, sha512.

Discovered
hash_compare

Hash two inputs with the same algorithm and compare them in constant time. Useful for verifying file integrity. Returns: JSON { match: boolean } computed with a constant-time comparison. Example input: {"a":"hello","b":"hello","algorithm":"sha256"} On error, includes hint: `algorithm` (optional, default sha256) must be one of: md5, sha1, sha256, sha384, sha512.

Discovered
health

Return server status, name, version, and uptime info. Use this to monitor the MCP server. Returns: JSON { status, name, version, startedAt, timestamp }. Example input: {}

Discovered
help

Explain how to use any RedBison MCP tool, with its input schema, a sample input and the sample output it produces. Call with no arguments for the list of tools; pass `tool` for one tool, and `calculator` with tool 'run_calculator' for one calculator. Returns: JSON with a tool's { usage, returns, inputSchema, sampleInput, sampleOutput }, or the list of tools when called with no arguments. Example input: {"tool":"list_calculators"}

Discovered
hmac

Compute an HMAC (RFC 2104) with SHA-256, SHA-1, SHA-384 or SHA-512 and return it in hex, Base64 and Base64url. Optionally build a GitHub, Stripe or Slack webhook signature, and check an expected signature with a constant-time comparison. Returns: JSON { algorithm, hex, base64, base64url, bits, key_bytes, message_bytes, signed_string, header, match } where match is null unless `expected` was given. Example input: {"message":"The quick brown fox jumps over the lazy dog","key":"key","algorithm":"SHA-256"} On error, includes hint: `algorithm` is SHA-256, SHA-1, SHA-384 or SHA-512; `key_encoding` and `message_encoding` are utf8, hex or base64; `preset` is plain, github, stripe or slack.

Discovered
html_beautify

Pretty-print an HTML fragment. Returns: Pretty-printed HTML string with normalized indentation. Example input: {"html":"<div><p>hi</p><p>there</p></div>","indent":2}

Discovered
http_status

Look up HTTP status codes: meaning, defining RFC section (RFC 9110 and others from the IANA registry), when to send it and common pitfalls. Pass a code (404), a class (5xx) or words (rate limit). Unofficial nginx and Cloudflare codes are included and flagged. Returns: JSON { query, count, results[] } where each result has { code, name, class, spec, official, deprecated, cacheableByDefault, summary, usage, note }, plus unknownCode text when a 3-digit code is not registered. Example input: {"query":"429"}

Discovered
ieee754_float

Encode a decimal (0.1, 6.02e23), exact fraction (1/3), hex float (0x1.8p3), inf or nan into IEEE 754-2019 binary16, binary32 or binary64 with round-to-nearest-even, or decode a hex or binary bit pattern. Returns sign, exponent and fraction bits, the class (normal, subnormal, zero, infinity, NaN with payload), the exact decimal value stored, the shortest round-trip decimal, the rounding error, nextUp/nextDown and the bytes in both byte orders. Returns: JSON { format, bits, hex, bytesBigEndian, bytesLittleEndian, sign, exponentBits, fractionBits, biasedExponent, exponent, class, formula, exactValue, shortest, ulp, nextUp{ hex, value }, nextDown{ hex, value }, nan{ quiet, payload, payloadHex }|null, rounding{ input, exact, error, relativeError, overflow, underflow }|null }. Example input: {"value":"0.1","format":"binary32"} On error, includes hint: Encode accepts decimals, p/q fractions, C hex floats, inf and nan. Decode takes up to the format's width in big-endian order: 4, 8 or 16 hex digits, or a 0b-prefixed binary pattern (unprefixed binary must be exactly 16, 32 or 64 digits).

Discovered
ip_convert

Convert an IPv4 address between dotted-decimal, integer, binary, and hex forms. Accepts any of those as input. Returns: JSON { decimal, integer, hex, binary } representations of the IPv4 address. Example input: {"value":"192.168.1.1"} On error, includes hint: `value` accepts dotted (192.168.0.1), integer (3232235521), 32-bit binary, or 0x-prefixed hex.

Discovered
js_beautify

Format JavaScript, TypeScript or JSX with js-beautify, or minify JavaScript/TypeScript by removing comments and whitespace (no renaming, no rewriting; line breaks are kept where automatic semicolon insertion needs them). The output is re-lexed and compared token by token with the input. Returns: Text: the formatted or minified code. structuredContent { code, mode, inputBytes, outputBytes, savedPercent, warnings[] }. Example input: {"code":"function add(a,b){return a+b}","mode":"beautify","language":"javascript","indent":2,"brace_style":"collapse","keep_license":true} On error, includes hint: Pass the whole file as `code`. An unterminated string, comment or regex is reported with its line and column.

Discovered
json_format

Pretty-print a JSON string with a chosen indent size. Returns: Pretty-printed JSON string with the requested indent, or an error message if the input is invalid. Example input: {"text":"{\"a\":1,\"b\":[2,3]}","indent":2} On error, includes hint: Pass valid JSON as `text` (double-quoted keys/strings, no trailing commas). `indent` is an integer between 0 and 10.

Discovered
json_schema_validate

Validate a JSON document against a JSON Schema (drafts 06, 07, 2019-09 and 2020-12, via Ajv, all errors reported with JSON Pointer paths and formats such as date-time, email, uuid, ipv4/ipv6 checked), or infer a starter schema from sample JSON. Leave `schema` empty to infer. Returns: Validate: text summary plus structuredContent { mode, valid, draft, errors[{ path, message, keyword, schemaPath, params }], warnings[] }. Infer: the schema as JSON text and structuredContent { mode, schema }. Example input: {"data":"{\"name\":\"Ada\",\"age\":-1}","schema":"{\"type\":\"object\",\"properties\":{\"age\":{\"type\":\"integer\",\"minimum\":0}},\"required\":[\"name\",\"email\"]}","draft":"auto"} On error, includes hint: Both `data` and `schema` are JSON text, not objects. Send an empty `schema` to generate one from `data`.

Discovered
json_to_csv

Convert an array of JSON objects to CSV. Columns are inferred from the union of keys. Returns: CSV string with a header row derived from the first object's keys. Example input: {"json":"[{\"name\":\"Ada\",\"age\":36},{\"name\":\"Grace\",\"age\":85}]","delimiter":","} On error, includes hint: `json` must be a JSON-encoded array of objects (parameter name is `json`, not `text`).

Discovered
json_to_yaml

Convert a JSON string to YAML. Returns: YAML representation of the parsed JSON value. Example input: {"json":"{\"name\":\"Ada\",\"skills\":[\"math\",\"logic\"]}"} On error, includes hint: Pass the JSON as `json` (a stringified JSON value), not as a JS object.

Discovered
json_validate

Validate a JSON string. Returns { valid, error? }. Returns: JSON { valid: boolean, error?: string }. Example input: {"text":"{\"a\":1}"} On error, includes hint: Pass the JSON string as `text`.

Discovered
jwt_decode

Decode a JWT and return its header + payload. Does NOT verify the signature. Returns: JSON with decoded { header, payload, signature } sections of the JWT. Example input: {"token":"eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiIxMjMifQ.abc"} On error, includes hint: `token` must be a compact JWT with three base64url-encoded parts separated by dots.

Discovered
lines_to_comma

Join lines with a separator (comma by default). Empty lines are skipped. Returns: Single-line string with items joined by the chosen separator. Example input: {"text":"apple\nbanana\ncherry","separator":", ","quote":false}

Discovered
list_calculators

List the calculators that run_calculator can execute (finance, health, maths, statistics, construction, science, everyday and engineering), with each one's inputs, units, defaults and an example. Filter with an optional search query. Returns: JSON { total, calculators[] } where each has { id, title, summary, url, inputs (JSON Schema per field), example }. Example input: {"query":"mortgage","limit":5}

Discovered
list_categories

List all tool categories and subcategories available on RedBison. Returns: JSON array of { category, count } entries covering the full RedBison catalog. Example input: {}

Discovered
list_compare

Compare two newline-separated lists. Returns union, intersection, only-in-A, and only-in-B. Returns: JSON { union, intersection, onlyInA, onlyInB } arrays. Example input: {"a":"apple\nbanana\ncherry","b":"banana\ncherry\ndate"}

Discovered
lorem_ipsum

Generate placeholder lorem ipsum text. Returns: Lorem ipsum text of the requested size. Example input: {"unit":"paragraphs","count":2}

Discovered
markdown_table

Turn CSV, TSV (spreadsheet paste) or an existing Markdown table into a GitHub Flavored Markdown table. The first row is the header; pipes are escaped as \|, line breaks inside cells become <br>, and columns can be padded so the pipes line up (CJK-width aware). Returns: Text: the Markdown table. structuredContent { markdown, rows (including header), columns, detected ('csv' | 'tsv' | 'markdown' | 'other'), errors[] }. Example input: {"text":"Item,Qty,Price\nApple,3,$1.20\nKiwi,12,$0.50","align":"none","pretty":true,"outer_pipes":true,"bold_header":false} On error, includes hint: Put the header in the first row. Quote CSV fields that contain commas or line breaks.

Discovered
mime_lookup

Find the MIME (media) type for a file extension or file name, or the extensions for a MIME type. Returns the type, whether it is IANA-registered, aliases, notes and the Content-Type header to send. Returns: JSON { query, matchedBy: 'extension'|'mime'|'text', count, results[] } with { mime, extensions[], name, category, registered, aliases[], spec, note, contentType }. Example input: {"query":"woff2"}

Discovered
morse_code

Translate text to International Morse code (ITU-R M.1677-1) or Morse back to text. Letters are separated by spaces and words by ' / '. Wrap prosigns in angle brackets (<SOS>, <AR>, <SK>). Also returns the transmission time at a given speed in words per minute, with optional Farnsworth spacing. Same rules as redbison.dev/morse-code-translator. Returns: Text: the Morse or decoded text. structuredContent { direction, morse | text, unsupported[] | unknownCodes[], durationSeconds, unitMs }. Example input: {"input":"SOS at 18 wpm","direction":"encode","wpm":18}

Discovered
nato_phonetic

Spell text with the ICAO/NATO radiotelephony alphabet (Alfa, Bravo, Charlie...), with ICAO number words (Tree, Fower, Fife, Niner) or plain ones, optional Capital/Lowercase markers for passwords, or decode code words back to text. Same rules as redbison.dev/nato-phonetic-alphabet. Returns: Text: code words, ' / ' between input words. structuredContent { spelled, tokens[{char, word, pronunciation}] } or, for decode, { text, unknown[] }. Example input: {"text":"Gate B12","direction":"spell","spelling":"icao","digits":"icao","markCase":false}

Discovered
number_base_convert

Convert a number between binary, octal, decimal, hex and any base from 2 to 36, with arbitrary-size integers (BigInt), exact fractional parts (repeating digits in parentheses, e.g. 0.1 decimal = 0.0(0011) binary) and an optional two's complement view at a chosen bit width with signed/unsigned readings and big- and little-endian bytes. Returns: JSON { fromBase, fraction, binary, octal, decimal, hex, target{ base, value }|null, bitLength, twosComplement{ width, binary, hex, signed, unsigned, bytesBigEndian, bytesLittleEndian, overflow, min, max, maxUnsigned }|null, warnings[] }. Example input: {"value":"-42","width":16} On error, includes hint: Digits must be valid in the base (0-9 then a-z). Two's complement needs a whole number and a width; set inputIsPattern to read hex like FFD6 as a signed value.

Discovered
password_generate

Generate a cryptographically random password. Choose length and character classes. Returns: Randomly generated password string. Example input: {"length":20,"uppercase":true,"lowercase":true,"digits":true,"symbols":true,"count":1} On error, includes hint: `length` 4-256. Enable at least one character class (lowercase/uppercase/digits/symbols).

Discovered
password_strength

Estimate how guessable a password is with zxcvbn pattern matching (dictionary words, common passwords, keyboard walks, sequences, dates, l33t). Returns a 0-4 score, estimated guesses, entropy in bits, crack times for online and offline attacks, warnings, suggestions and NIST SP 800-63B-4 length checks. The password is not echoed back. Returns: JSON { score 0-4, label, length, guesses, guesses_log10, entropy_bits, character_pool_entropy_bits, character_classes[], crack_times[{scenario, seconds, display}], warning, suggestions[], patterns[{pattern, start, end, description}], nist_sp800_63b{...} }. The password itself is never included. Example input: {"password":"Tr0ub4dor&3","user_inputs":["alice"]} On error, includes hint: `password` must be a string of at most 256 characters; `user_inputs` is an optional array of strings.

Discovered
random_email

Generate random-looking (non-deliverable) test email addresses. Returns: JSON array of random email address strings. Example input: {"count":3,"domain":"example.com"}

Discovered
random_name

Generate random human names. Returns: JSON array of random human name strings. Example input: {"count":3}

Discovered
random_number

Generate cryptographically random numbers in a range. Returns: JSON array of generated numbers. Example input: {"min":1,"max":100,"count":5,"mode":"integer"}

Discovered
readability

Score English text with Flesch Reading Ease, Flesch-Kincaid Grade, Gunning Fog, SMOG, Coleman-Liau and the Automated Readability Index, and list hard sentences, passive voice, -ly adverbs and wordy phrases with plainer alternatives. Syllables are estimated with rules plus an exception list. Same rules as redbison.dev/readability-checker. Returns: JSON { counts, wordsPerSentence, syllablesPerWord, fleschReadingEase, fleschBand, fleschKincaidGrade, gunningFog, smog, smogShortSample, colemanLiau, automatedReadabilityIndex, averageGrade, hardSentences, veryHardSentences, passiveVoice[], adverbs[], plainerWords[{found,try}], hardest[{sentence,words,grade,level}] }. Example input: {"text":"The committee utilized a methodology that was developed in order to facilitate a comprehensive assessment of the program. We read it twice.","lineBreaksEndSentences":true,"maxSentences":5}

Discovered
redirect_rules

Generate 301/302/307/308 redirect rules for Apache .htaccess (mod_rewrite), nginx, Netlify _redirects or vercel.json from a list of 'source destination [code]' lines. A source ending in /* moves a whole folder. Also checks for loops, chains and duplicates and can add HTTPS and www/non-www rules. Returns: JSON { platform, config (file text), ruleCount, issues[{ line, level, message }], notes[] }. Example input: {"rules":"/old-page /new-page\n/blog/* /news/:splat 301","platform":"nginx"}

Discovered
regex_test

Test a regular expression against text. Returns all matches and capture groups. Returns: JSON { matches: string[], count } of matches for the pattern. Example input: {"pattern":"\\d+","flags":"g","text":"order 42 shipped on day 7"} On error, includes hint: `pattern` is a JS RegExp source (double-escape backslashes in JSON). `flags` uses standard flags like g, i, m, s.

Discovered
remove_duplicate_lines

Remove duplicate lines from text while preserving first-occurrence order. Returns: Text with duplicate lines removed (order preserved). Example input: {"text":"apple\nbanana\napple\ncherry","caseInsensitive":false,"trim":true}

Discovered
remove_empty_lines

Strip blank / whitespace-only lines from the input. Returns: Text with blank lines removed. Example input: {"text":"one\n\ntwo\n\n\nthree"}

Discovered
remove_extra_spaces

Collapse runs of whitespace inside each line to a single space and trim ends. Returns: Text with runs of whitespace collapsed to a single space. Example input: {"text":"hello world foo"}

Discovered
run_calculator

Run any RedBison calculator by id with named inputs and get the result as JSON: mortgages and loans, savings and investing, pay and tax, body and fitness, maths, statistics, geometry, construction, science and engineering (beams, bolts, wire size, PCB traces, pipe flow, rafters, sheet metal and more). Call list_calculators first to see ids, inputs and units. Returns: JSON { id, title, url, inputs, result } with the calculator's outputs. Example input: {"id":"percentage-calculator","inputs":{}}

Discovered
search_tools

Search RedBison's 500+ tools by keyword: developer utilities, file and media converters, and finance, health, math and engineering calculators. Returns a ranked list with each tool's canonical URL and, when one exists, its in-depth guide. Use this when a user asks 'is there a tool for X?' or 'what RedBison tool should I use to Y?' Returns: JSON with { query, count, results[] } where each result has { id, name, description, url, category }. Example input: {"query":"json format","limit":5}

Discovered
simple_interest

Compute simple interest: I = P × r × t. Returns: JSON { interest, total } computed as P·r·t. Example input: {"principal":10000,"annualRatePercent":5,"years":3}

Discovered
slugify

Convert text to a URL-safe slug. Returns: URL-safe slug (lowercase, dashes). Example input: {"text":"Hello, World! 2026"}

Discovered
sql_beautify

Format a SQL query with keyword uppercasing and line breaks before major clauses. Returns: Formatted SQL query with keywords on new lines. Example input: {"sql":"select id,name from users where active=true order by name"}

Discovered
subnet_calculator

Given a CIDR block (e.g. 10.0.0.0/24), return network, broadcast, netmask, first/last host, and host count. Returns: JSON with network, broadcast, first/last host, host count, and mask for the CIDR. Example input: {"cidr":"192.168.1.0/24"} On error, includes hint: `cidr` must be IPv4 in `A.B.C.D/prefix` form, prefix 0-32.

Discovered
text_diff

Compute a line-level diff between two strings. Returns a unified-style patch and per-line change list. Returns: JSON line-diff with { added, removed, unchanged } arrays. Example input: {"a":"line 1\nline 2\nline 3","b":"line 1\nline 2 changed\nline 3"}

Discovered
timezone_convert

Convert a timestamp between two IANA timezones. Returns the wall-clock time in the target zone. Returns: JSON { utc, zone, local } with the timestamp rendered in the target IANA timezone. Example input: {"timestamp":"2026-07-11T12:00:00Z","to":"America/Los_Angeles"} On error, includes hint: `timestamp` must be ISO 8601 (e.g. 2026-07-11T12:00:00Z); `to` must be an IANA zone like America/New_York.

Discovered
toml_convert

Convert between TOML 1.0, JSON and YAML, validating the input. TOML dates become RFC 3339 strings in JSON; nulls are dropped when writing TOML (it has no null) and reported; integers beyond 2^53 are kept exact; inf and nan become strings in JSON. Use from=toml,to=toml to validate and normalise a TOML file. Returns: Text: the converted document. structuredContent { output, warnings[] } where warnings list dropped nulls, large integers and non-finite numbers. Example input: {"text":"[package]\nname = \"demo\"\nversion = \"0.1.0\"\n\n[dependencies]\nserde = \"1.0\"","from":"toml","to":"json","indent":2} On error, includes hint: TOML output needs an object at the top level; wrap arrays in a key.

Discovered
tournament_bracket

Build a seeded single or double elimination bracket (padded to the next power of two, byes to the top seeds, standard 1 v n seeding) or a round robin schedule by the circle method. Players are given in seed order. Returns the round-one pairings, byes, every round and a printable text version. Returns: Elimination: JSON { format, players, bracketSize, byes, gamesNeeded{ min, max }, rounds[{ name, matches[{ id, top, bottom, walkover }] }], text }. Round robin: { format, players, rounds[{ round, games[[a, b]], sitsOut }], games, text }. Later-round slots read TBD. Example input: {"players":["Alder","Birch","Cedar","Hazel","Maple","Rowan"],"format":"single"} On error, includes hint: List players strongest first; pass format 'double' for a losers bracket or 'round-robin' for everyone-plays-everyone. Shuffle the list yourself for random seeding.

Discovered
tsv_parse

Parse tab-separated values into JSON. First row is treated as header unless header=false. Returns: JSON array of row objects derived from the TSV header row. Example input: {"text":"name\tage\nAda\t36\nGrace\t85"} On error, includes hint: `text` must use real tab (\t) separators, not multiple spaces.

Discovered
url_decode

Percent-decode a URL-encoded string. Returns: Percent-decoded plain text. Example input: {"text":"hello%20world%20%26%20friends"}

Discovered
url_encode

Percent-encode a string for use in URLs. Returns: Percent-encoded string suitable for URL query values. Example input: {"text":"hello world & friends"}

Discovered
user_agent_parse

Parse a User-Agent header into browser, engine, OS, device type, vendor, model and CPU (ua-parser-js), and detect search, AI, social, SEO and monitoring bots and HTTP libraries. Notes explain User-Agent reduction limits such as Windows 11 reporting as Windows NT 10.0. Returns: JSON { summary, browser{name,version,major}, engine{name,version}, os{name,version}, device{type,vendor,model}, cpu{architecture}, isBot, bot{name,category,owner}|null, notes[] }. Example input: {"userAgent":"Mozilla/5.0 (iPhone; CPU iPhone OS 17_5 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/17.5 Mobile/15E148 Safari/604.1"}

Discovered
utm_build

Add Google Analytics UTM parameters (utm_source, utm_medium, utm_campaign, utm_id, utm_term, utm_content) to a landing page URL. Keeps existing query parameters and the #fragment, lowercases values by default, and predicts the GA4 default channel group. Returns: JSON { url, params, predictedChannel, warnings[] }: the tagged URL, the UTM values used, the likely GA4 default channel group (approximation) and any naming warnings. Example input: {"url":"https://example.com/pricing?plan=pro","source":"newsletter","medium":"email","campaign":"October Launch","content":"hero_button"}

Discovered
uuid_generate

Generate one or more v4 UUIDs. Returns: JSON array of v4 UUID strings. Example input: {"count":3} On error, includes hint: `count` must be an integer between 1 and 100.

Discovered
word_count

Count words, characters (with and without spaces), sentences, paragraphs and lines in text, estimate reading and speaking time, list the most frequent words and check the text against common platform limits (X post weighted length, Bluesky, LinkedIn, SMS segments, meta description). Same rules as redbison.dev/word-counter. Returns: JSON { words, characters, charactersNoSpaces, sentences, paragraphs, lines, uniqueWords, utf8Bytes, averageWordLength, averageSentenceLength, readingTime, readingSeconds, speakingTime, speakingSeconds, topWords[{word,count,percent}], platformLimits[{platform,limit,used,remaining,over,detail}] }. Example input: {"text":"Short sentences help. Long ones, full of clauses that wander, do not.","readingWpm":238,"speakingWpm":150,"topWords":5}

Discovered
would_you_rather

Draw random would-you-rather questions from RedBison's original question bank, filtered by audience (kids, family, work, party), with no repeats within one call. Returns: JSON { audience[], available, questions[{ id, question, a, b, tags[] }] }. Example input: {"audience":["work"],"count":3} On error, includes hint: Audiences: kids, family, work, party. count is capped at the number of matching questions.

Discovered
xml_beautify

Pretty-print an XML document. Returns: Pretty-printed XML string with normalized indentation. Example input: {"xml":"<root><a>1</a><b>2</b></root>","indent":2}

Discovered
yaml_beautify

Normalize YAML indentation and whitespace. Returns: Normalized YAML string (2-space indent, collapsed blank lines). Example input: {"yaml":"a: 1\nb: 2\n\n\nc: 3"}

Discovered
yaml_to_json

Convert simple YAML (maps, lists, scalars, flow {} / []) to JSON. Anchors, tags, and complex block scalars are not supported. Returns: Pretty-printed JSON built from the YAML input. Example input: {"yaml":"name: Ada\nskills:\n - math\n - logic"} On error, includes hint: Pass the YAML document as `yaml`; only 2-space indented block YAML is supported.

Discovered

Recent measurements

Probe history

View status
Latest stored probes. Raw probe rows are kept for 14 days.
CheckedResultResponseTools
Connected1741 ms87