Skip to content

RedBison

dev.redbison/mcpredbison.devstreamable-httpv2.1.0Scanned

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

82 tools: 3 can delete or cancel things, 2 do something that can't be undone, 60 change things and 17 only read.

Tools: 3 delete, 2 irreversible, 60 write, 17 read.

Anlyon alternative

65 of these tools change something. Run those as governed actions.

Declare what an action changes, and Anlyon puts it under a shared limit, binds every approval to the exact request, and grades the outcome. It works on any HTTPS API you can describe as an action.

Anlyon does not run, proxy or govern this MCP server. A tool your own code calls directly is not routed through Anlyon and is not governed by it.

Import an OpenAPI spec →

Tools

Grouped by what each tool does, most consequential first. Open one for its reasons and full description; descriptions are the publisher's own words.

82 tools

Deletes or cancels 3Claude Code: deny
  • remove_duplicate_linesRemove duplicate lines from text while preserving first-occurrence order.1 finding

    Why it is in this group

    • The name "remove_duplicate_lines" says "remove": a word for removing or ending something.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.

    Findings

    • Warn

      The server marks "remove_duplicate_lines" read-only (readOnlyHint: true), and its own name, description or input give the class "destructive".

      Matched text

      annotations: {"readOnlyHint":true,"idempotentHint":true,"openWorldHint":false}; The name "remove_duplicate_lines" says "remove": a word for removing or ending something.

      What this check looks for
    Description, as the server wrote it
    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}

    Annotations the server declares

    • readOnlyHint: true
    • openWorldHint: false
    • idempotentHint: true
  • remove_empty_linesStrip blank / whitespace-only lines from the input.1 finding

    Why it is in this group

    • The name "remove_empty_lines" says "remove": a word for removing or ending something.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.

    Findings

    • Warn

      The server marks "remove_empty_lines" read-only (readOnlyHint: true), and its own name, description or input give the class "destructive".

      Matched text

      annotations: {"readOnlyHint":true,"idempotentHint":true,"openWorldHint":false}; The name "remove_empty_lines" says "remove": a word for removing or ending something.

      What this check looks for
    Description, as the server wrote it
    Strip blank / whitespace-only lines from the input. Returns: Text with blank lines removed. Example input: {"text":"one\n\ntwo\n\n\nthree"}

    Annotations the server declares

    • readOnlyHint: true
    • openWorldHint: false
    • idempotentHint: true
  • remove_extra_spacesCollapse runs of whitespace inside each line to a single space and trim ends.1 finding

    Why it is in this group

    • The name "remove_extra_spaces" says "remove": a word for removing or ending something.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.

    Findings

    • Warn

      The server marks "remove_extra_spaces" read-only (readOnlyHint: true), and its own name, description or input give the class "destructive".

      Matched text

      annotations: {"readOnlyHint":true,"idempotentHint":true,"openWorldHint":false}; The name "remove_extra_spaces" says "remove": a word for removing or ending something.

      What this check looks for
    Description, as the server wrote it
    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"}

    Annotations the server declares

    • readOnlyHint: true
    • openWorldHint: false
    • idempotentHint: true
Can't be undone 2Claude Code: ask
  • timezone_convertConvert a timestamp between two IANA timezones.Can send data out1 finding

    Why it is in this group

    • The name "timezone_convert" says "convert": a word for a change.
    • The input addresses people (input.to): what it sends cannot be taken back.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.

    What it can reach

    • outboundThe input takes a destination (input.to): what the tool writes goes there.

    Findings

    • Warn

      The server marks "timezone_convert" read-only (readOnlyHint: true), and its own name, description or input give the class "irreversible".

      Matched text

      annotations: {"readOnlyHint":true,"idempotentHint":true,"openWorldHint":false}; The name "timezone_convert" says "convert": a word for a change.

      What this check looks for
    Description, as the server wrote it
    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.

    Annotations the server declares

    • readOnlyHint: true
    • openWorldHint: false
    • idempotentHint: true
  • toml_convertConvert between TOML 1.0, JSON and YAML, validating the input.Can send data out1 finding

    Why it is in this group

    • The name "toml_convert" says "convert": a word for a change.
    • The input addresses people (input.to): what it sends cannot be taken back.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.

    What it can reach

    • outboundThe input takes a destination (input.to): what the tool writes goes there.

    Findings

    • Warn

      The server marks "toml_convert" read-only (readOnlyHint: true), and its own name, description or input give the class "irreversible".

      Matched text

      annotations: {"readOnlyHint":true,"idempotentHint":true,"openWorldHint":false}; The name "toml_convert" says "convert": a word for a change.

      What this check looks for
    Description, as the server wrote it
    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.

    Annotations the server declares

    • readOnlyHint: true
    • openWorldHint: false
    • idempotentHint: true
Changes things 60Claude Code: ask
  • ascii_art_textRender 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 comm…No findings

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
    Description, as the server wrote it
    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"}

    Annotations the server declares

    • readOnlyHint: true
    • openWorldHint: false
    • idempotentHint: true
  • barcode_check_digitCompute 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.1 finding

    Why it is in this group

    • The input takes a statement or command to run (input.code), which can change anything it can reach.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.

    Findings

    • Warn

      The server marks "barcode_check_digit" read-only (readOnlyHint: true), and its own name, description or input give the class "write".

      Matched text

      annotations: {"readOnlyHint":true,"idempotentHint":true,"openWorldHint":false}; The input takes a statement or command to run (input.code), which can change anything it can reach.

      What this check looks for
    Description, as the server wrote it
    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"}

    Annotations the server declares

    • readOnlyHint: true
    • openWorldHint: false
    • idempotentHint: true
  • base64_decodeBase64-decode a string back to UTF-8.No findings

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
    Description, as the server wrote it
    Base64-decode a string back to UTF-8. Returns: UTF-8 decoded plain text. Example input: {"text":"aGVsbG8gd29ybGQ="}

    Annotations the server declares

    • readOnlyHint: true
    • openWorldHint: false
    • idempotentHint: true
  • base64_encodeBase64-encode a UTF-8 string.No findings

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
    Description, as the server wrote it
    Base64-encode a UTF-8 string. Returns: Base64-encoded string (UTF-8 safe). Example input: {"text":"hello world"}

    Annotations the server declares

    • readOnlyHint: true
    • openWorldHint: false
    • idempotentHint: true
  • bcrypt_hashHash a password with bcrypt.No findings

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
    Description, as the server wrote it
    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.

    Annotations the server declares

    • readOnlyHint: true
    • openWorldHint: false
    • idempotentHint: false
  • bcrypt_verifyCheck whether a password matches a bcrypt hash.No findings

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
    Description, as the server wrote it
    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$.

    Annotations the server declares

    • readOnlyHint: true
    • openWorldHint: false
    • idempotentHint: true
  • bmi_calculateCalculate Body Mass Index in metric (kg/cm) or imperial (lb/in) units.No findings

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
    Description, as the server wrote it
    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"}

    Annotations the server declares

    • readOnlyHint: true
    • openWorldHint: false
    • idempotentHint: true
  • case_convertConvert text between upper, lower, title, camel, pascal, snake, and kebab case.1 finding

    Why it is in this group

    • The name "case_convert" says "convert": a word for a change.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.

    Findings

    • Warn

      The server marks "case_convert" read-only (readOnlyHint: true), and its own name, description or input give the class "write".

      Matched text

      annotations: {"readOnlyHint":true,"idempotentHint":true,"openWorldHint":false}; The name "case_convert" says "convert": a word for a change.

      What this check looks for
    Description, as the server wrote it
    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.

    Annotations the server declares

    • readOnlyHint: true
    • openWorldHint: false
    • idempotentHint: true
  • chmod_convertConvert 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.1 finding

    Why it is in this group

    • The name "chmod_convert" says "convert": a word for a change.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.

    Findings

    • Warn

      The server marks "chmod_convert" read-only (readOnlyHint: true), and its own name, description or input give the class "write".

      Matched text

      annotations: {"readOnlyHint":true,"idempotentHint":true,"openWorldHint":false}; The name "chmod_convert" says "convert": a word for a change.

      What this check looks for
    Description, as the server wrote it
    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.

    Annotations the server declares

    • readOnlyHint: true
    • openWorldHint: false
    • idempotentHint: true
  • color_convertConvert a color between hex, rgb, and hsl.1 finding

    Why it is in this group

    • The name "color_convert" says "convert": a word for a change.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.

    Findings

    • Warn

      The server marks "color_convert" read-only (readOnlyHint: true), and its own name, description or input give the class "write".

      Matched text

      annotations: {"readOnlyHint":true,"idempotentHint":true,"openWorldHint":false}; The name "color_convert" says "convert": a word for a change.

      What this check looks for
    Description, as the server wrote it
    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%).

    Annotations the server declares

    • readOnlyHint: true
    • openWorldHint: false
    • idempotentHint: true
  • color_paletteBuild a harmonious color palette from one base color (complementary, analogous, triadic, split-complementary, tetradic, square, monochromatic or tints and shades).No findings

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
    Description, as the server wrote it
    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.

    Annotations the server declares

    • readOnlyHint: true
    • openWorldHint: false
    • idempotentHint: true
  • comma_to_linesSplit a delimited string into one item per line.No findings

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
    Description, as the server wrote it
    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}

    Annotations the server declares

    • readOnlyHint: true
    • openWorldHint: false
    • idempotentHint: true
  • compound_interestCompute compound interest: A = P(1 + r/n)^(nt).No findings

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
    Description, as the server wrote it
    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}

    Annotations the server declares

    • readOnlyHint: true
    • openWorldHint: false
    • idempotentHint: true
  • contrast_checkCompute the WCAG contrast ratio between two hex colors and report AA/AAA pass/fail for normal and large text.No findings

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
    Description, as the server wrote it
    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).

    Annotations the server declares

    • readOnlyHint: true
    • openWorldHint: false
    • idempotentHint: true
  • cron_buildBuild a standard five-field cron expression from plain choices (every N minutes, hourly, daily, weekly, monthly, yearly) or explain an existing one.No findings

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
    Description, as the server wrote it
    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.

    Annotations the server declares

    • readOnlyHint: true
    • openWorldHint: false
    • idempotentHint: true
  • css_beautifyPretty-print or minify CSS, SCSS or Less, optionally sorting declarations alphabetically.No findings

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
    Description, as the server wrote it
    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.

    Annotations the server declares

    • readOnlyHint: true
    • openWorldHint: false
    • idempotentHint: true
  • css_gradientBuild a CSS linear or radial gradient string from color stops.No findings

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
    Description, as the server wrote it
    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`.

    Annotations the server declares

    • readOnlyHint: true
    • openWorldHint: false
    • idempotentHint: true
  • csv_to_jsonParse CSV text into JSON.No findings

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
    Description, as the server wrote it
    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 "".

    Annotations the server declares

    • readOnlyHint: true
    • openWorldHint: false
    • idempotentHint: true
  • curl_to_codeConvert a curl command (bash/zsh quoting, $'...' strings, \ line continuations, or Windows cmd ^ escaping from 'Copy as cURL') into JavaScript fetch, Node Axios, Python requests, G…1 finding

    Why it is in this group

    • The description's first verb is "convert": a word for a change.
    • The input takes a statement or command to run (input.command), which can change anything it can reach.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.

    Findings

    • Warn

      The server marks "curl_to_code" read-only (readOnlyHint: true), and its own name, description or input give the class "write".

      Matched text

      annotations: {"readOnlyHint":true,"idempotentHint":true,"openWorldHint":false}; The description's first verb is "convert": a word for a change.

      What this check looks for
    Description, as the server wrote it
    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.

    Annotations the server declares

    • readOnlyHint: true
    • openWorldHint: false
    • idempotentHint: true
  • docker_run_to_composeConvert 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 dock…1 finding

    Why it is in this group

    • The name "docker_run_to_compose" says "run": a word for a change.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.

    Findings

    • Warn

      The server marks "docker_run_to_compose" read-only (readOnlyHint: true), and its own name, description or input give the class "write".

      Matched text

      annotations: {"readOnlyHint":true,"idempotentHint":true,"openWorldHint":false}; The name "docker_run_to_compose" says "run": a word for a change.

      What this check looks for
    Description, as the server wrote it
    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.

    Annotations the server declares

    • readOnlyHint: true
    • openWorldHint: false
    • idempotentHint: true
  • emi_calculateCompute the equated monthly installment (EMI) for a loan.No findings

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
    Description, as the server wrote it
    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}

    Annotations the server declares

    • readOnlyHint: true
    • openWorldHint: false
    • idempotentHint: true
  • epoch_convertConvert between Unix epoch seconds/milliseconds and ISO 8601.1 finding

    Why it is in this group

    • The name "epoch_convert" says "convert": a word for a change.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.

    Findings

    • Warn

      The server marks "epoch_convert" read-only (readOnlyHint: true), and its own name, description or input give the class "write".

      Matched text

      annotations: {"readOnlyHint":true,"idempotentHint":true,"openWorldHint":false}; The name "epoch_convert" says "convert": a word for a change.

      What this check looks for
    Description, as the server wrote it
    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.

    Annotations the server declares

    • readOnlyHint: true
    • openWorldHint: false
    • idempotentHint: true
  • escape_charactersEscape or unescape a string for JSON, HTML, XML, JavaScript, or SQL.No findings

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
    Description, as the server wrote it
    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.

    Annotations the server declares

    • readOnlyHint: true
    • openWorldHint: false
    • idempotentHint: true
  • gitignore_generateCombine .gitignore templates (based on github/gitignore) for languages, frameworks, tools, editors and operating systems into one deduplicated file, optionally test paths against i…3 findings

    Why it is in this group

    • The name "gitignore_generate" says "generate": a word for a change.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.

    Findings

    • High

      The description refers to ".env".

      Matched text

      description: "...["node","macos","vscode"],"testPaths":[".env","node_modules/x.js",".vscode/settings...."

      What this check looks for
    • High

      The input schema at properties.testPaths.description refers to ".env".

      Matched text

      inputSchema.properties.testPaths.description: "...ository-relative paths to check, e.g. ['.env', 'dist/']. End with / for a directory."

      What this check looks for
    • Warn

      The server marks "gitignore_generate" read-only (readOnlyHint: true), and its own name, description or input give the class "write".

      Matched text

      annotations: {"readOnlyHint":true,"idempotentHint":true,"openWorldHint":false}; The name "gitignore_generate" says "generate": a word for a change.

      What this check looks for
    Description, as the server wrote it
    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"]}

    Annotations the server declares

    • readOnlyHint: true
    • openWorldHint: false
    • idempotentHint: true
  • hashCompute a cryptographic hash of a string.No findings

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
    Description, as the server wrote it
    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.

    Annotations the server declares

    • readOnlyHint: true
    • openWorldHint: false
    • idempotentHint: true
  • hmacCompute an HMAC (RFC 2104) with SHA-256, SHA-1, SHA-384 or SHA-512 and return it in hex, Base64 and Base64url.No findings

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
    Description, as the server wrote it
    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.

    Annotations the server declares

    • readOnlyHint: true
    • openWorldHint: false
    • idempotentHint: true
  • html_beautifyPretty-print an HTML fragment.No findings

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
    Description, as the server wrote it
    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}

    Annotations the server declares

    • readOnlyHint: true
    • openWorldHint: false
    • idempotentHint: true
  • ip_convertConvert an IPv4 address between dotted-decimal, integer, binary, and hex forms.1 finding

    Why it is in this group

    • The name "ip_convert" says "convert": a word for a change.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.

    Findings

    • Warn

      The server marks "ip_convert" read-only (readOnlyHint: true), and its own name, description or input give the class "write".

      Matched text

      annotations: {"readOnlyHint":true,"idempotentHint":true,"openWorldHint":false}; The name "ip_convert" says "convert": a word for a change.

      What this check looks for
    Description, as the server wrote it
    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.

    Annotations the server declares

    • readOnlyHint: true
    • openWorldHint: false
    • idempotentHint: true
  • js_beautifyFormat 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 au…1 finding

    Why it is in this group

    • The input takes a statement or command to run (input.code), which can change anything it can reach.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.

    Findings

    • Warn

      The server marks "js_beautify" read-only (readOnlyHint: true), and its own name, description or input give the class "write".

      Matched text

      annotations: {"readOnlyHint":true,"idempotentHint":true,"openWorldHint":false}; The input takes a statement or command to run (input.code), which can change anything it can reach.

      What this check looks for
    Description, as the server wrote it
    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.

    Annotations the server declares

    • readOnlyHint: true
    • openWorldHint: false
    • idempotentHint: true
  • json_formatPretty-print a JSON string with a chosen indent size.No findings

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
    Description, as the server wrote it
    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.

    Annotations the server declares

    • readOnlyHint: true
    • openWorldHint: false
    • idempotentHint: true
  • json_to_csvConvert an array of JSON objects to CSV.1 finding

    Why it is in this group

    • The description's first verb is "convert": a word for a change.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.

    Findings

    • Warn

      The server marks "json_to_csv" read-only (readOnlyHint: true), and its own name, description or input give the class "write".

      Matched text

      annotations: {"readOnlyHint":true,"idempotentHint":true,"openWorldHint":false}; The description's first verb is "convert": a word for a change.

      What this check looks for
    Description, as the server wrote it
    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`).

    Annotations the server declares

    • readOnlyHint: true
    • openWorldHint: false
    • idempotentHint: true
  • json_to_yamlConvert a JSON string to YAML.1 finding

    Why it is in this group

    • The description's first verb is "convert": a word for a change.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.

    Findings

    • Warn

      The server marks "json_to_yaml" read-only (readOnlyHint: true), and its own name, description or input give the class "write".

      Matched text

      annotations: {"readOnlyHint":true,"idempotentHint":true,"openWorldHint":false}; The description's first verb is "convert": a word for a change.

      What this check looks for
    Description, as the server wrote it
    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.

    Annotations the server declares

    • readOnlyHint: true
    • openWorldHint: false
    • idempotentHint: true
  • jwt_decodeDecode a JWT and return its header + payload.No findings

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
    Description, as the server wrote it
    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.

    Annotations the server declares

    • readOnlyHint: true
    • openWorldHint: false
    • idempotentHint: true
  • lines_to_commaJoin lines with a separator (comma by default).No findings

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
    Description, as the server wrote it
    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}

    Annotations the server declares

    • readOnlyHint: true
    • openWorldHint: false
    • idempotentHint: true
  • lorem_ipsumGenerate placeholder lorem ipsum text.1 finding

    Why it is in this group

    • The description's first verb is "generate": a word for a change.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.

    Findings

    • Warn

      The server marks "lorem_ipsum" read-only (readOnlyHint: true), and its own name, description or input give the class "write".

      Matched text

      annotations: {"readOnlyHint":true,"idempotentHint":false,"openWorldHint":false}; The description's first verb is "generate": a word for a change.

      What this check looks for
    Description, as the server wrote it
    Generate placeholder lorem ipsum text. Returns: Lorem ipsum text of the requested size. Example input: {"unit":"paragraphs","count":2}

    Annotations the server declares

    • readOnlyHint: true
    • openWorldHint: false
    • idempotentHint: false
  • markdown_tableTurn CSV, TSV (spreadsheet paste) or an existing Markdown table into a GitHub Flavored Markdown table.No findings

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
    Description, as the server wrote it
    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.

    Annotations the server declares

    • readOnlyHint: true
    • openWorldHint: false
    • idempotentHint: true
  • morse_codeTranslate text to International Morse code (ITU-R M.1677-1) or Morse back to text.No findings

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
    Description, as the server wrote it
    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}

    Annotations the server declares

    • readOnlyHint: true
    • openWorldHint: false
    • idempotentHint: true
  • nato_phoneticSpell 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…No findings

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
    Description, as the server wrote it
    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}

    Annotations the server declares

    • readOnlyHint: true
    • openWorldHint: false
    • idempotentHint: true
  • password_generateGenerate a cryptographically random password.1 finding

    Why it is in this group

    • The name "password_generate" says "generate": a word for a change.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.

    Findings

    • Warn

      The server marks "password_generate" read-only (readOnlyHint: true), and its own name, description or input give the class "write".

      Matched text

      annotations: {"readOnlyHint":true,"idempotentHint":false,"openWorldHint":false}; The name "password_generate" says "generate": a word for a change.

      What this check looks for
    Description, as the server wrote it
    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).

    Annotations the server declares

    • readOnlyHint: true
    • openWorldHint: false
    • idempotentHint: false
  • password_strengthEstimate how guessable a password is with zxcvbn pattern matching (dictionary words, common passwords, keyboard walks, sequences, dates, l33t).No findings

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
    Description, as the server wrote it
    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.

    Annotations the server declares

    • readOnlyHint: true
    • openWorldHint: false
    • idempotentHint: true
  • random_emailGenerate random-looking (non-deliverable) test email addresses.1 finding

    Why it is in this group

    • The description's first verb is "generate": a word for a change.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.

    Findings

    • Warn

      The server marks "random_email" read-only (readOnlyHint: true), and its own name, description or input give the class "write".

      Matched text

      annotations: {"readOnlyHint":true,"idempotentHint":false,"openWorldHint":false}; The description's first verb is "generate": a word for a change.

      What this check looks for
    Description, as the server wrote it
    Generate random-looking (non-deliverable) test email addresses. Returns: JSON array of random email address strings. Example input: {"count":3,"domain":"example.com"}

    Annotations the server declares

    • readOnlyHint: true
    • openWorldHint: false
    • idempotentHint: false
  • random_nameGenerate random human names.1 finding

    Why it is in this group

    • The description's first verb is "generate": a word for a change.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.

    Findings

    • Warn

      The server marks "random_name" read-only (readOnlyHint: true), and its own name, description or input give the class "write".

      Matched text

      annotations: {"readOnlyHint":true,"idempotentHint":false,"openWorldHint":false}; The description's first verb is "generate": a word for a change.

      What this check looks for
    Description, as the server wrote it
    Generate random human names. Returns: JSON array of random human name strings. Example input: {"count":3}

    Annotations the server declares

    • readOnlyHint: true
    • openWorldHint: false
    • idempotentHint: false
  • random_numberGenerate cryptographically random numbers in a range.1 finding

    Why it is in this group

    • The description's first verb is "generate": a word for a change.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.

    Findings

    • Warn

      The server marks "random_number" read-only (readOnlyHint: true), and its own name, description or input give the class "write".

      Matched text

      annotations: {"readOnlyHint":true,"idempotentHint":false,"openWorldHint":false}; The description's first verb is "generate": a word for a change.

      What this check looks for
    Description, as the server wrote it
    Generate cryptographically random numbers in a range. Returns: JSON array of generated numbers. Example input: {"min":1,"max":100,"count":5,"mode":"integer"}

    Annotations the server declares

    • readOnlyHint: true
    • openWorldHint: false
    • idempotentHint: false
  • readabilityScore 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 …No findings

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
    Description, as the server wrote it
    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}

    Annotations the server declares

    • readOnlyHint: true
    • openWorldHint: false
    • idempotentHint: true
  • redirect_rulesGenerate 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.1 finding

    Why it is in this group

    • The description's first verb is "generate": a word for a change.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.

    Findings

    • Warn

      The server marks "redirect_rules" read-only (readOnlyHint: true), and its own name, description or input give the class "write".

      Matched text

      annotations: {"readOnlyHint":true,"idempotentHint":true,"openWorldHint":false}; The description's first verb is "generate": a word for a change.

      What this check looks for
    Description, as the server wrote it
    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"}

    Annotations the server declares

    • readOnlyHint: true
    • openWorldHint: false
    • idempotentHint: true
  • regex_testTest a regular expression against text.No findings

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
    Description, as the server wrote it
    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.

    Annotations the server declares

    • readOnlyHint: true
    • openWorldHint: false
    • idempotentHint: true
  • run_calculatorRun 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, geomet…1 finding

    Why it is in this group

    • The name "run_calculator" says "run": a word for a change.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.

    Findings

    • Warn

      The server marks "run_calculator" read-only (readOnlyHint: true), and its own name, description or input give the class "write".

      Matched text

      annotations: {"readOnlyHint":true,"idempotentHint":true,"openWorldHint":false}; The name "run_calculator" says "run": a word for a change.

      What this check looks for
    Description, as the server wrote it
    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":{}}

    Annotations the server declares

    • readOnlyHint: true
    • openWorldHint: false
    • idempotentHint: true
  • simple_interestCompute simple interest: I = P × r × t.No findings

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
    Description, as the server wrote it
    Compute simple interest: I = P × r × t. Returns: JSON { interest, total } computed as P·r·t. Example input: {"principal":10000,"annualRatePercent":5,"years":3}

    Annotations the server declares

    • readOnlyHint: true
    • openWorldHint: false
    • idempotentHint: true
  • slugifyConvert text to a URL-safe slug.1 finding

    Why it is in this group

    • The description's first verb is "convert": a word for a change.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.

    Findings

    • Warn

      The server marks "slugify" read-only (readOnlyHint: true), and its own name, description or input give the class "write".

      Matched text

      annotations: {"readOnlyHint":true,"idempotentHint":true,"openWorldHint":false}; The description's first verb is "convert": a word for a change.

      What this check looks for
    Description, as the server wrote it
    Convert text to a URL-safe slug. Returns: URL-safe slug (lowercase, dashes). Example input: {"text":"Hello, World! 2026"}

    Annotations the server declares

    • readOnlyHint: true
    • openWorldHint: false
    • idempotentHint: true
  • sql_beautifyFormat a SQL query with keyword uppercasing and line breaks before major clauses.1 finding

    Why it is in this group

    • The input takes a statement or command to run (input.sql), which can change anything it can reach.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.

    Findings

    • Warn

      The server marks "sql_beautify" read-only (readOnlyHint: true), and its own name, description or input give the class "write".

      Matched text

      annotations: {"readOnlyHint":true,"idempotentHint":true,"openWorldHint":false}; The input takes a statement or command to run (input.sql), which can change anything it can reach.

      What this check looks for
    Description, as the server wrote it
    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"}

    Annotations the server declares

    • readOnlyHint: true
    • openWorldHint: false
    • idempotentHint: true
  • subnet_calculatorGiven a CIDR block (e.g.No findings

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
    Description, as the server wrote it
    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.

    Annotations the server declares

    • readOnlyHint: true
    • openWorldHint: false
    • idempotentHint: true
  • tsv_parseParse tab-separated values into JSON.No findings

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
    Description, as the server wrote it
    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.

    Annotations the server declares

    • readOnlyHint: true
    • openWorldHint: false
    • idempotentHint: true
  • url_decodePercent-decode a URL-encoded string.No findings

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
    Description, as the server wrote it
    Percent-decode a URL-encoded string. Returns: Percent-decoded plain text. Example input: {"text":"hello%20world%20%26%20friends"}

    Annotations the server declares

    • readOnlyHint: true
    • openWorldHint: false
    • idempotentHint: true
  • url_encodePercent-encode a string for use in URLs.No findings

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
    Description, as the server wrote it
    Percent-encode a string for use in URLs. Returns: Percent-encoded string suitable for URL query values. Example input: {"text":"hello world & friends"}

    Annotations the server declares

    • readOnlyHint: true
    • openWorldHint: false
    • idempotentHint: true
  • user_agent_parseParse 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.No findings

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
    Description, as the server wrote it
    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"}

    Annotations the server declares

    • readOnlyHint: true
    • openWorldHint: false
    • idempotentHint: true
  • utm_buildAdd Google Analytics UTM parameters (utm_source, utm_medium, utm_campaign, utm_id, utm_term, utm_content) to a landing page URL.Can send data out1 finding

    Why it is in this group

    • The description's first verb is "add": a word for a change.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.

    What it can reach

    • outboundThe input takes a URL (input.url): a request to a URL can carry data to whoever runs it.

    Findings

    • Warn

      The server marks "utm_build" read-only (readOnlyHint: true), and its own name, description or input give the class "write".

      Matched text

      annotations: {"readOnlyHint":true,"idempotentHint":true,"openWorldHint":false}; The description's first verb is "add": a word for a change.

      What this check looks for
    Description, as the server wrote it
    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"}

    Annotations the server declares

    • readOnlyHint: true
    • openWorldHint: false
    • idempotentHint: true
  • uuid_generateGenerate one or more v4 UUIDs.1 finding

    Why it is in this group

    • The name "uuid_generate" says "generate": a word for a change.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.

    Findings

    • Warn

      The server marks "uuid_generate" read-only (readOnlyHint: true), and its own name, description or input give the class "write".

      Matched text

      annotations: {"readOnlyHint":true,"openWorldHint":false}; The name "uuid_generate" says "generate": a word for a change.

      What this check looks for
    Description, as the server wrote it
    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.

    Annotations the server declares

    • readOnlyHint: true
    • openWorldHint: false
  • xml_beautifyPretty-print an XML document.No findings

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
    Description, as the server wrote it
    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}

    Annotations the server declares

    • readOnlyHint: true
    • openWorldHint: false
    • idempotentHint: true
  • yaml_beautifyNormalize YAML indentation and whitespace.No findings

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
    Description, as the server wrote it
    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"}

    Annotations the server declares

    • readOnlyHint: true
    • openWorldHint: false
    • idempotentHint: true
  • yaml_to_jsonConvert simple YAML (maps, lists, scalars, flow {} / []) to JSON.1 finding

    Why it is in this group

    • The description's first verb is "convert": a word for a change.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.

    Findings

    • Warn

      The server marks "yaml_to_json" read-only (readOnlyHint: true), and its own name, description or input give the class "write".

      Matched text

      annotations: {"readOnlyHint":true,"idempotentHint":true,"openWorldHint":false}; The description's first verb is "convert": a word for a change.

      What this check looks for
    Description, as the server wrote it
    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.

    Annotations the server declares

    • readOnlyHint: true
    • openWorldHint: false
    • idempotentHint: true
Only reads 17Show 17 read-only tools
  • cron_validateValidate a standard 5-field cron expression (minute hour day month weekday).No findings

    Why it is in this group

    • The name "cron_validate" says "validate": a word for reading.
    Description, as the server wrote it
    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.

    Annotations the server declares

    • readOnlyHint: true
    • openWorldHint: false
    • idempotentHint: true
  • date_diffCompute the difference between two ISO 8601 timestamps in days, hours, minutes, and seconds.No findings

    Why it is in this group

    • The name "date_diff" says "diff": a word for reading.
    Description, as the server wrote it
    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.

    Annotations the server declares

    • readOnlyHint: true
    • openWorldHint: false
    • idempotentHint: true
  • find_duplicate_entriesReturn lines that appear more than once in the input, with their occurrence counts.No findings

    Why it is in this group

    • The name "find_duplicate_entries" says "find": a word for reading.
    Description, as the server wrote it
    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"}

    Annotations the server declares

    • readOnlyHint: true
    • openWorldHint: false
    • idempotentHint: true
  • get_toolGet full metadata for a specific RedBison tool by its id (slug).No findings

    Why it is in this group

    • The name "get_tool" says "get": a word for reading.
    Description, as the server wrote it
    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"}

    Annotations the server declares

    • readOnlyHint: true
    • openWorldHint: false
    • idempotentHint: true
  • hash_compareHash two inputs with the same algorithm and compare them in constant time.No findings

    Why it is in this group

    • The name "hash_compare" says "compare": a word for reading.
    Description, as the server wrote it
    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.

    Annotations the server declares

    • readOnlyHint: true
    • openWorldHint: false
    • idempotentHint: true
  • healthReturn server status, name, version, and uptime info.No findings

    Why it is in this group

    • The description's first verb is "return": a word for reading.
    Description, as the server wrote it
    Return server status, name, version, and uptime info. Use this to monitor the MCP server. Returns: JSON { status, name, version, startedAt, timestamp }. Example input: {}

    Annotations the server declares

    • readOnlyHint: true
    • openWorldHint: false
    • idempotentHint: true
  • helpExplain how to use any RedBison MCP tool, with its input schema, a sample input and the sample output it produces.No findings

    Why it is in this group

    • The description's first verb is "explain": a word for reading.
    Description, as the server wrote it
    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"}

    Annotations the server declares

    • readOnlyHint: true
    • openWorldHint: false
    • idempotentHint: true
  • http_statusLook up HTTP status codes: meaning, defining RFC section (RFC 9110 and others from the IANA registry), when to send it and common pitfalls.Reads text others writeNo findings

    Why it is in this group

    • The name "http_status" says "status": a word for reading.

    What it can reach

    • untrusted-inputThe name "http_status" says "status" and "http": it reads web pages, which anyone can write.
    • untrusted-inputThe description's first sentence says "http": it reads web pages, which anyone can write.
    Description, as the server wrote it
    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"}

    Annotations the server declares

    • readOnlyHint: true
    • openWorldHint: false
    • idempotentHint: true
  • json_schema_validateValidate 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,…No findings

    Why it is in this group

    • The name "json_schema_validate" says "validate": a word for reading.
    Description, as the server wrote it
    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`.

    Annotations the server declares

    • readOnlyHint: true
    • openWorldHint: false
    • idempotentHint: true
  • json_validateValidate a JSON string.No findings

    Why it is in this group

    • The name "json_validate" says "validate": a word for reading.
    Description, as the server wrote it
    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`.

    Annotations the server declares

    • readOnlyHint: true
    • openWorldHint: false
    • idempotentHint: true
  • list_calculatorsList the calculators that run_calculator can execute (finance, health, maths, statistics, construction, science, everyday and engineering), with each one's inputs, units, defaults …No findings

    Why it is in this group

    • The name "list_calculators" says "list": a word for reading.
    Description, as the server wrote it
    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}

    Annotations the server declares

    • readOnlyHint: true
    • openWorldHint: false
    • idempotentHint: true
  • list_categoriesList all tool categories and subcategories available on RedBison.No findings

    Why it is in this group

    • The name "list_categories" says "list": a word for reading.
    Description, as the server wrote it
    List all tool categories and subcategories available on RedBison. Returns: JSON array of { category, count } entries covering the full RedBison catalog. Example input: {}

    Annotations the server declares

    • readOnlyHint: true
    • openWorldHint: false
    • idempotentHint: true
  • list_compareCompare two newline-separated lists.No findings

    Why it is in this group

    • The name "list_compare" says "list": a word for reading.
    Description, as the server wrote it
    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"}

    Annotations the server declares

    • readOnlyHint: true
    • openWorldHint: false
    • idempotentHint: true
  • mime_lookupFind the MIME (media) type for a file extension or file name, or the extensions for a MIME type.Reads private dataNo findings

    Why it is in this group

    • The name "mime_lookup" says "lookup": a word for reading.

    What it can reach

    • private-dataThe description's first sentence says "find" and "file": it reads files.
    Description, as the server wrote it
    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"}

    Annotations the server declares

    • readOnlyHint: true
    • openWorldHint: false
    • idempotentHint: true
  • search_toolsSearch RedBison's 500+ tools by keyword: developer utilities, file and media converters, and finance, health, math and engineering calculators.Reads private dataNo findings

    Why it is in this group

    • The name "search_tools" says "search": a word for reading.

    What it can reach

    • private-dataThe description's first sentence says "search" and "file": it reads files.
    Description, as the server wrote it
    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}

    Annotations the server declares

    • readOnlyHint: true
    • openWorldHint: false
    • idempotentHint: true
  • text_diffCompute a line-level diff between two strings.No findings

    Why it is in this group

    • The name "text_diff" says "diff": a word for reading.
    Description, as the server wrote it
    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"}

    Annotations the server declares

    • readOnlyHint: true
    • openWorldHint: false
    • idempotentHint: true
  • word_countCount 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 agai…Reads text others writeNo findings

    Why it is in this group

    • The name "word_count" says "count": a word for reading.

    What it can reach

    • untrusted-inputThe description's first sentence says "count" and "post": it reads posts, which other people can write.
    Description, as the server wrote it
    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}

    Annotations the server declares

    • readOnlyHint: true
    • openWorldHint: false
    • idempotentHint: true

This is not a safety rating, and no finding is not a safety guarantee. The groups and findings come from fixed checks of the tool definitions the server returned on the date shown, not from its code or what it does when called. How the checks work.

Exfil surface

Which tools read private data, which read text someone else can write, and which can send data out. One of each is a path a prompt injection can use.

12 paths in this server alone from private data, through text someone else wrote, to a way out. Denying 2 untrusted-input tools breaks every one.

Reads private data2
Reads files, mail, messages, databases, secrets, calendars or repositories.
Reads text others write2
Brings in text someone else can write: web pages, inbound email, messages, issues and comments.
Can send data out3
Can carry data to people or systems: it sends, posts or publishes, or takes a recipient, channel or URL.
deny to break every path
{
  "permissions": {
    "deny": [
      "mcp__redbison__http_status",
      "mcp__redbison__word_count"
    ]
  }
}

Other servers in the same agent add their own tools to these paths. Audit your whole setup to see them together.

Findings

Matches of fixed checks, with the text they matched.

2 high29 warn
  • The description refers to ".env".

    Matched text

    description: "...["node","macos","vscode"],"testPaths":[".env","node_modules/x.js",".vscode/settings...."

    What this check looks for
  • The input schema at properties.testPaths.description refers to ".env".

    Matched text

    inputSchema.properties.testPaths.description: "...ository-relative paths to check, e.g. ['.env', 'dist/']. End with / for a directory."

    What this check looks for
  • The server marks "json_to_csv" read-only (readOnlyHint: true), and its own name, description or input give the class "write".

    Matched text

    annotations: {"readOnlyHint":true,"idempotentHint":true,"openWorldHint":false}; The description's first verb is "convert": a word for a change.

    What this check looks for
  • The server marks "json_to_yaml" read-only (readOnlyHint: true), and its own name, description or input give the class "write".

    Matched text

    annotations: {"readOnlyHint":true,"idempotentHint":true,"openWorldHint":false}; The description's first verb is "convert": a word for a change.

    What this check looks for
  • The server marks "yaml_to_json" read-only (readOnlyHint: true), and its own name, description or input give the class "write".

    Matched text

    annotations: {"readOnlyHint":true,"idempotentHint":true,"openWorldHint":false}; The description's first verb is "convert": a word for a change.

    What this check looks for
  • The server marks "sql_beautify" read-only (readOnlyHint: true), and its own name, description or input give the class "write".

    Matched text

    annotations: {"readOnlyHint":true,"idempotentHint":true,"openWorldHint":false}; The input takes a statement or command to run (input.sql), which can change anything it can reach.

    What this check looks for
Show 25 more findings
  • The server marks "slugify" read-only (readOnlyHint: true), and its own name, description or input give the class "write".

    Matched text

    annotations: {"readOnlyHint":true,"idempotentHint":true,"openWorldHint":false}; The description's first verb is "convert": a word for a change.

    What this check looks for
  • The server marks "case_convert" read-only (readOnlyHint: true), and its own name, description or input give the class "write".

    Matched text

    annotations: {"readOnlyHint":true,"idempotentHint":true,"openWorldHint":false}; The name "case_convert" says "convert": a word for a change.

    What this check looks for
  • The server marks "remove_duplicate_lines" read-only (readOnlyHint: true), and its own name, description or input give the class "destructive".

    Matched text

    annotations: {"readOnlyHint":true,"idempotentHint":true,"openWorldHint":false}; The name "remove_duplicate_lines" says "remove": a word for removing or ending something.

    What this check looks for
  • The server marks "remove_extra_spaces" read-only (readOnlyHint: true), and its own name, description or input give the class "destructive".

    Matched text

    annotations: {"readOnlyHint":true,"idempotentHint":true,"openWorldHint":false}; The name "remove_extra_spaces" says "remove": a word for removing or ending something.

    What this check looks for
  • The server marks "remove_empty_lines" read-only (readOnlyHint: true), and its own name, description or input give the class "destructive".

    Matched text

    annotations: {"readOnlyHint":true,"idempotentHint":true,"openWorldHint":false}; The name "remove_empty_lines" says "remove": a word for removing or ending something.

    What this check looks for
  • The server marks "uuid_generate" read-only (readOnlyHint: true), and its own name, description or input give the class "write".

    Matched text

    annotations: {"readOnlyHint":true,"openWorldHint":false}; The name "uuid_generate" says "generate": a word for a change.

    What this check looks for
  • The server marks "password_generate" read-only (readOnlyHint: true), and its own name, description or input give the class "write".

    Matched text

    annotations: {"readOnlyHint":true,"idempotentHint":false,"openWorldHint":false}; The name "password_generate" says "generate": a word for a change.

    What this check looks for
  • The server marks "ip_convert" read-only (readOnlyHint: true), and its own name, description or input give the class "write".

    Matched text

    annotations: {"readOnlyHint":true,"idempotentHint":true,"openWorldHint":false}; The name "ip_convert" says "convert": a word for a change.

    What this check looks for
  • The server marks "epoch_convert" read-only (readOnlyHint: true), and its own name, description or input give the class "write".

    Matched text

    annotations: {"readOnlyHint":true,"idempotentHint":true,"openWorldHint":false}; The name "epoch_convert" says "convert": a word for a change.

    What this check looks for
  • The server marks "timezone_convert" read-only (readOnlyHint: true), and its own name, description or input give the class "irreversible".

    Matched text

    annotations: {"readOnlyHint":true,"idempotentHint":true,"openWorldHint":false}; The name "timezone_convert" says "convert": a word for a change.

    What this check looks for
  • The server marks "color_convert" read-only (readOnlyHint: true), and its own name, description or input give the class "write".

    Matched text

    annotations: {"readOnlyHint":true,"idempotentHint":true,"openWorldHint":false}; The name "color_convert" says "convert": a word for a change.

    What this check looks for
  • The server marks "random_name" read-only (readOnlyHint: true), and its own name, description or input give the class "write".

    Matched text

    annotations: {"readOnlyHint":true,"idempotentHint":false,"openWorldHint":false}; The description's first verb is "generate": a word for a change.

    What this check looks for
  • The server marks "random_email" read-only (readOnlyHint: true), and its own name, description or input give the class "write".

    Matched text

    annotations: {"readOnlyHint":true,"idempotentHint":false,"openWorldHint":false}; The description's first verb is "generate": a word for a change.

    What this check looks for
  • The server marks "random_number" read-only (readOnlyHint: true), and its own name, description or input give the class "write".

    Matched text

    annotations: {"readOnlyHint":true,"idempotentHint":false,"openWorldHint":false}; The description's first verb is "generate": a word for a change.

    What this check looks for
  • The server marks "lorem_ipsum" read-only (readOnlyHint: true), and its own name, description or input give the class "write".

    Matched text

    annotations: {"readOnlyHint":true,"idempotentHint":false,"openWorldHint":false}; The description's first verb is "generate": a word for a change.

    What this check looks for
  • The server marks "run_calculator" read-only (readOnlyHint: true), and its own name, description or input give the class "write".

    Matched text

    annotations: {"readOnlyHint":true,"idempotentHint":true,"openWorldHint":false}; The name "run_calculator" says "run": a word for a change.

    What this check looks for
  • The server marks "barcode_check_digit" read-only (readOnlyHint: true), and its own name, description or input give the class "write".

    Matched text

    annotations: {"readOnlyHint":true,"idempotentHint":true,"openWorldHint":false}; The input takes a statement or command to run (input.code), which can change anything it can reach.

    What this check looks for
  • The server marks "chmod_convert" read-only (readOnlyHint: true), and its own name, description or input give the class "write".

    Matched text

    annotations: {"readOnlyHint":true,"idempotentHint":true,"openWorldHint":false}; The name "chmod_convert" says "convert": a word for a change.

    What this check looks for
  • The server marks "curl_to_code" read-only (readOnlyHint: true), and its own name, description or input give the class "write".

    Matched text

    annotations: {"readOnlyHint":true,"idempotentHint":true,"openWorldHint":false}; The description's first verb is "convert": a word for a change.

    What this check looks for
  • The server marks "docker_run_to_compose" read-only (readOnlyHint: true), and its own name, description or input give the class "write".

    Matched text

    annotations: {"readOnlyHint":true,"idempotentHint":true,"openWorldHint":false}; The name "docker_run_to_compose" says "run": a word for a change.

    What this check looks for
  • The server marks "gitignore_generate" read-only (readOnlyHint: true), and its own name, description or input give the class "write".

    Matched text

    annotations: {"readOnlyHint":true,"idempotentHint":true,"openWorldHint":false}; The name "gitignore_generate" says "generate": a word for a change.

    What this check looks for
  • The server marks "js_beautify" read-only (readOnlyHint: true), and its own name, description or input give the class "write".

    Matched text

    annotations: {"readOnlyHint":true,"idempotentHint":true,"openWorldHint":false}; The input takes a statement or command to run (input.code), which can change anything it can reach.

    What this check looks for
  • The server marks "redirect_rules" read-only (readOnlyHint: true), and its own name, description or input give the class "write".

    Matched text

    annotations: {"readOnlyHint":true,"idempotentHint":true,"openWorldHint":false}; The description's first verb is "generate": a word for a change.

    What this check looks for
  • The server marks "toml_convert" read-only (readOnlyHint: true), and its own name, description or input give the class "irreversible".

    Matched text

    annotations: {"readOnlyHint":true,"idempotentHint":true,"openWorldHint":false}; The name "toml_convert" says "convert": a word for a change.

    What this check looks for
  • The server marks "utm_build" read-only (readOnlyHint: true), and its own name, description or input give the class "write".

    Matched text

    annotations: {"readOnlyHint":true,"idempotentHint":true,"openWorldHint":false}; The description's first verb is "add": a word for a change.

    What this check looks for

History

Changes to its tool definitions and to its remote endpoint, newest first.

No change seen yet. Its tools are rescanned every day, and a remote endpoint is looked at once a week.

Install

Pinned to version 2.1.0. Values in angle brackets are yours to fill in.

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

Run in a terminal.

Claude Code permissions

Allow the reads, ask before a change or a way out, deny the deletes. Paste into .claude/settings.json.

.claude/settings.json
{
  "permissions": {
    "allow": [
      "mcp__redbison__search_tools",
      "mcp__redbison__get_tool",
      "mcp__redbison__list_categories",
      "mcp__redbison__health",
      "mcp__redbison__json_validate",
      "mcp__redbison__find_duplicate_entries",
      "mcp__redbison__hash_compare",
      "mcp__redbison__date_diff",
      "mcp__redbison__cron_validate",
      "mcp__redbison__text_diff",
      "mcp__redbison__list_compare",
      "mcp__redbison__list_calculators",
      "mcp__redbison__http_status",
      "mcp__redbison__json_schema_validate",
      "mcp__redbison__mime_lookup",
      "mcp__redbison__word_count",
      "mcp__redbison__help"
    ],
    "ask": [
      "mcp__redbison__base64_encode",
      "mcp__redbison__base64_decode",
      "mcp__redbison__url_encode",
      "mcp__redbison__url_decode",
      "mcp__redbison__json_format",
      "mcp__redbison__csv_to_json",
      "mcp__redbison__json_to_csv",
      "mcp__redbison__json_to_yaml",
      "mcp__redbison__yaml_to_json",
      "mcp__redbison__tsv_parse",
      "mcp__redbison__html_beautify",
      "mcp__redbison__xml_beautify",
      "mcp__redbison__yaml_beautify",
      "mcp__redbison__sql_beautify",
      "mcp__redbison__slugify",
      "mcp__redbison__case_convert",
      "mcp__redbison__escape_characters",
      "mcp__redbison__lines_to_comma",
      "mcp__redbison__comma_to_lines",
      "mcp__redbison__jwt_decode",
      "mcp__redbison__hash",
      "mcp__redbison__uuid_generate",
      "mcp__redbison__password_generate",
      "mcp__redbison__bcrypt_hash",
      "mcp__redbison__bcrypt_verify",
      "mcp__redbison__subnet_calculator",
      "mcp__redbison__ip_convert",
      "mcp__redbison__epoch_convert",
      "mcp__redbison__timezone_convert",
      "mcp__redbison__regex_test",
      "mcp__redbison__color_convert",
      "mcp__redbison__contrast_check",
      "mcp__redbison__css_gradient",
      "mcp__redbison__random_name",
      "mcp__redbison__random_email",
      "mcp__redbison__random_number",
      "mcp__redbison__lorem_ipsum",
      "mcp__redbison__emi_calculate",
      "mcp__redbison__simple_interest",
      "mcp__redbison__compound_interest",
      "mcp__redbison__bmi_calculate",
      "mcp__redbison__run_calculator",
      "mcp__redbison__ascii_art_text",
      "mcp__redbison__barcode_check_digit",
      "mcp__redbison__chmod_convert",
      "mcp__redbison__color_palette",
      "mcp__redbison__cron_build",
      "mcp__redbison__css_beautify",
      "mcp__redbison__curl_to_code",
      "mcp__redbison__docker_run_to_compose",
      "mcp__redbison__gitignore_generate",
      "mcp__redbison__hmac",
      "mcp__redbison__js_beautify",
      "mcp__redbison__markdown_table",
      "mcp__redbison__morse_code",
      "mcp__redbison__nato_phonetic",
      "mcp__redbison__password_strength",
      "mcp__redbison__readability",
      "mcp__redbison__redirect_rules",
      "mcp__redbison__toml_convert",
      "mcp__redbison__user_agent_parse",
      "mcp__redbison__utm_build"
    ],
    "deny": [
      "mcp__redbison__remove_duplicate_lines",
      "mcp__redbison__remove_extra_spaces",
      "mcp__redbison__remove_empty_lines"
    ]
  }
}

Tools that only read are allowed, tools that change things ask first, tools that delete or cancel are denied. A read that can send data out (it takes a URL, say) asks first too. It assumes the server is installed as redbison. Review it before you use it.

Capability tags behind 7 rules
  • mcp__redbison__search_tools private-data
  • mcp__redbison__timezone_convert outbound
  • mcp__redbison__http_status untrusted-input
  • mcp__redbison__mime_lookup private-data
  • mcp__redbison__toml_convert outbound
  • mcp__redbison__utm_build outbound
  • mcp__redbison__word_count untrusted-input

Pin

Keep the decision: fail CI when the tools change, follow every change, or show a badge.

Pin in CI

Fail a build when the tools you reviewed are not the tools the server serves today.

curl -s "https://anlyon.dev/api/v1/servers/dev.redbison/mcp/verify?hash=8a1ca2a3ab249f13c342e627003208d7b8fe9dbc9e44b0a7cdf0550a3bbf780f" | jq -e '.changed == false'

Pinned hash 8a1ca2a3ab24, from Oct 29, 2026, 22:19 UTC.

Watch

Get told when its tools change: a new tool, a new description, a new class.

https://anlyon.dev/servers/dev.redbison/mcp/changes.xml

An Atom feed. Works in any feed reader or Slack's RSS app.

Badge

anlyon.dev badge for dev.redbison/mcp
[![anlyon.dev](https://anlyon.dev/badge/dev.redbison/mcp.svg)](https://anlyon.dev/servers/dev.redbison/mcp)

Source: MCP Registry. Synced Oct 29, 2026, 23:17 UTC.