# FindUtils MCP [Health: Active]

**Category:** 💻 Developer Tools  
**Repository:** https://mcp.findutils.com/  
**Views:** 1  
**Installs:** 0  
**Upvotes:** 0  
**Directory Page:** https://allmcps.com/mcp/findutils-mcp

## Description
Remote MCP server exposing 388 FindUtils tools (JSON/YAML/CSV, encoding, hashing, converters, generators) to AI agents.

## Tools
Capabilities this server exposes over MCP:

- **invoice_generate** — Generate a professional PDF invoice. Returns a base64-encoded PDF. Supports line items, tax, discounts, notes, and full sender/recipient details.
- **a2ui_spec** — Returns A2UI protocol documentation for a given spec version and section. Sections: protocol, components, data-binding, actions, catalogs, custom-functions, renderers, renderer-contract, transports, mcp-apps, agents, sdk-architecture, ecosystem. Use this when authoring A2UI payloads to get authoritative reference material without guessing.
- **a2ui_basic_catalog** — Returns the authoritative basic-catalog JSON Schema (components, functions, theme) for the requested A2UI version. Use this to validate agent output or bootstrap a custom catalog.
- **a2ui_examples** — Returns one or more canonical A2UI JSONL examples matching a pattern (form, list, wizard, modal, chat, dashboard, checkout, typeahead, mcp-card, multi-surface, theme-*). Use these as few-shot examples when prompting an LLM to generate A2UI.
- **a2ui_diff** — Computes a structural diff between two A2UI JSONL payloads: surfaces added/removed, components added/removed/changed (by id), data-model path-level changes. Use this to understand what an agent turn changed in a surface, or to verify that a refactor kept behaviour identical.
- **a2ui_prompt** — Generates a drop-in LLM system prompt that teaches the model to output valid A2UI JSONL: includes the basic-catalog component / function list, the hard rules (one root, IDs not inline, paths start with "/"), and the requested few-shot examples. Feed the returned string straight into your chat-completion call's system role.
- **a2ui_validate** — Validates a JSONL A2UI payload against the basic catalog (or a custom catalog) and returns any errors, warnings, or info messages with exact line numbers. Call this on every LLM-generated payload before sending to the client.
- **pdf_extract** — PDF Text Extractor. Extract text and structured JSON (with bounding boxes) from a PDF. Accepts either a public https:// URL pointing to a PDF, or a base64-encoded PDF string. Base64 always works; some sites refuse requests that come from a server (HTTP 403), so send those files as base64. The PDF is parsed with WebAssembly and its bytes are not logged. Best for documents under 10MB.
- **age_calculate** — Calculate age from a date of birth — years, months, days, plus totals in days, weeks, and months. Accepts ISO 8601 or anything Date.parse handles.
- **ai_model_picker** — Return the best-matching AI coding models (top 3 by default) for a project, scored on speed, accuracy, cost and context window from four answers: what you build, primary language, top priority and project complexity. Model data comes from the live FindUtils model catalog.
- **amortization_calculator** — Return a full loan amortization schedule (one row per month with payment, principal, interest, extra payment, balance) plus totals, interest saved, months saved, and the payoff month. Rate is a yearly percentage; payments are monthly.
- **api_docs_generator** — Return API documentation generated from a list of endpoints, as Markdown (with table of contents, request/response examples) or as an OpenAPI 3.0.3 JSON specification.
- **aspect_ratio** — Compute the aspect ratio of width:height. Optionally scale to a new width or height.
- **ass_to_srt** — Flatten an Advanced SubStation Alpha (.ass) or SubStation Alpha (.ssa) subtitle script to plain SubRip (.srt). Reads the Dialogue lines of the [Events] section using the Format line for column order, converts H:MM:SS.cc centisecond timestamps to HH:MM:SS,mmm, strips every {\...} override block, turns \N into a line break, sorts cues by start time and renumbers them from 1. Styles, fonts, colours, positioning and drawing commands are discarded on purpose, because SubRip cannot carry them. Comment lines are ignored.
- **attendance_sheet_generator** — Generate a blank attendance sheet for a list of students over consecutive days and return the date columns, a CSV, a Markdown table, and a plain-text grid. Dates are consecutive calendar days from start_date (UTC), labelled like "Mon, Mar 2".
- **auto_loan_calculator** — Return the monthly car payment, total interest, financed amount, and a month-by-month amortization schedule for an auto loan. Accounts for down payment, trade-in value, and sales tax (optionally financed). Rate is a yearly percentage.
- **avatar_generator** — Make an avatar as an SVG from a name or an email address, with no external service. Initials mode draws up to two initials on a background colour derived from the input; identicon mode draws a mirrored 5×5 block pattern. Both are seeded from a SHA-256 of the trimmed, lower-cased input, so the same input always gives the same avatar. Returns the SVG, a data: URL, the colours and the initials or the grid.
- **barcode_generator** — Generate a 1D barcode as an SVG string from text. CODE128 takes any printable ASCII, CODE39 takes A-Z, 0-9, space and -.$/+%. EAN13, EAN8 and UPC (UPC-A) take digits: give 12, 7 or 11 digits and the GS1 check digit is appended, or the full code and it is verified. Returns the SVG, the bar/space bit pattern, the printed text, and the image size.
- **base32_decode** — Decode RFC 4648 base32 back to UTF-8 text. Case-insensitive; padding "=" optional.
- **base32_encode** — Encode UTF-8 text to RFC 4648 base32 (uppercase, "=" padding). Useful for TOTP secrets and case-insensitive identifiers.
- **base64_decode** — Decode a base64 string back to UTF-8 text.
- **base64_encode** — Encode UTF-8 text as a base64 string.
- **bmi_calculate** — Compute Body Mass Index (BMI) with metric (kg/cm) or imperial (lb/in) units.
- **body_fat_calculator** — Estimate body fat percentage, fat mass, lean mass, BMI, and a body-composition category. Four methods: the U.S. Navy circumference method (waist, neck, hip), a BMI-based estimate (Deurenberg), and the Jackson-Pollock 3-site and 7-site skinfold equations with Siri conversion. Metric (kg/cm) or imperial (lbs/in) inputs; skinfolds are always millimetres.
- **bookmarks_diff** — Compare two Netscape bookmarks.html exports (before and after) and list the links that were added, removed, or changed. Links are matched by address the way dedupe_bookmarks compares them: host case, default port and trailing slash folded, and by default utm_* / fbclid / gclid parameters and the #fragment ignored. A match is "changed" when its title differs or, with compare_folders (default true), when it sits in a different folder. Returns counts, one entry per difference, a CSV report, and the added and removed links as importable bookmarks.html files. An address saved twice on one side is compared once, by its first copy. No link is fetched.
- **bookmarks_html_to_csv** — Convert a browser bookmarks.html export from Chrome, Firefox, Edge, Safari or any other browser that writes the Netscape bookmark format into CSV, one row per link. Each row carries the folder path flattened with " / ", the title, the URL, and the ADD_DATE and LAST_MODIFIED stamps as ISO-8601 when the export has them. Favicon data stored in the ICON attribute is never written to the CSV and no favicon is ever fetched. Nothing is checked against the network, so a dead link is reported exactly as the export stored it. The browser page accepts a 10 MB file; the API and MCP surfaces cap a request at 1 MB, so a very large export belongs on the page.
- **bookmarks_html_to_markdown** — Convert a browser bookmarks.html export (the Netscape bookmark format Chrome, Firefox, Edge and Safari write) into Markdown for Notion, Obsidian or a README. In the default "headings" style each folder becomes an ATX heading nested by depth (## for a top-level folder, ### below it, up to ######) and each bookmark a "- [title](url)" line under its folder, in the order the export lists them; "list" style writes one flat bullet list with the folder path before each link. The document starts with a # heading named after the export (or the title argument), and front_matter adds a YAML block with that title. A bookmark with no title is named after its host. Entities are decoded, Markdown characters in titles are escaped, favicon data is never written, and no link is fetched. An ordinary web page is refused: it has links but no bookmark folder structure.
- **bookmarks_json_to_html** — Convert a bookmarks JSON file into a Netscape bookmarks.html that Chrome, Firefox, Edge and Safari import. Reads three shapes: the Chromium profile file named Bookmarks (Chrome, Edge, Brave; no extension; roots.bookmark_bar / other / synced, date_added in microseconds since 1601), a Firefox JSON backup (text/x-moz-place containers with uri and dateAdded in microseconds since 1970), and a plain tree of {title|name, url|uri|href, children} objects or an array of them. Folder nesting and root folders are kept, dates are converted to the Unix seconds bookmarks.html uses, entries with no address and separators are skipped and counted. Other formats are refused, and nothing is fetched.
- **bot_crawl_checker** — Return which of 24 well-known crawlers (Googlebot, BingBot, GPTBot, ClaudeBot, PerplexityBot, AhrefsBot, Twitterbot and more) are allowed or blocked for a URL by the site's robots.txt, with the matching rule and user-agent group per bot.
- **box_shadow_generator** — Generate a CSS box-shadow declaration from offset, blur, spread, colour, opacity, and inset settings, or from a named preset (subtle, soft, medium, large, xl, inner, glow, hard). Returns the full "box-shadow: ...;" rule, the bare value, the rgba colour, and the resolved settings.
- **break_even_calculator** — Return the break-even point of a product or business: contribution margin, contribution margin ratio, break-even units and revenue, plus the units and revenue needed to reach a target profit. Units are rounded up to whole units.
- **business_loan_calculator** — Return the monthly payment, total interest, origination fee, effective yearly rate (interest plus fees), a yearly summary, and a full monthly amortization schedule for a business loan. Rate is a yearly percentage; the term is in months.
- **calorie_calculator** — Work out how many calories to eat per day to lose, maintain, or gain weight. Maintenance comes from the Mifflin-St Jeor BMR and an activity multiplier (the same chain as the TDEE calculator), then a mild/moderate/extreme rate applies a 250, 500, or 1000 kcal daily deficit or surplus. Also returns the projected weekly weight change and a protein/carbs/fat split.
- **caption_generator** — Generate a social-media caption from a topic using built-in templates (no AI): picks a template for the content type and tone, fills in the topic, and optionally appends a call to action and up to 8 hashtags. Returns the caption, its length, and the platform limit.
- **carbon_footprint_calculator** — Estimate an annual personal carbon footprint in tonnes of CO2 from home energy, transportation, and lifestyle, with a per-category breakdown and a comparison to the US average (16 t), the world average (4.7 t), and the Paris target (2 t). Every input is optional and defaults to a typical US household value.
- **career_experience_calculator** — Calculate total professional experience across several jobs: total days, years/months/days, weeks, working days (5/7), working hours (8 per working day), per-job durations, and career milestones (1 to 25 years). Jobs with an invalid or reversed date range are skipped and counted.
- **case_convert** — Convert a string between camelCase, PascalCase, snake_case, kebab-case, SCREAMING_SNAKE, dot.case, Title Case, Sentence case, lower, UPPER.
- **chmod_calculate** — Convert between numeric (755) and symbolic (rwxr-xr-x) Unix file permissions.
- **cidr_calculate** — Compute network / broadcast / first-last host / subnet mask / hosts count for a CIDR (e.g. 192.168.1.0/24).
- **citation_generator** — Generate a reference-list citation in APA 7, MLA 9, Chicago, or Harvard style for a book, website, journal, or article. Returns the citation with *italic* markers, a plain-text version, and an HTML version with <em> tags.
- **client_status_report_generator** — Generate a client-facing project status report in Markdown and return it with its headline counts. Sections: header (client, period, report type, generated date), timeline status, budget spent vs total, an executive summary, completed work, in-progress items with percent complete, active blockers with severity, upcoming goals, and notes. Empty sections are omitted, exactly as the page's export does.
- **clip_path_generator** — Generate a CSS clip-path from a named shape (triangle, trapezoid, parallelogram, rhombus, pentagon, hexagon, octagon, star, chevron, message, circle, ellipse, inset) or from your own percentage coordinate pairs. Coordinates are relative to the element box, so the shape scales with the element. Returns the full "clip-path: ...;" rule, the bare value, and the resolved points. Note that clip-path cuts the element visually but does not change its layout box.
- **cloudflare_cost_calculate** — Estimate monthly Cloudflare developer platform costs (Workers, D1, R2, KV, Durable Objects) under free or $5 Workers Paid plans.
- **code_diff_checker** — Returns a line-by-line diff of two code snippets: each line marked added, removed or unchanged with its original and modified line numbers, plus addition/deletion counts and a unified diff (diff -u format, with @@ hunk headers and 3 lines of context) that patch and git apply accept. Can ignore whitespace and letter case when comparing.
- **code_highlight_html** — Returns syntax-highlighted HTML for a code snippet: HTML-escaped text wrapped in <span style="color: ..."> elements using one of six colour themes (dracula, monokai, github, nord, one-dark, solarized). This is the pure highlighting step of the Code Screenshot Generator page; it returns markup plus the theme background and foreground colours, not an image.
- **color_contrast** — Compute the WCAG 2.1 contrast ratio between two colours (accepts #rgb, #rrggbb, and rgb()/rgba() formats) and report whether it passes AA/AAA for normal and large text.
- **color_convert** — Convert between color formats: hex, rgb, hsl, hsv.
- **color_palette_generator** — Generate a harmonious colour palette from a base hex colour: complementary, analogous, triadic, tetradic, split-complementary, or monochromatic. Returns the hex list, per-colour rgb/hsl swatches with a readable text colour, and a CSS custom-properties block.
- **compound_interest** — Compute compound interest growth. Supports any compound frequency (monthly, quarterly, annual) plus optional fixed monthly contributions. Returns final balance, total contributions, total interest, and a year-by-year balance series.
- **cookie_analyzer** — Analyze Set-Cookie header strings and return a per-cookie list of security issues, an overall 0-100 score, and recommendations. Checks Secure, HttpOnly, SameSite, expiry, path scope, sensitive names, and the __Secure-/__Host- prefix rules. One cookie per line; the "Set-Cookie:" prefix is optional.
- **country_lookup** — Return country facts — capital, currency (name, code, symbol), phone code, timezone, region, subregion, flag emoji, and languages — for countries that match a search query, an ISO 3166-1 alpha-2 code, or a region. Call with no filters to list every country.
- **coupon_code_generator** — Generate a batch of unique random coupon or promo codes: an optional prefix, a random part of a chosen length and character set (with an option to drop the look-alikes 0, O, 1, I and L), and optional groups split by a separator. Codes come from crypto.getRandomValues with unbiased sampling, every code in a batch is different, and a request for more codes than the pattern can make is refused. Up to 10,000 codes per call.
- **course_quiz_generator** — Build a printable course quiz from a list of questions (multiple choice, true/false, short answer, fill in the blank) and return the numbered questions with labels, the total points, an answer key, a plain-text version, and a standalone HTML document. LaTeX between $…$ is kept as-is (not rendered).
- **credit_card_payoff_calculator** — Return how long a credit card balance takes to pay off at a fixed monthly payment (mode "payment"), or the payment needed to clear it in a target number of months (mode "months"), with total interest, total paid, payoff month, and a monthly schedule. APR is a yearly percentage.
- **credit_card_validate** — Validate a credit card number with the Luhn checksum and detect the brand.
- **cron_describe** — Parse a 5-field cron expression (minute hour day-of-month month day-of-week) and produce a human-readable English description.
- **cron_to_systemd** — Convert a 5-field cron expression into a systemd timer plus service unit and a Kubernetes CronJob YAML file. Six-field cron (with seconds) is rejected.
- **crypto_testnet_faucets** — Returns a curated list of crypto testnet faucets (Ethereum Sepolia, Base, Arbitrum, Optimism, Polygon, Avalanche, BNB Chain, Linea, Solana) with the faucet URL, tokens dispensed, amount, cooldown, auth requirements and USDC contract where known, plus the chain config (chain id, RPC URL, explorer) for each listed network. Filter by network and a search term.
- **csp_generate** — Build a Content-Security-Policy header from a preset (strict, typical, google-analytics) and/or your own directives, and get the header line, an equivalent <meta http-equiv> tag, and warnings such as script-src allowing 'unsafe-inline', 'unsafe-eval', * or data:, a missing object-src 'none', base-uri or frame-ancestors. Bare keywords like self are quoted for you; invalid sources are rejected with the directive named. Supports Report-Only with a report-uri. Pure computation: it checks the policy text, not a live site.
- **css_animation_generator** — Return CSS @keyframes animation code (or Tailwind config, Web Animations API / React, or Framer Motion code) from a named preset such as fade-in, bounce, pulse, shake, spin, or from custom keyframes with transform, opacity, filter and color properties.
- **css_filter_generator** — Generate a CSS filter declaration from brightness, contrast, saturate, grayscale, sepia, invert, opacity, blur and hue-rotate, or from a named preset (vintage, cool, warm, dramatic, grayscale, faded, sharpen). Only functions that differ from their no-op value are emitted, so the output stays short. Returns the full "filter: ...;" rule, the bare value, and which functions were applied. Order matters in CSS filters and is preserved as listed.
- **css_grid_generator** — Generate a CSS Grid container declaration. sizing=equal gives repeat(n, 1fr); auto-fit and auto-fill give a responsive repeat(auto-fit, minmax(min_width, 1fr)) that needs no media query; custom takes your own track lists. Optional named areas are validated so every row declares the same number of cells, which is the usual reason a grid silently collapses. Returns the full rule, the separate template values, and the area names for the child rules.
- **css_minifier** — Minify CSS (strip comments and whitespace) or beautify compressed CSS, and return the output with byte sizes and the percentage saved. Minify removes comments, whitespace around punctuation, and the last semicolon in each block. Beautify puts one declaration per line with the chosen indentation.
- **csv_dedupe** — Remove duplicate rows from a CSV or TSV table. With no keys, a row is a duplicate when every cell matches an earlier row; with keys (column names), when those columns match, so rows with the same email but a different name count as duplicates. keep "first" (default) keeps the earliest occurrence and "last" keeps the latest, and either way the kept rows stay in their original file order. trim (default true) ignores surrounding spaces when matching and ignore_case (default false) ignores letter case; cells are written out unchanged. A row whose key cells are all blank is kept as unique unless blank_keys is "collapse". Returns cleaned_csv (header + kept rows) and duplicates_csv (header + removed rows) in the input delimiter, counts, and a preview of removed rows. Quoted fields, embedded commas and line breaks are preserved; a quote that never closes stops with UNCLOSED_QUOTE and the line it opens on. Nothing is uploaded when used on the browser page.
- **csv_diff** — Compare two CSV or TSV tables by key column and list the rows that were added, removed or changed - a table diff, not a line diff, so rows in a different order are not changes. keys names one or more columns (a composite key, e.g. email + country); when omitted the tool picks a shared column named id, else a unique *_id column (customer_id), else one named email, sku, uuid, key or code, else the first shared column whose values are unique in both files, else it falls back to whole-row comparison and says so in notes. A row is changed when a non-key column present in both files differs (cells compared exactly; trim and ignore_case apply to key matching only). Duplicate keys within a file keep the first row and are reported in duplicate_keys. A quote that opens and never closes stops the comparison with UNCLOSED_QUOTE naming the file and line. mode "row" compares whole rows as a multiset, with no changed class. Returns counts, the rows (capped at max_rows), and diff_csv: comma-separated, header change_type, then every column of A followed by the new columns of B, then old_<column> for each column that changed anywhere; removed rows hold A's values, added and changed rows B's, and old_<column> holds A's value on changed rows. diff_csv lists every added, removed and changed row; unchanged rows are left out. Nothing is uploaded when used on the browser page.
- **csv_to_bookmarks_html** — Convert a CSV of links into a Netscape bookmarks.html file that Chrome, Firefox, Edge and Safari import. Columns are matched by name: url or href or link, title or name, folder or folder_path or path, and an optional add_date, so a sheet exported from a bookmark manager usually needs no configuration; column_map overrides any of them. A folder path builds nested folders, split on " / " when the value uses it and on "/" otherwise, so a folder genuinely called "AI/ML" survives. Every row needs an address; a row without one is skipped and listed by row number. A bare domain gains https://. Nothing is fetched and no link is checked.
- **csv_to_ics** — Turn a CSV of events into an iCalendar (.ics) file that Google Calendar, Apple Calendar and Outlook import. Columns are matched by name: Subject or Title, Start Date, Start Time, End Date, End Time, All Day Event, Description, Location and a few aliases, so a Google Calendar or Outlook export maps with no configuration; column_map overrides any of them. Each row needs a title and a start. A row with no time, or All Day Event set, becomes an all-day event. Times are written as stated; an optional IANA time zone is stamped on them, UTC writes Z, and no zone writes floating time. Rows without a title or a readable start are skipped and listed. Recurrence is not inferred from text.
- **csv_to_internet_shortcuts** — Turn a CSV of names and addresses into Windows Internet Shortcut (.url) files, one per row. Returns each file as { name, url, content }, where content is the .url text ([InternetShortcut] then URL=, CRLF line endings), so a caller can write them to disk or zip them. The url column is found by its header (url, link, href, address, website) and the name column by name, title or label; url_column and name_column override the match. A CSV with no header row is read when a cell of its first row is an address. A bare domain gains https://. A row with no address, an address that is not one, or (with web_only, the default) a non-http(s) address such as file: is skipped with its row number and reason, and the other rows still convert. A row with no name is named after its host. Names are made safe for Windows and macOS (\ / : * ? " < > | removed, reserved names such as CON suffixed), and a repeated name gets " (2)". Addresses are written as given and never opened. Does not create .lnk files.
- **csv_to_json** — Parse CSV text into an array of objects keyed by the header row.
- **csv_to_ndjson** — Convert CSV into newline-delimited JSON (NDJSON, JSON Lines, .jsonl): one JSON object per line, keyed by the header row. Quoted fields, embedded line breaks and doubled quotes are read per RFC 4180; the delimiter is detected from the header when not given. Every value stays a string unless coerce is true, which turns true, false, null, an empty cell and plain numbers into JSON values while leaving leading zeros and integers of 2^53 or more as text. An empty header name becomes column_N and a duplicate gets a numeric suffix. A row wider than the header keeps the first N values and is reported by row number. Dotted header names are not rebuilt into nested objects.
- **csv_to_sql** — Convert CSV text into SQL INSERT statements, optionally preceded by a CREATE TABLE. The first row is the header and becomes the column list. Column types are inferred from the first 50 data rows as integer, numeric, boolean, or text, and identifiers are quoted for the chosen dialect (Postgres, MySQL, or SQLite). Empty cells become NULL by default. Nothing is executed against a database.
- **csv_to_tsv** — Convert comma-separated values to tab-separated values, the format spreadsheet paste, psql and mysql --batch expect. Quoted fields, embedded line breaks and doubled quotes are read per RFC 4180; the input delimiter is detected from the first line when not given. A cell that holds a tab, a quote or a line break is quoted the way Excel's tab-delimited export quotes it; every other cell is written bare. Values stay text. A leading byte order mark is dropped and blank lines are skipped.
- **csv_to_vcf** — Convert a CSV of contacts into one multi-card .vcf file that iPhone, Android, Google Contacts and Outlook import. Columns are matched by name: full name or first and last name, email, phone or mobile, work and home phone, company, job title, website, notes, street, city, region, postal code, country and birthday, including the headers Google Contacts, Outlook and vcf_to_csv write; column_map overrides any match. One card per row with a name, email or phone; other rows are skipped and listed by row number. vCard 3.0 by default, 4.0 on request. Values are escaped and lines folded at 75 octets per RFC 6350. Photos are not written and nothing is uploaded or synced.
- **curl_to_code** — Returns source code that performs the same HTTP request as a cURL command, in JavaScript (fetch), Python (requests), PHP (cURL), Go (net/http), Ruby (net/http) or Node.js (https). Also returns the parsed request: method, URL, headers, body and basic auth. Parses -X, -H, -d/--data/--data-raw/--data-binary, -F/--form (name=value only; file fields are rejected), -u and the URL.
- **daily_habit_calculator** — Calculate how a daily habit adds up over a week, a month (30 days), a year (365 days), or a custom date range: total units, total cost, and per-week/month/year amounts. Works for coffee cups, water glasses, steps, pages, cigarettes, or any custom unit.
- **data_sanitizer** — Sanitize untrusted text and return the cleaned output, a list of changes made, and a risk level. Modes: html (escape HTML special characters), sql (escape quotes/backslashes, strip comments and semicolons), js (strip script tags, javascript: URLs, event handlers, CSS expressions), url (percent-encode), or all (html + sql + js). Defaults to all.
- **date_difference** — Compute the difference between two dates in years/months/weeks/days/hours/minutes/seconds.
- **debt_payoff_calculator** — Return a debt payoff plan for several debts using the avalanche (highest rate first) or snowball (lowest balance first) strategy: total months, total interest, total paid, and the order and month each debt is cleared. Minimum payments roll into the extra payment as debts close.
- **dedupe_bookmarks** — Remove duplicate links from a Netscape bookmarks.html export (Chrome, Firefox, Edge, Safari) and return a clean bookmarks.html plus a CSV of the duplicates. Two bookmarks are duplicates when their addresses match after folding letter case in the host, default ports and a trailing slash, and, by default, after dropping utm_* / fbclid / gclid tracking parameters and the #fragment. The first copy is kept with its title, date and folder; the duplicates CSV lists every folder a copy sat in. Other query parameters are never touched, non-web addresses compare verbatim, and no link is fetched.
- **dev_request_prioritizer** — Prioritize development requests with the page's scoring frameworks and return them sorted by priority score, each with a value score and an effort/value quadrant (quick win, big bet, fill-in, money pit), plus a top recommendation and totals. Frameworks: "default" (weighted value ÷ √effort over Customer Impact, Revenue Impact, Strategic Value, Urgency, Risk), "rice", "ice", "wsjf", "moscow". Score each request 1-10 per dimension, keyed by dimension name; optional confidence weighting and a deadline boost (+20% within 7 days, +50% within 3, +100% overdue, capped by deadline_boost_multiplier).
- **dividend_calculator** — Return a year-by-year projection of a dividend portfolio: dividends received, DRIP reinvestment, contributions, share count, share price, ending value, plus final yearly and monthly dividend income and yield on cost. All rates are yearly percentages; contributions and reinvested dividends buy shares at the mid-year average price.
- **dnpm_configurator** — Returns the five files of a hardened Docker-based npm wrapper (the ./dnpm bash script, .dnpm/Dockerfile, docker-compose.node.yml, .dnpm/seccomp-profile.json and a CLAUDE.md) generated for a project. The sandbox mounts the source read-only, drops all capabilities, runs as a non-root user, disables postinstall scripts, pins the npm registry and builds with zero network access.
- **dns_lookup** — Return the DNS records of a domain for one record type (A, AAAA, CNAME, MX, TXT, NS or SOA). Resolved through the public Google DNS-over-HTTPS resolver.
- **dns_propagation_checker** — Compare one DNS record type for a domain across two named public DNS-over-HTTPS resolvers (Google Public DNS at dns.google and Cloudflare at cloudflare-dns.com): each resolver's response code, values and TTLs, whether they agree, and which resolver returned each value. Two resolvers are not a global propagation map.
- **dns_security_scanner** — Return a DNS security report for a domain: SPF, DMARC, MX and CAA records with issues, a 0-100 score, a letter grade and recommendations. Records are resolved through Cloudflare DNS-over-HTTPS.
- **domain_rating_checker** — Return the Ahrefs Domain Rating (0-100) for up to 25 domains in one call, with a per-domain status (provider_unavailable means Ahrefs is not answering; when every domain is in that state the call fails with PROVIDER_UNAVAILABLE). Results carry the required "Domain Rating by Ahrefs" attribution.
- **down_payment_calculator** — Return the down payment, closing costs, total cash needed, remaining amount to save, months to save, target month, loan amount, and estimated PMI for a home purchase, plus a comparison table for 5%, 10%, 15%, 20%, and 25% down. PMI is estimated at 1% of the loan per year when the down payment is below 20%.
- **eisenhower_matrix** — Sort tasks into the four Eisenhower quadrants and say what to do with each one. Every task is urgent or not and important or not: urgent + important is "Do First", important only is "Schedule", urgent only is "Delegate", and neither is "Eliminate". Pass `urgent` and `important` per task, or give a `due` date and let urgency follow from how close it is. Returns the four quadrants with their tasks, per-quadrant counts, and the single task to start on.
- **email_header_analyzer** — Return a structured analysis of raw email headers: sender, recipient, subject, date, message id, the Received hop chain with per-hop delays, SPF/DKIM/DMARC results, every public IP seen, and suspicious-routing flags.
- **email_security_checker** — Return an email-security report for the domain of an email address: MX, SPF, DKIM (common selectors), DMARC, MTA-STS, TLS-RPT and BIMI checks with a 0-100 score and recommendations. Records are resolved through Cloudflare DNS-over-HTTPS.
- **email_signature_generator** — Generate an HTML email signature (table-based, inline styles, safe for Gmail/Outlook) from name, title, company, contact details and social links. Returns the HTML in a horizontal, vertical, or compact layout.
- **email_validate** — Validate an email address and report every rule it breaks and break it into local / domain / TLD parts.
- **env_linter** — Lint a dotenv file for duplicate keys, unquoted spaces, export prefixes, secret-looking values (masked), and drift against an optional .env.example. Returns issues and a masked key table. Does not execute the file.
- **env_yaml_converter** — Convert a dotenv .env file to a flat YAML map, or YAML back to KEY=value lines. The shape option wraps the map as a pasteable Docker Compose (services.app.environment) or GitHub Actions (jobs.app.env) snippet rather than a whole file. Comments, blank lines and an "export " prefix are handled, and a duplicate key keeps the last value and is reported. Values stay strings unless infer_types is on, matching what process.env returns. The reverse direction accepts a flat mapping or one of those snippet shapes and rejects nested values instead of inventing nested names. Not a Kubernetes Secret generator and not a shell parser.
- **essay_outline_generator** — Generate a structured essay outline (introduction, body paragraphs, conclusion) for five essay types and three lengths, and return each section with its guidance points plus Markdown and plain-text renderings. The outline is a deterministic template filled with the topic, thesis, and main points.
- **faq_schema_generator** — Generate FAQPage JSON-LD structured data from question-answer pairs, and return the JSON-LD string, a ready <script> tag, the schema object, and validation warnings (empty, duplicate, too short, too long).
- **fire_calculator** — Return the FIRE number (annual expenses / withdrawal rate), years to reach it, FIRE age, progress percent, monthly investment, and a year-by-year net worth projection for Traditional, Lean, Fat, Coast, or Barista FIRE. Growth uses the real return (expected return minus inflation); rates are yearly percentages.
- **flashcard_maker** — Turn a list of front/back pairs into a flashcard deck and return the numbered cards plus ready-to-import formats: CSV (Front,Back), tab-separated text for Anki and Quizlet, JSON, Markdown, and a plain-text study sheet. Optionally shuffles the deck (deterministic with a seed).
- **font_icon_search** — Search a catalog of about 300 icons from Font Awesome, Material Icons, Lucide, and Heroicons by name, keyword, or category and return matching icon names with their CSS class and unicode code point. Optional filters by library and category; an empty query lists the catalog.
- **form_to_json_schema** — Returns a form schema object ({ formId, method, action, fields, submitText }) extracted from HTML form markup. Reads every input, select and textarea with a name or id: its type, label (from <label for>), placeholder, required flag, min/max, minlength/maxlength, pattern, select options and radio groups. Submit, button, reset and hidden inputs are skipped.
- **fraction_calculator** — Add, subtract, multiply or divide two fractions, or simplify one. Accepts whole numbers (3), simple fractions (3/4), mixed numbers (2 1/2) and decimals (0.75). Returns the reduced fraction, the mixed-number form, the decimal value, and the steps. Exact integer arithmetic — no floating-point drift.
- **gcd_calculate** — Greatest Common Divisor (GCD) and Least Common Multiple (LCM) of two non-negative integers. Uses the Euclidean algorithm.
- **geo_analyzer** — Return a Generative Engine Optimization (GEO) report for a public web page: an overall 0-100 score, per-category scores (technical, content, geo, ai-access), a citability score, AI-bot access from robots.txt, llms.txt presence and a list of pass/warn/fail checks with recommendations.
- **glassmorphism_generator** — Generate the CSS for a glassmorphism (frosted glass) card: semi-transparent background, backdrop-filter blur and saturation (with the -webkit- prefix), border radius, and a lighter border. Returns the multi-line CSS block, each property, and the resolved settings. Presets: subtle, frosted, bold, dark.
- **glob_pattern_tester** — Returns which file paths match a glob pattern and which do not. Supports * and ** wildcards, ? single characters, [abc] character classes, {a,b} brace expansion and a leading ! for negation. A pattern without a slash also matches against the file basename.
- **gpa_calculator** — Calculate a grade point average (GPA) on the 4.0 scale from course letter grades and credits. Returns the GPA, a quality label, total credits, total quality points, and per-course points. Grades A+ to F (A+ and A = 4.0, A- = 3.7, B+ = 3.3, ..., F = 0).
- **grade_calculator** — Calculate a weighted course grade from categories (homework, quizzes, exams) with assignment scores, the letter grade (A to F), and the score needed on the remaining weight to reach a target grade. Categories with no scored assignments count as remaining weight.
- **gradient_generator** — Generate a CSS linear, radial, or conic gradient from colour stops (2 to 10) and an angle, or from a preset (sunset, ocean, forest, fire, purple, cool). Returns the "background: ...;" rule, the bare gradient value, and the sorted colour stops.
- **graphql_playground** — Check a GraphQL query for balanced braces and, when a schema is supplied, unknown fields on Query/Mutation/Subscription types. This is a syntax and field-name check. It does not execute a query and it is not a full GraphQL engine.
- **graphql_schema_validator** — Validate a GraphQL SDL schema and return errors, naming-convention warnings, and counts of types, queries, mutations, and subscriptions. Errors cover unbalanced braces, fields without a type, double colons, malformed return types, and types that are used but never defined; warnings cover type names that are not PascalCase, field names that are not camelCase, and a missing Query type.
- **graphql_to_typescript** — Convert a GraphQL SDL schema into TypeScript type definitions and return the generated code with counts of emitted types, enums, and inputs. Object and interface types become interfaces (or type aliases), enums become TypeScript enums, input types are included by default. Non-null fields (!) are required; nullable fields become optional and accept null. Built-in scalars map to string, number, and boolean.
- **har_to_curl** — Convert a HAR (HTTP Archive) file into curl commands, one per recorded request, and return them as a script plus a per-request list. Each command carries the method, URL, request headers (pseudo-headers, Host, Connection, and Content-Length are skipped), optional cookies, and the request body. Output uses short flags by default; long_form switches to --request, --header, --cookie, --data.
- **har_viewer** — Parse HAR 1.x JSON and return each entry’s method, URL, status, size, time, and MIME type. Request bodies, cookies, and headers are omitted. Convert a HAR to curl with har_to_curl.
- **hash_comparison_tool** — Hash text with MD5, SHA-1, SHA-256, SHA-384, or SHA-512 and compare the hex digest with an expected hash. Returns the computed hash, the normalized expected hash, and match true/false (null when no expected hash is given). Useful to verify checksums and integrity.
- **hash_generate** — Hash text with MD5, SHA-1, SHA-256, or SHA-512. Returns hex digest.
- **hashtag_generator** — Generate relevant hashtags from keywords using a built-in, rule-based database (no AI): matches keywords against topic categories, scores popular and niche tags, adds compound and suffix variants, and caps the list at the platform limit (Instagram 30, Twitter 5, TikTok 20, LinkedIn 10, YouTube 15). Returns the hashtags, a space-joined string, and the tags grouped by source.
- **heading_structure_analyzer** — Analyze the H1-H6 heading hierarchy of an HTML document and return every heading, SEO warnings (missing or multiple H1, skipped levels, empty or overly long headings), and per-level counts.
- **hex_decode** — Decode a hexadecimal string back to UTF-8 text. Whitespace, dashes, and colons between bytes are tolerated.
- **hex_encode** — Encode UTF-8 text as a hexadecimal string. Optional separator between bytes and uppercase output.
- **hmac_generate** — Compute an HMAC of a message with a secret key. Returns hex digest.
- **home_affordability_calculator** — Return the maximum home price you can afford from income, monthly debts, down payment percent, rate, term, property tax, insurance, HOA, and a debt-to-income ratio, with the monthly payment breakdown at that price. Rates are yearly percentages.
- **hreflang_tag_generator** — Generate hreflang annotations for multilingual pages and return them as HTML <link> tags, an HTTP Link header, and an XML sitemap block, plus validation issues (invalid URL, language, or region code, duplicate language-region pairs, missing x-default). Pass one page group as variants, or several as groups.
- **html_entity_decode** — Decode HTML entities back to characters. Handles named entities (amp/lt/gt/quot/apos plus common typography), decimal (&#NNN;), and hex (&#xHH;) forms.
- **html_entity_encode** — Encode HTML special characters as entities. Named mode uses &amp;/&lt;/&gt;/&quot;/&#39;; numeric mode uses &#NNN; for all non-ASCII plus the five reserved chars.
- **html_entity_finder** — Search the HTML entity catalog and return matching entities with their character, named entity, decimal code, hex code, and category. Search by character (€), entity name (&euro; or euro), descriptive name (Euro Sign), or keyword (currency); filter by category; with no query the catalog is listed in order. Results are ranked by match strength.
- **html_formatter** — Format (beautify) or minify HTML and return the result with a tag-balance validation report. Format mode re-indents block tags, keeps inline tags with their text, and leaves pre/code/script/style/textarea content untouched. Minify mode strips comments and whitespace between tags.
- **html_strip** — Strip all HTML tags from a string, converting block tags to newlines and decoding common entities.
- **html_table_to_json** — Convert an HTML <table> into JSON — an array of objects keyed by the header row, or an array of row arrays. Cell text is extracted with tags stripped and entities decoded. Empty header cells become column1, column2, ….
- **html_to_markdown** — Convert HTML fragments to Markdown. Supports headings, paragraphs, lists, links, images, inline code, code blocks, blockquotes, and basic inline emphasis. Unknown tags are stripped, content preserved.
- **http_status_code_lookup** — Return the meaning, typical use case and fix for HTTP status codes. Look up one code (e.g. "404"), a class ("4xx"), or search by name or keyword ("too many requests"); filter by category.
- **ics_busy_free** — Turn a detailed iCalendar (.ics) export into an availability file to share. busy_events mode writes one VEVENT per busy event with SUMMARY "Busy", TRANSP:OPAQUE and CLASS:PRIVATE, keeping only DTSTART, DTEND or DURATION, RRULE, RDATE, EXDATE, RECURRENCE-ID and DTSTAMP, with a new UID (a recurring series keeps one shared UID); descriptions, locations, links, attendees, organizer, alarms and vendor properties are left behind. vfreebusy mode writes one VFREEBUSY with a FREEBUSY period in UTC per busy event, overlapping periods joined; a recurring event is listed by its first occurrence only, because recurrence rules are never expanded. Cancelled events (drop_cancelled) and events marked free (TRANSP:TRANSPARENT) are skipped; a skipped modified occurrence becomes an EXDATE on its series so it is not busy either. Tentative events are included unless include_tentative is false. No calendar URL is fetched.
- **ics_diff** — Compare two iCalendar (.ics) exports of the same calendar, before and after, and report which events were added, removed or changed. Entries are matched by UID plus RECURRENCE-ID (a modified occurrence is its own entry), never by position or title; entries without a UID are listed and never matched. A changed entry lists each field that differs with its before and after values; repeated fields such as ATTENDEE or CATEGORIES show only the values that differ, and an alarm (VALARM) counts as a field. Property order, line folding and parameter order are not differences. DTSTAMP, LAST-MODIFIED and SEQUENCE are ignored by default because calendar apps rewrite them on every export. Times are compared as written, never converted between zones. Also returns the added and the removed entries as calendars of their own. No calendar URL is fetched.
- **ics_expand_rrule** — Expand the recurring events of an iCalendar (.ics) file into one concrete event per occurrence between two dates, for a spreadsheet, a CRM or an importer that cannot read RRULE. Supports FREQ=DAILY, WEEKLY, MONTHLY and YEARLY with INTERVAL, COUNT, UNTIL, BYDAY (ordinals such as 2TU or -1FR included), BYMONTHDAY, BYMONTH and WKST, plus EXDATE, RDATE and RECURRENCE-ID overrides. A rule with BYSETPOS, BYYEARDAY, BYWEEKNO, BYHOUR, BYMINUTE, BYSECOND or an HOURLY or finer frequency keeps its first occurrence only and is named in notes. Each series stops at max_occurrences (default 366, at most 2000) and the output at 20000 events. Times are wall-clock as the file states them, never converted. Each occurrence gets its own UID (the series UID plus its start). Output is .ics, a JSON array in the ics_to_json shape, or CSV in the ics_to_csv spreadsheet columns. No calendar URL is fetched.
- **ics_filter** — Filter an iCalendar (.ics) file down to the entries you want and get a smaller calendar to import, plus the removed entries as their own calendar. Filters, all optional and combined with AND: a date range (from and to, YYYY-MM-DD, inclusive, compared with each entry's own wall-clock time), a keyword (case-insensitive, in SUMMARY, DESCRIPTION or LOCATION), a category (one of a comma-separated list, matched against CATEGORIES), a STATUS, and drop_cancelled (default true). A recurring series is kept or removed whole, judged by its main event: the date range keeps it when at least one occurrence (RRULE, RDATE, less EXDATE) or one modified occurrence falls in the range. The rule is not expanded in the output, and a modified or cancelled occurrence stays with its series. VTIMEZONE blocks are kept for the entries that use them. Every property is copied as read.
- **ics_privacy_scrub** — Redact an iCalendar (.ics) export before sharing it: per field, keep, generalize or remove the title (SUMMARY), description, location, links (URL, CONFERENCE and vendor meeting links), attendees, organizer, attachments, comments and categories. Defaults keep the schedule and hide the details: titles become "Busy", descriptions, locations, links, attendees, organizer, attachments and comments are removed, categories stay, alarms are removed, every UID is replaced (a recurring series keeps one shared UID), CLASS is set to PRIVATE, and vendor X- properties, CONTACT and RESOURCES are removed. DTSTART, DTEND, DURATION, RRULE, EXDATE, RDATE, RECURRENCE-ID, STATUS and TRANSP are kept, and shift_days can move every date by whole days without touching the TZID. Generalize writes "Private" for text fields, numbered stand-ins such as "Attendee 1 <attendee-1@example.invalid>" for people, and only the scheme and host of a link. Recurrence rules are never expanded and no calendar URL is fetched.
- **ics_timezone_convert** — Rewrite the time zones of an iCalendar (.ics) file so events land at the right local time after import. convert keeps each moment and restates DTSTART, DTEND, DUE, RECURRENCE-ID, EXDATE and RDATE in target_tz (a UTC value too). reanchor keeps the clock numbers and changes the zone, for an export that stated the wrong zone; RRULE UNTIL moves with it. normalize renames Windows zone IDs such as "Eastern Standard Time" and vendor-prefixed names such as /mozilla.org/.../America/New_York to IANA names without changing any time. A VTIMEZONE built from the runtime's IANA rules is written for every zone the output introduces, and blocks no longer referenced are dropped. All-day dates are never changed; floating times are changed only with include_floating. A TZID no rule knows is listed and left as it is. Zone rules come from the runtime's time-zone database, not from the file's own VTIMEZONE. Recurrence rules are never expanded.
- **ics_to_csv** — Convert an iCalendar (.ics) export from Google Calendar, Apple Calendar or Outlook into CSV, one row per event. Folded lines, escaped text, TZID and UTC stamps, all-day dates, DURATION and X-WR-CALNAME are read. Times stay exactly as the file states them and are never converted between zones; the zone travels in its own column. A recurrence rule is written as text in the rrule column, not expanded into every occurrence. The outlook layout writes the nine-column header Google Calendar and Outlook accept on import. To-dos, journals and events with no readable start are skipped and counted.
- **ics_to_json** — Parse an iCalendar (.ics) export from Google Calendar, Apple Calendar or Outlook into JSON: one object per event with uid, summary, description, location, start, end, all_day, timezone, status, url, organizer, attendees, categories, rrule, exdate, recurrence_id, created, last_modified, sequence and alarms, plus a calendar block with the name, PRODID, METHOD and the VTIMEZONE ids. Folded lines and escaped text are decoded. Times are wall-clock ISO-8601 exactly as the file states them, never converted between zones; the zone is its own field. The end is the exclusive iCalendar end, derived from DURATION when DTEND is absent. A recurrence rule stays as RRULE text and is never expanded. To-dos and journal entries are skipped and counted unless include_todos is true.
- **images_to_pdf** — Combine JPG and PNG images into a single PDF, one image per page, in the order given. Choose a fixed A4 or Letter sheet with the image fitted inside it and centred, or "fit" for a page exactly the size of each image. Images are embedded as they are and never re-encoded, so nothing is lost. Input images and the output PDF are base64.
- **inflation_calculator** — Return what an amount of money from one year is worth in another year using historical CPI data, with total inflation, average yearly inflation, and the change in purchasing power (all in percent). USD covers 1913-2025 (BLS); TRY covers 2003-2025 (TÜİK).
- **ini_json_converter** — Convert classic INI, .cfg or .conf text to JSON, or a JSON object back to INI. Each [section] becomes a nested object and keys above the first header sit on the root. Comments opened by ; or # are dropped, quoted values keep their spaces and punctuation, and a duplicate key keeps the last value and is reported. Values stay strings unless infer_types is on. JSON to INI takes one level of sections and rejects deeper nesting or arrays rather than guessing a syntax. Not a TOML, .properties or systemd unit parser.
- **internet_shortcuts_to_csv** — Turn Windows Internet Shortcut files (.url) into a CSV or a plain list of URLs. Pass each file as { name, content } with the file name and its text. The URL, WorkingDirectory and IconFile keys are read from the [InternetShortcut] section, case-insensitively, with CRLF line endings and a byte order mark tolerated; the name column is the file name without folders or .url. A file without that section or without a URL line, and any binary .lnk shortcut, is listed in skipped with the reason instead of failing the batch. CSV columns: name, url, working_directory, icon_file, quoted where a value holds a comma, quote or line break. format "txt" writes one URL per line. The URLs are copied as written and never fetched; non-web schemes such as file: or javascript: are kept and reported in warnings.
- **investment_calculator** — Return the projected value of an investment with compound growth and monthly contributions: final balance, total contributions, total interest, an effective yearly growth rate, and a year-by-year table. Return is a yearly percentage; contributions are added at the start or the end of each month.
- **ip_blacklist_checker** — Return whether an IPv4 address is listed on 5 DNS blacklists (Barracuda, SpamCop, UCEPROTECT, JustSpam, PSBL), with listed, clean and failed counts. Lookups use Google DNS-over-HTTPS. A list that does not list its own test address 127.0.0.2 at the time of the check counts as failed, never as clean. Spamhaus is not checked: it refuses public DNS-over-HTTPS resolvers.
- **ip_validate** — Validate an IPv4 or IPv6 address and classify it (public / private / loopback / link-local / multicast / global).
- **jq_playground** — Returns the result of running a jq-style filter over a JSON document. Supports a jq subset: paths (.a.b, .[0], .[1:3], .[], .["a-b"]), pipes, map, select with ==, !=, >, >=, <, <= combined by and, or and not (jq truthiness: only false and null are false), sort_by/group_by/unique_by/min_by/max_by, keys/values/length/type/add/min/max/flatten/unique/reverse/sort, to_entries/from_entries/with_entries, has/contains/del, split/join/ltrimstr/rtrimstr, range/limit, + - * / arithmetic, the // fallback, and object/array/string construction. .[] yields an array rather than a stream, so .users[] | select(...) returns the matching elements as an array. A select that matches nothing gives result_type "empty". Not a full jq implementation: no reduce, try, foreach, recursive descent or user functions.
- **json_comparer** — Returns a git-style line diff of two JSON documents after both are pretty-printed with 2-space indentation. Each line is marked added, removed or unchanged with its line numbers; a unified text block and counts are included.
- **json_diff** — Returns the semantic differences between two JSON documents as a list of added, removed and modified paths with their old and new values, plus counts. Compares structure and values, not text lines; key order is ignored by default.
- **json_escaper** — Returns the text with JSON string escapes applied (mode "escape") or removed (mode "unescape"). Escapes backslashes, double quotes, newlines, carriage returns, tabs, form feeds and backspaces so the text can sit inside a JSON string literal.
- **json_faker** — Returns an array of fake JSON records built from a field list, for testing and prototyping. Each field has a name and one of 40 generator types (firstName, lastName, fullName, email, phone, uuid, username, password, avatar, streetAddress, city, state, zipCode, country, latitude, longitude, companyName, jobTitle, department, productName, price, color, hexColor, url, ip, mac, paragraph, sentence, word, integer, float, boolean, date, pastDate, futureDate, timestamp, creditCard, iban, currency, imageUrl). Values are random on every call.
- **json_flatten** — Flatten a nested JSON object into a single-level map with dot-separated keys.
- **json_format** — Pretty-print JSON with the requested indentation (1-8 spaces).
- **json_ld_generator** — Generate JSON-LD structured data for 14 schema.org types (Article, BlogPosting, Product, Organization, LocalBusiness, Person, Event, FAQPage, HowTo, Recipe, WebSite, BreadcrumbList, JobPosting, Course) and return the JSON-LD string, a <script> tag, and the schema object. Known keys such as author, publisher, address, offers, brand, location, and worksFor are expanded into nested typed objects. JobPosting nests the address fields into jobLocation and baseSalary into a MonetaryAmount; datePosted defaults to today (UTC).
- **json_minifier** — Minify JSON to a single line with no whitespace and return the compact text plus original size, minified size (bytes), and reduction percentage. The input must be valid JSON; a parse error is reported with its position.
- **json_path_finder** — Returns every match of a JSONPath expression in a JSON document: the concrete path and value of each match, the match count, and a convenience "value" (the single value when there is one match, otherwise the array of values). Supports $.a.b, ["key"], [0], [-1], [1:3], wildcards (*), recursive descent (..name) and filters ([?(@.age > 30)]).
- **json_query** — Extract a value from JSON via a dotted path. Supports array indexes like "users[0].email".
- **json_schema_form_builder** — Returns a form schema object (formId, method, action, fields, submitText) built from a list of field definitions. The output is the JSON the json_to_html_form and json_to_bootstrap_form tools consume.
- **json_schema_generator** — Returns a JSON Schema (draft-07) object inferred from a sample JSON document. Detects types, nested objects and arrays, marks properties required, and can detect string formats (email, uri, uuid, date-time, date) and include examples.
- **json_schema_validator** — Returns whether a JSON document is valid against a JSON Schema (draft-07 subset) and lists every violation with its JSON pointer path, message and keyword. Checks type, required, properties, additionalProperties, propertyNames, items, min/maxLength, pattern, format, minimum, maximum, multipleOf, enum, min/maxItems and uniqueItems.
- **json_to_bootstrap_form** — Returns Bootstrap 5 form markup generated from a JSON form schema ({ formId?, layout?, method?, action?, fields: [...], submitText? }). Supports vertical, horizontal (row/col-md-6) and floating-label layouts with form-control, form-select and form-check classes.
- **json_to_chart** — Render a bar, line, or pie chart as an SVG string from JSON data of the form {"title","type","data":[{"label","value","color?"}]}. Returns the SVG, the normalised data points with colours and percentages, the total, and the maximum value.
- **json_to_csv** — Convert a JSON array of flat objects into CSV. Union of keys becomes the header row.
- **json_to_email_template** — Generate a responsive, table-based HTML email (header, greeting, body paragraphs, button, footer, unsubscribe link) from JSON such as {"title","body":["..."],"button":{"text","url"},"companyName"}. Returns the full HTML document.
- **json_to_go_struct** — Returns Go struct definitions (as source text) generated from a JSON object. Field names become PascalCase, nested objects become their own structs (or inline structs), and json tags with optional omitempty are added.
- **json_to_html_form** — Returns clean HTML5 form markup generated from a JSON form schema ({ formId?, formClass?, method?, action?, fields: [...], submitText? }). Each field becomes a labelled input, textarea, select, checkbox or radio group with its validation attributes.
- **json_to_java_class** — Generate Java POJO class source code from a JSON object. Nested objects become separate classes, arrays become List<T>, and you can choose Lombok @Data, getters/setters, or public fields.
- **json_to_liquid** — Turn structured data into Shopify Liquid. The input can be JSON, a JavaScript object literal (unquoted keys, single quotes, trailing commas, comments), a Python dict (True/False/None, tuples), a PHP array (=> pairs, array()) or YAML; auto detects which. Two outputs: an assigns block that recreates the data with {% assign %} and {% capture %} (nested keys flattened to snake_case names, scalar arrays as split strings, arrays of objects as parallel arrays, deeper structures as JSON strings), and a rendering template skeleton with {{ paths }}, {% for %} loops and {% if %} guards for the same object as it would arrive in a theme. Every lossy mapping is listed in warnings. Liquid has no object or array literals, so the assigns block is the honest community mapping, not a lossless encoding. The browser page at /developers/json-to-liquid/ previews the result with LiquidJS.
- **json_to_markdown_table** — Convert a JSON array of objects to a GitHub-flavoured Markdown table. Column order follows the first row's keys unless `headers` is given. Objects in cells are JSON-stringified. "|" and newlines inside cells are escaped.
- **json_to_org_chart** — Generate nested HTML for an organisation chart from JSON of the form {"title","root":{"name","title","avatar","children":[...]}}. Returns the HTML (div.org-chart with .org-node/.node-card/.node-children classes), the node count, and the depth.
- **json_to_pricing_table** — Generate the HTML for a pricing table (div.pricing-container with .pricing-card/.plan-features classes) from JSON of the form {"title","currency","plans":[{"name","price","period","features":[...],"cta","highlighted","badge"}]}. Returns the HTML plus a summary of each plan.
- **json_to_product_card** — Generate an e-commerce product card from JSON such as {"name","price","originalPrice","currency","rating","reviews","badges"} in one of 6 templates. Returns the card three ways: inline-style HTML, Tailwind CSS markup, and a React JSX component.
- **json_to_profile_card** — Generate a profile card for team pages and portfolios from JSON such as {"name","title","company","location","email","bio","skills","social":{"twitter","github"}} in one of 6 templates. Returns the card three ways: inline-style HTML, Tailwind CSS markup, and a React JSX component.
- **json_to_python_class** — Generate Python class source code from a JSON object as a dataclass, a Pydantic model, or a plain class. Nested objects become separate classes, field names become snake_case, and type hints are optional.
- **json_to_react_form** — Return a typed React (TSX) form component generated from a JSON schema of fields — inputs, textarea, select, checkbox, radio — with useState handling, validation attributes and a submit handler.
- **json_to_readme** — Generate a README.md (title, shields.io badges, description, demo/docs links, features, installation, usage, contributing, author, license) from JSON such as {"name","description","features":[...],"installation":[...],"license":"MIT"}. Returns the Markdown and the list of sections included.
- **json_to_social_card** — Generate a social-media / Open Graph card (1200x630 aspect) from JSON such as {"title","description","author","date","siteName","tag","background","textColor"} in one of 6 templates. Returns the card three ways: inline-style HTML, Tailwind CSS markup, and a React JSX component.
- **json_to_sql** — Convert a JSON array of objects into SQL INSERT statements, optionally preceded by a CREATE TABLE. Column types come from the real JSON values, so booleans stay booleans and null becomes NULL rather than the text "null". A nested object or array is stored as JSON text. Identifiers are quoted for the chosen dialect (Postgres, MySQL or SQLite). A single object is treated as one row, and NDJSON is accepted. Nothing is executed against a database.
- **json_to_tailwind_form** — Generate React JSX for a Tailwind CSS styled form from a JSON form schema. Supports text, email, number, tel, url, password, textarea, select, checkbox, radio, date, time, datetime-local, and file fields with labels, placeholders, required marks, and validation attributes.
- **json_to_testimonial_card** — Generate a testimonial / review card from JSON such as {"quote","author","title","company","rating","date","highlighted"} in one of 6 templates. Returns the card three ways: inline-style HTML, Tailwind CSS markup, and a React JSX component.
- **json_to_timeline** — Generate the HTML for a timeline (div.timeline with .timeline-event/.event-marker/.event-content classes) from JSON of the form {"title","orientation","events":[{"date","title","description","color"}]}. Returns the HTML, the orientation, and a summary of each event.
- **json_to_typescript** — Generate TypeScript interfaces or type aliases from a JSON sample. Nested objects become named declarations (or inline object types), arrays infer element unions, and identical shapes are declared once.
- **json_to_url_params** — Convert a JSON object into a URL query string that starts with "?". Arrays repeat the key (or use key[] notation), nested objects are JSON-stringified, null values are skipped, and values are URL-encoded by default.
- **json_to_xml** — Convert a JSON value to one XML document. Keys starting with "@" become attributes and "#text" becomes the element text, the convention xml_to_json writes, so XML survives a round trip. A single-key object names its own root element; anything else (several keys, an array, a single value) is wrapped in one root element, root_name or "root". Arrays repeat their element; a top-level array becomes one <item> per entry. Invalid XML names fall back to <item>. Adds an XML declaration.
- **json_to_zod_schema** — Generate a Zod validation schema (TypeScript source) from a JSON sample. Detects email, URL, UUID, and ISO date strings, marks integers with .int(), and emits the z.infer type.
- **json_unflatten** — Unflatten a flat key map back into nested JSON. Understands both array notations json_flatten emits: items[0].name and items.0.name. A numeric segment rebuilds an array rather than an object.
- **json_validate** — Validate a JSON string. Returns type + shape summary, or a parse error with position.
- **json_visualizer** — Return a text tree outline, structure statistics, and JSONPath list for a JSON document. Stats count objects, arrays, strings, numbers, booleans, nulls, total keys, and max depth; paths are emitted as $.a.b[0] expressions for every object or array node.
- **json_yaml_converter** — Convert JSON to YAML or YAML to JSON and return the converted text. json-to-yaml emits block-style YAML with the chosen indentation; yaml-to-json emits pretty-printed JSON. Parse errors report the line and column.
- **jwt_decode** — Decode a JWT header + payload. Does NOT verify the signature. Related API tools: jwt_generator signs HMAC (HS256/384/512) test tokens and jwt_security_validator checks algorithm and time claims. Signature verification (HS256/384/512 and RS256) and RS256 signing run only in the browser on the JWT Decoder page (https://findutils.com/developers/jwt-decoder/), so secrets and private keys are never sent to this API.
- **jwt_generator** — Generate a signed JWT (HS256, HS384, or HS512 via HMAC) and return the token plus the decoded header and payload. The payload contains sub, name, iat, exp, and any custom claims. Asymmetric algorithms (RS*/ES*) are not supported.
- **jwt_security_validator** — Decode a JWT and return a list of security checks (algorithm strength, expiration, not-before, issued-at, issuer, audience, subject, signature presence) plus an overall valid flag. Does NOT verify the signature — it only inspects claims and header fields.
- **keyboard_shortcut_finder** — Return keyboard shortcuts (Mac and Windows keys) that match a search query, app, or category. Covers VS Code, Chrome, Excel, Photoshop, Figma, Slack, macOS, Windows, Word, and Terminal. Call with no filters to list the apps and categories.
- **keyword_density_checker** — Analyze keyword density in text and return word/sentence/paragraph counts, the top 1-gram, 2-gram, and 3-gram phrases with counts and density percentages, and (optionally) the count, density, and over/good/low status of a target keyword. Densities are percentages rounded to 2 decimals.
- **kktc_exchange_rates** — Return live buy and sell exchange rates (against Turkish lira) from Northern Cyprus (KKTC) exchange offices and banks, per currency, with the best buy and best sell office. Optionally filter to one currency code.
- **knap_render** — Render a Knap template (knap.md, the Markdown template language behind Obsidian Web Clipper and Importer) with a JSON object of variables and return the Markdown. Supports {{ variable | filter:"arg" }} with the 70+ standard filters (bold, h1 to h6, table, list, link, wikilink, callout, yaml_property, date, join, sort, unique, where, replace, upper, kebab and more), {% if %}/{% elseif %}/{% else %}, {% for item in items %} with loop.index, loop.first and loop.last, {% set %}, and {# comments #}. The engine is an AST interpreter with no eval; link and image filters drop javascript: and data: destinations. A syntax error is returned with its line and column. Templates are capped at 200,000 characters and output at 1,000,000.
- **lesson_plan_template** — Fill a structured lesson plan template (header, learning objectives, materials, timed activities, assessment, homework, notes) and return the normalized plan object, a Markdown document, and a standalone HTML document. Warns when the activity minutes do not add up to the lesson duration.
- **levenshtein_distance** — Compute the Levenshtein edit distance between two strings (minimum single-character insertions, deletions, or substitutions to transform A into B). Also returns a normalised similarity in [0, 1].
- **line_dedupe** — Remove duplicate lines, keeping either the first or the last occurrence. Optionally case-insensitive, trim-aware, or inverted to show only the repeated lines.
- **line_prefix_suffix** — Add a prefix, a suffix, or line numbers to every line of a text. Numbering starts at any value, steps by any amount, pads with zeros on request, and can skip blank lines.
- **line_sort** — Sort lines alphabetically, numerically, by length, or shuffle them randomly. Ascending or descending, case-sensitive or not.
- **linkedin_post_generator** — Assemble a LinkedIn post from a hook, a body, a call to action and hashtags, or from one of seven built-in templates (thought leadership, story, tips, announcement, question, celebration, insight). Returns the post text, its length against the 3,000-character limit, and any template placeholders left unfilled. No AI is used.
- **llm_requirements_calculator** — Estimate the VRAM, system RAM, and disk space needed to run an open-weight LLM locally, and which common GPUs and Macs it fits on. Covers Llama, Mistral, Qwen, DeepSeek, Gemma, Phi, Code Llama, Command R, Yi, SmolLM, StableLM, Grok, Falcon, and MiniCPM across FP32 through Q2_K quantization.
- **llms_txt_generate** — Build an llms.txt file (llmstxt.org format): an H1 site name, a blockquote summary, optional prose, H2 sections of "- [title](url): description" links, and an "## Optional" section last. Root-relative URLs are resolved against the origin; off-origin, duplicate and placeholder links are reported as warnings. Also returns a robots.txt snippet allowing the major AI crawlers, a Link header and an HTML <link> pointing at /llms.txt. Generates text only and fetches nothing, so it cannot check that the linked pages exist.
- **loan_calculate** — Amortise a fixed-rate loan and show the impact of an optional monthly extra payment on payoff time and total interest.
- **lorem_ipsum_generate** — Generate Lorem Ipsum placeholder text: words, sentences, or paragraphs.
- **macro_calculator** — Calculate daily calorie needs and a macronutrient split (protein, carbs, fat in grams and kcal) for weight loss, maintenance, or muscle gain. Uses Mifflin-St Jeor BMR, an activity multiplier, a +/-500 kcal goal adjustment, and goal-specific ratios.
- **markdown_table_generator** — Build a GitHub-flavoured Markdown table and return the markdown string. Give headers plus rows (arrays of cell values) and optional per-column alignments (left, center, right), or import from CSV, TSV, or a JSON array of objects. Pipe characters in cells are escaped.
- **markdown_table_parse** — Parse a GitHub-flavored Markdown table into structured rows: headers, column alignments, cell rows, and one record object per row. This is the data step of the Markdown Table to Image tool; the PNG rendering stays in the browser.
- **markdown_table_to_csv** — Convert a GitHub-flavored Markdown pipe table to RFC 4180 CSV. Finds every table in the text (a header row, then a delimiter row such as | --- | :---: |), skips tables inside ``` or ~~~ code fences, and converts the one you pick by its 1-based number. The delimiter row is dropped; \| becomes a literal pipe; inline Markdown in a cell (**bold**, [links](url), `code`) is kept as written. A row with fewer cells than the header gets empty cells, and extra cells are dropped, as GitHub does when it renders the table; both are reported by line number. Returns the CSV, the parsed rows and a summary of every table found.
- **markdown_to_html** — Convert Markdown to HTML, including GFM tables, task lists, nested lists, strikethrough, fenced code and autolinks. Raw HTML in the source is escaped rather than passed through, and link and image destinations are restricted to http, https, mailto and tel.
- **markdown_toc** — Build a nested Markdown table of contents from a document's headings, with GitHub-style anchor links by default (or GitLab anchors, or plain labels), and return both the TOC and the document with the TOC inserted. Reads ATX (#) and Setext (=== / ---) headings; skips headings inside fenced and indented code blocks, HTML comments and front matter. Repeated headings get the anchors the host gives them (#setup, #setup-1). The TOC replaces a [TOC] line or fills <!-- toc --> ... <!-- tocstop -->; with no marker it goes after a leading H1, else at the top. A one-shot insert: nothing watches the file.
- **math_formula_templates** — Return LaTeX source for well-known math and physics formulas from the built-in template library of the math expression generator page (40+ formulas across algebra, calculus, trigonometry, linear algebra, statistics, physics, and Greek symbols). Filter by category or by a search term over names and LaTeX. This tool returns LaTeX strings only; it does not render them.
- **merge_bookmarks** — Merge two or more Netscape bookmarks.html exports (Chrome, Firefox, Edge, Safari) into one bookmarks.html that any browser imports. Every link and folder is kept in file order; by default each file goes under its own top-level folder named after the file, and wrap_in_folders=false merges folders that share a name (both "Bookmarks bar" folders become one). dedupe keeps the first copy of each address, compared the way dedupe_bookmarks compares them: host case, default port and trailing slash folded, and by default utm_* / fbclid / gclid parameters and the #fragment ignored. An input with no bookmarks is reported and the rest still merge. Descriptions, icons and tags are not carried over, empty folders are not written, and no link is fetched.
- **merge_ics** — Merge several iCalendar (.ics) exports into one calendar file for a single import or archive. Every event, to-do and journal entry is carried in file order under one VCALENDAR; VTIMEZONE blocks are kept once per TZID; RRULE, EXDATE, VALARM, ATTENDEE and every other property are written exactly as read. By default nothing is removed. dedupe_uid keeps one copy per UID (plus RECURRENCE-ID, so a modified occurrence never loses its series), preferring the newest LAST-MODIFIED, then DTSTAMP, then SEQUENCE. regenerate_uids rewrites every UID so a calendar app treats the events as new. An input that is not a calendar is reported and the rest still merge. Recurrence rules are never expanded and no calendar URL is fetched.
- **merge_vcf** — Combine several .vcf vCard files into one importable file. Pass each file as { name, content }. Every complete BEGIN:VCARD … END:VCARD block is copied as written, so PHOTO, X- fields, the vCard version and the line endings survive untouched; cards appear in file order, then in order within each file, joined with the line ending of the first file (CRLF, LF or CR). With skip_duplicates (default true) a later card is dropped only when its name, its phone digits and its email addresses all equal an earlier card; there is no fuzzy name matching, and a card with no name, phone or email only matches an identical card. A card cut off before END:VCARD is refused and counted, and a file with no complete card is reported with an error while the rest still merge.
- **meta_tag_generator** — Generate HTML <head> meta tags (title, description, keywords, robots, canonical, Open Graph, Twitter Card, viewport, charset, language) and return the HTML block plus the list of tags. Open Graph and Twitter values fall back to the basic title/description/canonical when left empty.
- **mime_type_finder** — Return MIME types with their file extensions and descriptions. Search by extension (".png" or "png"), by MIME type ("application/json") or by keyword ("spreadsheet"); filter by category.
- **mock_json_generator** — Generate an array of mock JSON records from a list of field definitions. Field types include uuid, name, firstName, lastName, email, phone, address, city, country, zipCode, company, jobTitle, username, password, url, avatar, boolean, integer, float, price, date, datetime, paragraph, sentence, word, and color. Output is random on every call.
- **morse_code** — Encode text to Morse code or decode it back. Letters are separated by a space and words by " / ".
- **mortgage_calculate** — Compute a fixed-rate mortgage monthly payment using the standard amortisation formula M = P·r(1+r)^n / ((1+r)^n - 1). Assumes monthly compounding.
- **nanoid_generate** — Generate one or more NanoID-style identifiers. Defaults to the standard 21-char URL-safe alphabet used by the npm `nanoid` package. Uses rejection sampling so custom alphabets stay unbiased.
- **ndjson_to_csv** — Convert newline-delimited JSON (NDJSON, JSON Lines, .jsonl) into a flat CSV. Each line is one JSON object; the header is the union of every key in first-seen order, and a key a row does not have becomes an empty cell. Nested objects are flattened to dot paths (user.name) and array items to indexed keys (tags[0]) by default, or kept as JSON text in one cell with nested set to json. A line that is not valid JSON or not an object is skipped and reported by its line number; the other lines still convert. A JSON array is refused with a pointer to the JSON to CSV tool. Quoting follows RFC 4180. Values are written as text and never coerced.
- **net_worth_calculator** — Return net worth (total assets minus total liabilities), the debt-to-asset ratio in percent, and subtotals per category. Asset fields: checking, savings, money_market, cash_other, stocks, bonds, mutual_funds, crypto, retirement_401k, ira, pension, primary_home, other_real_estate, vehicles, personal_property. Liability fields: mortgage, home_equity, auto_loan, credit_cards, student_loans, personal_loans, medical_debt, other_debt.
- **neumorphism_generator** — Generate soft-UI (neumorphism) CSS from a single surface colour. The effect is a matched pair of shadows — a lighter one up-left and a darker one down-right — derived from the surface colour itself, which is why the element must sit on that same colour to read correctly. Shapes: flat, concave and convex change the background gradient; pressed moves both shadows inside with the inset keyword. Returns the full rule, the bare box-shadow value, the background, and the two derived colours.
- **number_base_convert** — Convert an integer between bases 2, 8, 10, and 16.
- **one_rep_max_calculator** — Estimate a one-rep max (1RM) from a weight lifted for a number of reps, using Brzycki, Epley, Lander, Lombardi, Mayhew, O'Conner, and Wathen formulas. Returns the chosen formula result, every formula result, and a training-weight table (100% to 60%) with rep ranges and zones.
- **open_graph_preview** — Extract Open Graph and Twitter Card tags from an HTML document (or take them as fields), and return the parsed values, validation issues (missing or too-long title/description/image/url/card), and regenerated <meta> tags. Does not fetch URLs — pass the page HTML.
- **openapi_validator** — Validate an OpenAPI 3.x (or Swagger 2.0) document given as JSON or YAML and return a report with errors, warnings, and summary info (title, version, path count, operation count). Errors cover a missing version field, missing info.title or info.version, a missing paths object, paths that do not start with "/", and operations without responses. Warnings cover missing operationId, Swagger 2.0 input, non-3.x versions, and component schemas with no type, $ref, or composition keyword.
- **opml_to_bookmarks_html** — Convert an OPML subscription or outline export (Feedly, Inoreader, NetNewsWire, podcast apps) into a Netscape bookmarks.html that Chrome, Firefox, Edge and Safari import. Each outline carrying an address becomes a bookmark titled with its text or title attribute, and folder outlines become nested bookmark folders. link_to "site" (default) uses the outline's htmlUrl, the site address, and falls back to the feed address (xmlUrl) when there is none; "feed" prefers xmlUrl. OPML 2.0 link outlines (type="link" with url) are kept. root_folder puts everything under one folder. Attribute names are matched case-insensitively, entities are decoded, and broken XML is refused with the parser's reason. Empty folders are left out unless include_empty_folders is true, and no feed is fetched or checked.
- **opml_to_csv** — Flatten an OPML subscription export (Feedly, Inoreader, NetNewsWire, podcast apps) into CSV with one row per feed: title, xml_url, html_url, folder_path, description and type. Nested folders become a folder_path joined with " / ". An outline carrying xmlUrl or url is a feed; an outline without one is a folder, and include_folders adds a row for each folder too. OPML 1.0 and 2.0 are read without a DOM, attribute names are matched case-insensitively and entities are decoded. Feed URLs are never fetched or checked.
- **pace_calculator** — Running pace calculator. Give any two of distance, finish time and pace, and it solves for the third, then projects 5K, 10K, half marathon and marathon times at that pace. Times accept mm:ss or h:mm:ss; pace is per kilometre or per mile.
- **palindrome_check** — Check if a string reads the same forwards and backwards. Strict mode compares the raw string; relaxed (default) lowercases and strips non-alphanumeric characters first.
- **password_breach_checker** — Return whether a password appears in known data breaches and how many times, using the Have I Been Pwned k-anonymity range API. Send `password` and it travels to this API over TLS, is hashed here, and only the first 5 characters of its SHA-1 go on to HIBP; the request body is not logged. For end-to-end k-anonymity send `sha1_prefix` (the first 5 hex characters of the SHA-1 you computed) instead, and match your own suffix in the returned `range`.
- **password_generate** — Generate cryptographically-strong passwords. Guarantees at least one char from each enabled class.
- **password_pattern_validator** — Validate a password against configurable rules and return each check (pass/fail with severity), a 0-100 score, and a strength label. Required rules: minimum length plus optional uppercase, lowercase, digit, and special-character requirements. Recommended rules: no common passwords, no keyboard patterns, no 3+ repeated characters, no sequential runs. Also reports an entropy estimate.
- **password_strength** — Estimate password strength from its character-class entropy (length x log2 of the pool: 26 lowercase, 26 uppercase, 10 digits, 32 ASCII symbols; a space is not a symbol). Rating bands: under 28 bits very-weak, 28-35 weak, 36-59 fair, 60-79 strong, 80 and more very-strong. A repeated (aaa) or sequential (abc, 123, qwerty) pattern lowers the rating one step, and a password that contains a common password is very-weak with an instant crack time. Returns a 0-4 score, a label, the entropy, a brute-force crack time and feedback. The same rule as the FindUtils Password Strength Checker page. NOT a substitute for a full dictionary check (zxcvbn).
- **paycheck_calculator** — Estimate United States take-home pay from a gross salary: federal income tax using the published bracket tables and the standard deduction, plus the employee half of FICA — 6.2% Social Security up to the annual wage base, 1.45% Medicare on everything, and the additional 0.9% Medicare tax above the threshold for your filing status. Traditional 401(k) contributions reduce income tax but not FICA; cafeteria-plan contributions such as an HSA or health premiums reduce both, which is why they are separate inputs. Covers the tax years in the published tables. State and local income tax are NOT included, so the result is an upper bound on take-home for anyone in a state that taxes wages.
- **pdf_delete_pages** — Remove pages from a PDF and return the rest in their original order. Pages are given as 1-based numbers and ranges, such as "2,5-7". Input and output are base64-encoded PDFs. Removing every page is refused rather than returning an empty document.
- **pdf_merge** — Combine several PDFs into one, in the order given. Each input is a base64-encoded PDF and the result is a base64-encoded PDF. Pages are copied as they are — nothing is re-rendered, re-encoded or watermarked. An encrypted PDF must be unlocked first.
- **pdf_metadata_remover** — Remove document metadata from a PDF: the Info dictionary fields (Title, Author, Subject, Keywords, Creator, Producer, CreationDate, ModDate and any custom keys) and the XMP metadata streams. Pass fields to remove only some Info keys. The result lists what the file carried before and what the cleaned file carries, read back from the output. Page text, images, annotations, embedded files and the trailer document ID are not changed. Encrypted PDFs are refused. Input and output are base64-encoded PDFs.
- **pdf_organize** — Reorder the pages of a PDF. The order is a 1-based list such as "3,1,2" or "5-1" for a reversed document, and the result contains exactly the pages named, in that order — so a short list also drops the pages it leaves out. Input and output are base64-encoded PDFs.
- **pdf_page_numbers** — Add page numbers to a PDF. The format string uses {n} for the page number and {total} for the count, so "Page {n} of {total}" and a bare "{n}" both work. Numbering can start at any value and can skip the first page, which is what a title page usually wants. Input and output are base64-encoded PDFs.
- **pdf_rotate** — Rotate pages of a PDF by 90, 180 or 270 degrees clockwise, or the negative of those for anticlockwise. Rotation is added to whatever a page already carries, so rotating a page twice by 90 leaves it at 180. Omit the page list to rotate every page. Input and output are base64-encoded PDFs.
- **pdf_split** — Take a selection of pages out of a PDF into a new one. Pages are given as 1-based numbers and ranges, such as "1,3,5-8", and come out in the order written. Input and output are base64-encoded PDFs. Pages are copied as they are — nothing is re-rendered or re-encoded.
- **pdf_watermark** — Stamp text across the pages of a PDF — CONFIDENTIAL, DRAFT, a company name. The text is drawn centred and rotated over the existing content at the opacity you choose, so the page underneath stays readable. Input and output are base64-encoded PDFs. This is a visual mark, not a security control: anyone can remove it with the same kind of tool.
- **pem_decoder** — Parse PEM certificates, CSRs, and keys in the browser-equivalent decoder. Returns type, DER length, subject, issuer, dates, SAN, and algorithm. Private key bits are not returned.
- **percentage_calculate** — Percentage math. Modes: percent_of (a% of b), what_percent (a is what % of b), percent_change (from a to b).
- **pgp_encryption_tool** — Encrypt or decrypt a short message with RSA-OAEP (SHA-256) PEM keys, or generate a new RSA key pair. Returns the armoured ciphertext block, the decrypted plaintext, or the PEM public/private key pair. Note: this uses plain RSA-OAEP with SPKI/PKCS#8 PEM keys, not the OpenPGP message format. Messages are limited to the RSA block size (190 bytes for 2048-bit keys).
- **phone_format** — Validate a phone number and format it as E.164 (+CCNNN…), international and national, using libphonenumber metadata for every country. A number with a leading "+" carries its own country; otherwise give country (ISO code such as "US", "GB", "TR") or country_code (calling code such as "1", "44", "90"). Returns valid=false with a reason instead of raising for numbers that are not valid.
- **placeholder_image_generator** — Generate a placeholder image as an SVG string: a solid background with centred bold text (the dimensions by default, or custom text) and a thin border. Returns the SVG, a data: URL for it, and the computed font size. Sizes up to 4000x4000; the page's presets are available by name.
- **plist_json_converter** — Convert an Apple property list (Info.plist, preferences, .mobileconfig, entitlements) to JSON, or JSON to an XML plist. Reads XML plists and binary bplist00 files; binary input is passed as base64 with input_encoding "base64". plist-to-json maps dict to object, array to array, integer and real to numbers, true/false to booleans, <date> to an ISO 8601 string and <data> to a base64 string, and lists every date and data path in warnings so the conversion is explainable. Integers beyond JavaScript's safe range are kept as strings. json-to-plist writes an XML plist 1.0 with the Apple DOCTYPE and tab indentation (binary output is not produced): whole numbers become <integer> unless written with a decimal point, ISO 8601 UTC strings become <date> (iso_strings_as_dates), strings starting with data_prefix become <data>, and null is refused because plists have no null. mode is detected when omitted: a leading "{" or "[" is JSON, "<" is an XML plist, and "bplist" bytes are binary. Signed profiles and OpenStep-style plists are refused with a reason.
- **port_reference_guide** — Return well-known network ports that match a port number, service name, protocol, or category, with a security note (safe / caution / insecure) for each. Call with no filters to list every port in the reference table.
- **postman_to_curl** — Convert a Postman collection (v2.x JSON) into curl commands, one per request, and return them as a script plus a per-request list. Folders are walked recursively; a single request object is accepted too. Each command carries the method, resolved URL (raw or host/path/query), enabled headers, bearer or basic auth, and raw, urlencoded, or form-data bodies. Output uses short flags by default; long_form switches to --request, --header, --user, --data, --form.
- **prime_check** — Check whether an integer is prime. For composite numbers, returns the prime factorisation. Supports inputs up to 2^53-1 but is only fast for n ≲ 10^12.
- **privacy_policy_checker** — Check a privacy policy text for 24 expected disclosures and return a 0-100 completeness score, each check with found/missing and severity, up to 5 warnings for missing critical elements, and a one-line summary. Keyword/regex based — no legal advice.
- **privacy_policy_generator** — Generate a privacy policy in Markdown from a short questionnaire: what personal data you collect (name, email, phone, address, payment, usage data, cookies, location), which third parties you use (analytics, ads, payment processor, data sharing), and which regimes you address (GDPR, CCPA, COPPA), plus data deletion/export rights and a retention period. Returns the markdown, its section headings, and a word count. Every argument is optional; unanswered fields use the page defaults and missing company details become [placeholders].
- **profit_margin_calculator** — Return cost, selling price, profit, profit margin (percent of price), and markup (percent of cost). Mode cost_price takes cost and selling_price; mode margin takes cost and a target margin; mode markup takes cost and a target markup.
- **purchase_order_generator** — Return a purchase order as structured data and as Markdown text: line items with amounts, subtotal, tax, shipping, and total, plus company, vendor, shipping, dates, notes, and terms. Amounts use 2 decimals. This tool does not produce a PDF.
- **qr_code_generator** — Generate a QR code as an SVG file, the same file the QR Code Generator page downloads. Encode a URL or text; for Wi-Fi send WIFI:T:WPA;S:<network>;P:<password>;; and for a contact a vCard (BEGIN:VCARD … END:VCARD). Choose the size, margin, colours and error correction (L, M, Q, H).
- **qr_text** — Generate a scannable QR code as text art. Version 1-10 with level M error correction, so the result survives being read off a screen.
- **query_string_parse** — Parse a URL query string into an object. Leading "?" is optional. Repeat keys collapse into string arrays.
- **query_string_stringify** — Serialise an object into a URL query string. Array values repeat the key. Null/undefined values are skipped. Set prefix=true to include the leading "?".
- **quiz_maker** — Build a quiz from multiple-choice, true/false and open-ended questions and return the numbered quiz, an answer key (with model answers for open-ended questions), a printable plain-text sheet, Markdown, and (when answers are given) the graded score with per-question results. Open-ended answers are graded only through `marks`.
- **random_key_generator** — Generate cryptographically random keys (API keys, tokens, secrets) and return them as a list of strings. Formats: hex, base64 (URL-safe characters only), alphanumeric, or base58. Optional uppercase and prefix. Default: five 32-character hex keys.
- **random_name_picker** — Pick a random winner from a list of names. Returns the winner, every pick in order, and the names left in the pool. Duplicate and blank names are dropped first. Uses cryptographic randomness.
- **random_number** — Generate cryptographically-random integers or floats in a range.
- **random_picker** — Generate random numbers, pick random items from a list, or split people into random teams. Returns the numbers, the picks, or the teams, plus a ready-to-paste text. Uses cryptographic randomness. Mode "number": min/max/count/allow_duplicates. Mode "list": items (array of strings) and pick_count (no repeats; count is accepted as an alias). Mode "teams": members (array of strings) and team_count (round-robin after a shuffle).
- **random_string** — Generate cryptographically-random strings from a chosen charset.
- **readability_calculator** — Compute six readability scores for English text (Flesch Reading Ease, Flesch-Kincaid Grade, Gunning Fog, SMOG, Coleman-Liau, Automated Readability Index) plus an average grade level, a reading-level label, a target audience, and text statistics. Scores are null when the text has fewer than 10 words.
- **reading_time** — Estimate reading time for a block of text. Default speed is 200 wpm, the figure every FindUtils page uses; pass wpm to change it. Returns minutes, seconds, and a human-readable string.
- **redirect_chain_checker** — Follow the redirect chain of a public http(s) URL hop by hop and return each hop's URL, HTTP status, Location and time in milliseconds, plus the final URL and the number of hops. Requests use HEAD (GET only when HEAD is refused), follow at most 10 hops, detect loops, refuse any hop to a private, loopback, link-local or local address, and check the final HTML page for a meta refresh by reading at most 16 KB of it.
- **refinance_calculator** — Return the new monthly payment, monthly savings, total cost of the current vs the new loan, total savings, break-even month, and whether a mortgage refinance is worth it. Closing costs are added to the new loan balance. Rates are yearly percentages. Give current_monthly_payment, or give current_rate and it is computed from the balance and the remaining months.
- **regex_test** — Test a JavaScript regular expression against input text. Returns every match (up to 1000) with its index, its numbered capture groups (captures: $1, $2, …, null for a group that did not take part) and its named groups. With replace, also returns the text after String.prototype.replace, which understands $1, $<name>, $&, $` , $' and $$ and replaces every match only when the g flag is set. Input past 50,000 characters is cut and marked truncated. Patterns with nested quantifiers are refused.
- **relationship_calculator** — Calculate how long a relationship has lasted between a start date and a target date: years/months/days, totals in days, weeks, months, hours, minutes, and seconds, the weekday it started, the next anniversary, and passed/upcoming milestones (100 days to 10 years).
- **report_card_generator** — Generate a report card from a list of subjects with letter grades and credits and return the credit-weighted GPA on a 4.0 scale, per-subject grade points, total credits, a plain-text card, and a standalone HTML card. Grades: A+ A A- B+ B B- C+ C C- D+ D D- F.
- **research_title_generator** — Generate up to 20 academic research paper titles from a topic, field, variables, population, and research type, and return each title with its style (descriptive, declarative, interrogative, compound). Titles come from deterministic templates; the same inputs and regenerate_key always give the same list.
- **retirement_calculator** — Return the projected savings at retirement, the amount needed to fund an inflation-adjusted monthly income until life expectancy, the gap or surplus, whether you are on track, the extra monthly saving needed, and the 4%-rule sustainable monthly withdrawal. Rates are yearly percentages.
- **retro_meeting** — Turn a finished sprint-retrospective board into shareable results: a Markdown summary grouped by category with items sorted by votes, a CSV export, and stats (item counts, revealed count, participants, counts per category, top-5 voted items). Supports the page's formats — standard (went well / needs improvement / action items), sailboat, 4Ls, start-stop-continue — or a custom list of categories. Hidden (unrevealed) items stay out of the exports, as on the page.
- **reverse_dns_lookup** — Look up the reverse DNS (PTR) hostname of an IPv4 or IPv6 address through a public DNS-over-HTTPS resolver. Returns the in-addr.arpa or ip6.arpa name queried, the response code and every PTR hostname with its TTL; found is false when there is no PTR record (NXDOMAIN or an empty answer).
- **robots_txt_generator** — Return a robots.txt file built from user-agent rules (allow, disallow, crawl-delay), sitemap URLs and an optional Host directive, or from a preset: allow-all, block-all, wordpress, ecommerce.
- **robots_txt_tester** — Test URLs or paths against robots.txt text for a given crawler, following RFC 9309 as Google implements it: the group naming the crawler's product token (all such groups merged, "*" only as a fallback), * and $ wildcards, the longest matching rule wins and Allow wins a tie. Returns allowed/blocked per path with the deciding rule and its line, plus sitemaps, crawl-delay and line-numbered warnings. Checks the pasted text only and fetches nothing.
- **roi_calculator** — Return the return on investment: total invested (amount plus extra costs), net gain, simple ROI percent, annualized ROI percent, years to double at that rate (rule of 72), gain per year, and the percentage gain on the base amount alone.
- **roman_numeral** — Convert between Roman numerals and Arabic integers (1-3999).
- **rot13** — Apply the ROT13 Caesar cipher to text. Self-inverse — running the output through rot13 again recovers the original. Non-letters pass through unchanged.
- **rtf_to_markdown** — Convert Rich Text Format (.rtf) source to Markdown. Handles paragraphs, bold, italic, strikethrough, bullet and numbered lists, hyperlinks, Unicode and code-page escapes. Images, tables, headers and footers are dropped.
- **rubric_generator** — Build a grading rubric from weighted criteria and performance levels and return the rubric grid, the total weight (with a flag when it is not 100%), the maximum score, a CSV, and a Markdown table. Default levels are Excellent (4), Good (3), Satisfactory (2), Needs Improvement (1).
- **safari_bookmarks_to_html** — Convert Safari's Bookmarks.plist (from ~/Library/Safari on a Mac or a backup of it) into a Netscape bookmarks.html that Chrome, Firefox, Edge and other browsers import. Reads the binary bplist00 file Safari writes, sent as base64 with input_encoding "base64", or an XML plist from plutil -convert xml1 as text. The WebBookmarkTypeList folders and WebBookmarkTypeLeaf bookmarks (URLString and URIDictionary.title) are walked in order: the BookmarksBar root becomes a "Favorites" folder marked as the toolbar folder, BookmarksMenu becomes "Bookmarks Menu", and the Reading List (com.apple.ReadingList) becomes a "Reading List" folder with each item's date added, unless include_reading_list is false. The History proxy entry is skipped, empty folders are left out unless include_empty_folders is true, and sync metadata, icons and Reading List preview text are not carried over. A plist that is not Safari's bookmarks file (an Info.plist, a .webloc) is refused with what it looks like. Nothing is fetched.
- **salary_calculator** — Return the same pay expressed as hourly, daily, weekly, bi-weekly, semi-monthly, monthly, and yearly amounts. Assumes 52 weeks and 260 working days a year; the hourly figure uses hours_per_week.
- **savings_calculator** — Return the future value of savings with compound interest and monthly contributions: total value, total contributions, total interest, and a year-by-year table of balance, cumulative contributions, and interest earned that year. Rate is a yearly percentage.
- **sbv_to_srt** — Convert a YouTube SubViewer (.sbv) caption export to SubRip (.srt), or back again. YouTube Studio still hands out .sbv, which most editors and players will not open: its timing line is `0:00:01.000,0:00:04.000` where SubRip wants `00:00:01,000 --> 00:00:04,000`, and it carries no cue numbers, so simply renaming the file does not work. Going to SRT pads the hours, swaps the separators and numbers the cues from 1; going back to SBV strips the numbers and restores the SubViewer timing. Cue text and order are preserved exactly. Direction is detected from the input by default.
- **schema_org_generator** — Superseded by json_ld_generator, which builds these 8 types and 6 more with the same output; this id stays so existing callers keep working. Generate Schema.org JSON-LD markup for 8 types (Organization, LocalBusiness, Person, Product, Event, Recipe, JobPosting, Course) and return the JSON-LD string, a ready <script> tag, the schema object, and the list of required fields that are still missing. Comma-separated values for sameAs and recipeIngredient become arrays.
- **scientific_calculator** — Evaluate a scientific math expression and return the numeric result (12 significant digits). Supports + - * / ^ (or **), parentheses, n!, π (or pi), e, and the functions sin, cos, tan, asin, acos, atan, sinh, cosh, tanh, asinh, acosh, atanh, log (base 10), ln, sqrt (or √), cbrt, abs, exp. An nth root is x^(1/n). Trigonometry in radians or degrees; hyperbolic functions take a plain number and ignore the angle unit. Uses a safe parser — no code execution.
- **scope_creep_tracker** — Measure scope creep on a project and return the numbers a stakeholder report needs: original (baseline) effort, approved / pending / rejected change effort, total current scope, growth percent versus the baseline, approval rate, counts of change requests by type (feature, enhancement, clarification, bug, removal) and by status (pending, approved, rejected), the list of approved changes, and an executive-summary paragraph. Growth above 20% is flagged as high, as on the page.
- **seating_chart_maker** — Assign students to a rows × columns seating grid (in list order, or shuffled) and return the grid, each student's row/column/seat number, the students left without a seat, a plain-text chart with the front of the room at the top, and a CSV. Pass a seed for a reproducible shuffle.
- **security_headers_analyzer** — Grade a set of HTTP response headers for security: returns a 0-100 score, a letter grade (A+ to F), a pass/fail/warning summary, and a per-header finding with a recommendation for CSP, HSTS, X-Content-Type-Options, X-Frame-Options, Referrer-Policy, Permissions-Policy, and the Cross-Origin-* headers. Pass the headers you already have; this tool does not fetch the URL.
- **self_employment_tax_calculator** — Return the yearly self-employment tax bill for the USA (SE tax: Social Security, Medicare, additional Medicare, plus federal income tax), Türkiye (Bağ-Kur premium plus income tax), or KKTC (social security plus income tax after the personal allowance), with taxable income, quarterly payment, effective rate, and net income after tax. Tax years 2024 and 2025.
- **seo_title_description_writer** — Analyze an SEO title and meta description and return character counts, estimated SERP pixel widths against Google desktop/mobile limits, keyword placement, power words, an emotional marketing value (EMV) score, and ready <title>/<meta> tags. Pixel widths are estimated from Arial glyph widths, not measured in a browser.
- **serp_preview** — Return how a page title and meta description will display in Google search results on desktop or mobile: the truncated display text, character and pixel counts against Google's limits, an ok/warn/danger status per field, the breadcrumb URL, and the HTML <title>/<meta> snippet.
- **signature_generator** — Generate a typed signature as an SVG string: the name is set in a handwriting font (cursive, elegant, bold, or casual) in the chosen colour on a 600x200 white canvas. Returns the SVG plus the font family used.
- **site_to_markdown** — Convert a full web page's HTML into clean Markdown, the way the Site to Markdown page does: navigation, footers, scripts, styles, iframes and SVG are removed, the content root is <main>, <article> or [role="main"] when present, and headings, lists, links, images, code blocks, blockquotes and tables become Markdown. Pass the page HTML (this tool does not fetch) and optionally the page URL so relative links and images resolve to absolute ones. Returns the markdown plus word, line, and character counts.
- **sitemap_validator** — Validate sitemap XML text against the sitemaps.org protocol: well-formed XML, <urlset> or <sitemapindex> and its namespace, absolute http(s) <loc> under 2,048 characters with & escaped, duplicates, mixed hosts, W3C-datetime <lastmod> not in the future, the seven <changefreq> values, <priority> 0.0-1.0, and the 50,000-URL limit. Every issue has a severity, rule id and line number. Accepts up to 10 MB of XML (the protocol allows 50 MB). Checks the pasted text only and fetches nothing, so it does not test that the URLs respond.
- **sleep_calculator** — Calculate the best bedtimes for a wake-up time, or the best wake-up times for a bedtime, based on 90-minute sleep cycles plus 15 minutes to fall asleep. Returns 4 options (3-7 cycles) with duration and quality (optimal/good/fair).
- **slug_generate** — Turn a string into a URL-safe slug (kebab-case by default, Unicode-normalized).
- **slugify_deep** — Slugify text with locale-aware diacritics handling (Turkish, German, French, Spanish) before falling back to Unicode NFD stripping. Produces lowercase, alphanumeric + separator output.
- **social_media_bio_generator** — Compose a social-media profile bio from a profession, skills, an achievement, a location and a call to action in one of five styles (professional, creative, minimalist, fun, inspirational). Returns the bio, its lines, and its length against the platform limit (Instagram 150, Twitter 160, TikTok 80, LinkedIn 220, YouTube 1000). Template-based, no AI.
- **social_media_calendar_generator** — Turn a list of planned social media posts into a content calendar: a CSV export (Date, Time, Platform, Content Type, Title, Description, Hashtags), a plain-text schedule, posts grouped by date, counts per platform and content type, and a Monday-first month grid for the month you choose (default: the month of the earliest post). Each post needs a date, a platform (e.g. Instagram, Twitter/X, LinkedIn, TikTok, Facebook, YouTube), a content type (Post, Story, Reel, Video, Article, Thread, Live) and a title.
- **split_ics** — Split one large iCalendar (.ics) file into smaller .ics files so an importer that rejects a big calendar accepts each part. Entries are cut by count in file order, at most chunk_size per part; a recurrence master and its modified occurrences (same UID) always stay in one part. Every part is a complete VCALENDAR with the source header properties and only the VTIMEZONE blocks its own entries reference. Recurrence rules are copied as they are, never expanded. Nothing is uploaded and no importer limit is assumed: pick the chunk size your calendar accepts.
- **sprint_capacity_calculator** — Calculate a team's realistic sprint capacity in hours and story points. Starts from each member's hours per day × the working days in the sprint, then subtracts meeting overhead, public holidays that fall on working days, and per-member PTO; returns the deductions, final hours, utilization rate, recommended story points (final hours ÷ hours per point), the average of any historical velocity you pass, and a per-member breakdown.
- **sql_formatter** — Format (beautify) or minify a SQL query and return the result with lint warnings. Format mode puts each clause (SELECT, FROM, WHERE, JOIN, ...) on its own line, uppercases keywords, and indents by the chosen width; dialect adds MySQL, PostgreSQL, or SQLite keywords. Warnings flag unmatched parentheses, unclosed strings, empty clauses, and a missing final semicolon.
- **sql_to_csv** — Read rows out of SQL INSERT statements and return CSV, one file per table. Parses a mysqldump, a SQLite dump or a pg_dump made with --inserts as text — nothing is executed against a database. PostgreSQL COPY blocks (the pg_dump default) are not read. Column names come from the INSERT column list, then from a CREATE TABLE in the same input, then from positions. NULL becomes an empty cell. Dump noise such as SET, LOCK TABLES and comments is ignored, and an INSERT ... SELECT with no literal VALUES is reported rather than guessed at.
- **sql_to_json** — Read rows out of SQL INSERT statements (mysqldump, SQLite dump, pg_dump made with --inserts; PostgreSQL COPY blocks are not read) and return JSON: an array of objects, or an object keyed by table when the dump holds rows for more than one table. The SQL is parsed as text — nothing is executed. Column names come from the INSERT column list, then from a CREATE TABLE in the same input, then from positions (column_1, column_2, ...). NULL becomes null, unquoted TRUE/FALSE become booleans, unquoted numbers become JSON numbers unless a double cannot hold them exactly (beyond ±9007199254740991 or more than 15 significant digits), in which case they stay strings. Quoted values stay strings; with coerce_numbers a quoted column becomes numbers only when every quoted value in that column writes back as the same text, so a column holding '007' stays all strings. Functions and keywords such as NOW() or DEFAULT are not evaluated: their SQL text is kept as a string and listed in notes. Hex and bit literals stay as text. An INSERT ... SELECT has no literal rows and is listed in skipped rather than guessed at.
- **srt_to_txt** — Turn a SubRip (.srt) or WebVTT (.vtt) caption file into a plain-text transcript: cue numbers and timestamps are removed and the cue text is kept in order. join "blank_line" (default) puts each cue on its own paragraph; "paragraph" joins everything into one block of running text. HTML tags such as <i> and ASS override blocks such as {\an8} are stripped by default. The text is not summarized or rewritten.
- **srt_to_vtt** — Convert SubRip (.srt) captions to WebVTT (.vtt) and back. The direction is detected from the input by default: SRT uses a comma before the milliseconds, WebVTT uses a dot and starts with a WEBVTT header. Timestamps are normalized to HH:MM:SS with three fraction digits, VTT cue settings are preserved, and NOTE and STYLE blocks are skipped. Only the format changes; the caption text is never translated or edited.
- **ssl_certificate_checker** — Return the TLS certificate details of a public hostname: validity, issuer, subject, expiry and days remaining, protocol, key size, signature algorithm, serial, SHA-256 fingerprint and SANs. The scan can take a while; when status is "in_progress" call again after retry_after_seconds.
- **state_machine_designer** — Validate a finite state machine given as nodes and edges and return a normalized machine config plus issues. Checks for missing ids, dangling transitions, duplicate labels, missing or multiple initial states, unreachable states, and outgoing transitions from final states. The config matches the designer's "Export Code" output ({ id, initial, states: { State: { EVENT: Target } } }).
- **statistics_calculator** — Descriptive statistics for a list of numbers: count, sum, mean, median, mode, min, max, range, variance, standard deviation, and the quartiles with the interquartile range. Accepts numbers separated by commas, spaces, semicolons or newlines. Sample or population standard deviation.
- **stock_average_calculator** — Return the average cost per share (dollar cost averaging) across several buys, the total shares, total invested, break-even price, and, when a current price is given, the position value and unrealized profit or loss in money and percent.
- **string_escape** — Escape or unescape a string for JSON, HTML, URL, or regex contexts.
- **structured_data_tester** — Validate JSON-LD structured data (given directly or extracted from HTML <script type="application/ld+json"> blocks) and return, per detected schema.org type, the required and recommended properties that are present or missing, a pass flag, and rich-result eligibility for 15 supported types. Does not fetch URLs.
- **subnet_calculator** — Return the full IPv4 subnet breakdown for an address: network and broadcast address, subnet mask, wildcard mask, binary mask, first and last usable host, total and usable host counts, IP class (A-E), and IP type (public, private, loopback, link-local, multicast, reserved). Accepts CIDR notation (192.168.1.0/24), a bare IP (defaults to /24), or an IP plus a dotted subnet mask.
- **subtitle_clean** — Clean the text of a SubRip (.srt) or WebVTT (.vtt) caption file without touching its timing: strip HTML tags such as <i> and <font>, ASS/SSA override blocks such as {\an8} that leak into exported files, and optionally SDH descriptions in brackets ([music], (applause)) and speaker labels ("JOHN:"). Cues that end up empty are dropped and counted, never written as blank cues. Every start and end time is kept exactly. The output keeps the input format unless output_format is "srt".
- **subtitle_fps_convert** — Rescale every cue in a SubRip (.srt) or WebVTT (.vtt) caption file from one frame rate to another, so a track that slowly drifts out of sync after a frame-rate conversion lines up again. Each timestamp is multiplied by source_fps divided by target_fps: going from 23.976 to 25 makes the file play about 4 percent shorter, and the mismatch that was a second at the ten-minute mark becomes several seconds by the end. This is the drift a fixed offset cannot fix, because the error grows with time rather than staying constant. The output keeps the input format, cue text, order and WebVTT cue settings. Use subtitle_shift instead when the whole track is early or late by a constant amount.
- **subtitle_merge** — Join several SubRip (.srt) or WebVTT (.vtt) caption files into one track. Append (the default) lays the files end to end: each later file is offset past the previous one's last cue, plus an optional gap, so parts exported separately — which normally restart at 00:00:00 — become one continuous timeline, and the cues are renumbered from 1. Dual stacks two files on one timeline instead, keeping the primary file's timing and appending each secondary cue's lines to the cue it overlaps, which is how a bilingual subtitle track is built. Inputs may mix the two formats; each is parsed natively and the output is written in one format. A file that cannot be parsed is reported by position and the rest still merge. Cue text is never translated or edited.
- **subtitle_overlap_fix** — Fix overlapping cues in a SubRip (.srt) or WebVTT (.vtt) caption file, the kind a merge, shift or frame-rate change leaves behind and that makes players skip or flash lines. Cues are sorted by start time, then every cue that starts before the previous one ends is moved to start exactly when the previous one ends; if that leaves it shorter than min_duration_ms (default 300), its end is extended to reach that length. Cue text is never changed and no cue is dropped. Returns the fixed file, counts, and the first adjustments so the change can be checked.
- **subtitle_shift** — Shift every cue in a SubRip (.srt) or WebVTT (.vtt) caption file by one fixed offset, so a track that runs early or late lines up with the audio again. A positive offset delays the captions (they appear later); a negative one advances them. The output keeps the input format, cue text, order and WebVTT cue settings. A cue whose start would go below zero is held at zero and counted; a cue that would end before zero is dropped and counted. Timing only: nothing is stretched, translated or edited.
- **svg_animation_generator** — Return an animated SVG (inline CSS @keyframes) and/or the CSS alone, built from a shape template (rect, circle, star, stick figure, sun…) or custom SVG elements, plus animations from a preset (bounce, pulse, spin, fade, slide, squash-stretch, color-shift, float) or custom keyframes.
- **swagger_to_openapi** — Convert a Swagger 2.0 document (JSON or YAML) to OpenAPI 3.0.3 and return the result as pretty-printed JSON with path and schema counts. host, basePath, and schemes become servers; body and formData parameters become requestBody; response schemas move under content; definitions become components/schemas with $ref rewritten; securityDefinitions become components/securitySchemes (basic, apiKey, oauth2 flows).
- **tailwind_to_stylex** — Convert Tailwind CSS v4 theme variables, JSON design tokens, or a static Tailwind config theme into StyleX defineConsts source and TypeScript declarations. Uploaded JavaScript is parsed as data and never executed.
- **tdee_calculator** — Calculate Total Daily Energy Expenditure (TDEE) and Basal Metabolic Rate (BMR) with the Mifflin-St Jeor equation, plus calorie targets for weight loss or gain (mild/moderate/extreme) and a suggested 30/35/35 protein/carbs/fat split. Metric (kg/cm) or imperial (lbs, feet+inches).
- **tech_debt_register** — Analyze a technical debt register and return the stakeholder numbers: active vs resolved counts, total hours to fix, weekly "interest" cost in hours, payoff weeks at a given weekly budget, breakeven weeks, counts by category and severity, the top-5 highest-interest items, a severity/effort matrix (quick wins, strategic, low priority, time sink), and an executive-summary paragraph. Each item has a category (code, architecture, testing, documentation, security, performance), a severity 1-5, effort_to_fix in hours, interest_rate in hours lost per week, and a status (active, resolved, wont_fix).
- **temperature_convert** — Convert temperature between Celsius (C), Fahrenheit (F), Kelvin (K), and Rankine (R). Output is rounded to 4 decimal places.
- **template_to_liquid** — Convert a Handlebars, Mustache or Knap template into Shopify Liquid. Blocks become if/unless/for, Handlebars scopes (this, ../, #with, block params) are resolved to Liquid paths, @index and loop.* become forloop.*, Knap elseif becomes elsif, Knap colon arguments become comma arguments, dayjs date formats become strftime, the ?? fallback becomes | default, helpers with arguments become filters, partials become render tags, and comments become comment blocks. Handlebars and Mustache HTML-escape outputs by default, so their {{ }} outputs gain | escape unless escape_output is false; Knap writes Markdown and gets none. Every construct with no Liquid form (helpers, @key, not inside a compound condition, Markdown-only Knap filters) is kept as written and listed in warnings with its line, never dropped silently. Jinja2, Twig and Nunjucks templates are refused, not half-converted. Auto detects the dialect. The browser page at /developers/json-to-liquid/ previews the result with LiquidJS.
- **text_diff** — Line-by-line diff of two strings using LCS. Returns structured chunks (equal / added / removed) plus a unified-diff-style text block and tallies.
- **text_encryption** — Encrypt text with a password using AES-256-GCM (key derived with PBKDF2-SHA256, 100000 iterations) and return a base64 ciphertext, or decrypt such a ciphertext back to the original text. The base64 blob is salt(16) + iv(12) + ciphertext, compatible with the FindUtils Text Encryption page.
- **text_find_replace** — Find and replace text and return the new text with the match and replacement counts. Supports case-insensitive search, whole-word matching, JavaScript regular expressions (with $1 capture groups in the replacement), and replace-first or replace-all.
- **text_repeat** — Repeat text N times with an optional separator.
- **text_reverse** — Reverse text by characters, words, or lines. Characters are what a reader sees: emoji, flags and accented letters stay whole. Lines keep their line endings (LF or CRLF).
- **text_shadow_generator** — Generate a CSS text-shadow declaration from offset, blur, colour and opacity, or from a named preset (subtle, hard, glow, outline, emboss, retro, neon). Unlike box-shadow, text-shadow has no spread radius and no inset, so weight comes from stacking layers — the outline and neon presets do exactly that. Returns the full "text-shadow: ...;" rule, the bare value, and the resolved layers.
- **text_statistics** — Compute detailed text statistics: characters (with and without spaces), words, sentences, paragraphs, averages, plus Flesch Reading Ease (0-100) and Flesch-Kincaid Grade Level.
- **text_summarizer** — Create an extractive summary of a text and return the summary with word and sentence statistics. Sentences are scored by word frequency, position (first and last sentence boosted), and key indicator words; the top sentences are kept in original order. Length: short (20%), medium (40%), long (60%), or an explicit percentage. Rule-based, no AI model.
- **text_truncate** — Truncate text to a maximum number of characters, or of words, optionally cutting at the last word boundary, with a suffix.
- **thesis_statement_generator** — Generate up to 5 thesis statement variations from a topic, a position, and optional supporting reasons for four essay types, and return each statement with a strength rating (weak, moderate, strong) and improvement tips. Output comes from deterministic templates.
- **thread_generator** — Build a numbered Twitter/X thread from a list of tweets, or split long-form text into tweets of at most 280 characters. Returns each tweet with its character count and limit flag, plus the full thread text numbered "1/N" and separated by "---", exactly as the page copies it.
- **time_difference** — Work out how long there is between two times of day, with no dates involved. Handles a shift that crosses midnight — 22:00 to 06:00 is eight hours, not minus sixteen — and can subtract an unpaid break. Accepts 24-hour times and am/pm, and returns the duration both as hours and minutes and as decimal hours for invoicing.
- **timesheet_calculator** — Return total, regular, and overtime hours plus regular, overtime, and total pay for a list of work entries (start time, end time, break). Times are HH:MM in 24-hour format; an end time before the start time is an overnight shift. Overtime is paid on hours above regular_hours_per_week at overtime_multiplier.
- **timezone_convert** — Convert a datetime between IANA time zones. Uses the browser's/Node's Intl DB, so any well-formed zone name (America/New_York, Europe/Istanbul, Asia/Tokyo, UTC, etc.) works.
- **tip_calculate** — Calculate tip amount, total, and per-person split.
- **tone_analyzer** — Analyze the emotional tone of English text with a rule-based word dictionary and return tone scores (joy, sadness, anger, fear, confidence, analytical, tentative, polite), the dominant tone, an overall sentiment with a 0-100 score, and a formality level. Needs at least 5 words. No AI model involved.
- **travel_budget_calculator** — Estimate a trip budget from per-day and one-off expenses: total per person, total for all travelers, daily spend, and a per-category breakdown with percentages. When expenses is omitted, a default set (flights 500, accommodation 100/day, transport 30/day, food 60/day, activities 40/day, shopping 100, misc 50) is used.
- **tsv_to_csv** — Convert tab-separated values (TSV, the format psql, mysql --batch and Excel "Text (Tab delimited)" write) to comma-separated values, or to any single-character delimiter. A field that Excel quoted because it holds a tab, a quote or a line break is read as one field. Cells that contain the delimiter, a quote or a line break are quoted per RFC 4180; every other cell is written as is. Values stay text: 00123 keeps its zeros. A leading byte order mark is dropped and blank lines are skipped.
- **two_fa_code_tester** — Compute the current TOTP code (RFC 6238) for a base32 secret and return the code, the seconds remaining in the window, and — when a code is supplied — whether it matches. Defaults match Google Authenticator: 6 digits, 30-second period, HMAC-SHA1. Pass "time" (unix seconds) to evaluate a specific moment.
- **type_scale_generator** — Generate a modular type scale as CSS custom properties. Each step multiplies the one below it by a ratio, so sizes stay in proportion instead of being picked by hand. Ratios are the classical musical intervals from minor-second (1.067, tight) to golden-ratio (1.618, dramatic), or supply custom_ratio. Sizes are emitted in rem against a root size so they respect the reader browser setting, or in px if you ask. Returns the full :root block and every step with its pixel equivalent.
- **ulid_generate** — Generate one or more ULIDs — 26-character Crockford base32 identifiers that are lexicographically sortable by creation time. Compatible with standard ULID libraries.
- **unit_convert** — Convert between length, weight, volume, area, speed, time, data size and temperature units (km/mi/m/ft, kg/lb, L/gal/m3, m²/ha/acre, mph/kph/knot, s/min/hr/day/year, KB/MB/GB, °C/°F/K).
- **unix_timestamp_convert** — Convert between Unix timestamps and ISO dates. Modes: "now", "to_date", "to_timestamp".
- **url_decode** — Decode a percent-encoded (URL-encoded) string back to plain text.
- **url_encode** — Percent-encode a string for safe inclusion in URLs.
- **url_params_to_json** — Parse URL query parameters into a JSON object. Accepts a full URL or a bare query string, decodes values, strips a trailing "[]" from keys, and collapses repeated keys into arrays.
- **url_parse** — Parse a URL into its components: protocol, host, port, pathname, query (as an object, repeat keys become arrays), hash, origin, and userinfo.
- **url_safety_checker** — Run offline heuristic safety checks on a URL and return a risk level (low/medium/high), a 0+ risk score, per-check results, and warnings. Checks HTTPS, suspicious TLDs, URL shorteners, phishing keyword patterns and brand lookalikes (e.g. paypa1 for paypal), raw IP hosts, deceptive domain characters, and excessive subdomains. No network requests — pattern analysis only.
- **url_to_webloc** — Convert Windows .url Internet Shortcuts into Mac .webloc website location files. Pass each file as { name, content } with its text. The URL= line of the [InternetShortcut] section (case-insensitive, CRLF and byte order mark tolerated) becomes the URL string of an XML property list, which Finder opens; the output keeps the source name with .webloc instead of .url (repeated names get " (2)"). A file without that section or URL line, and any binary .lnk shortcut, is listed in skipped with the reason and the rest still convert. Writes XML plists, not binary ones. The URLs are copied as written and never opened.
- **url_validate** — Validate that a string is a well-formed URL and (optionally) require HTTPS. Returns the parsed components when valid.
- **uuid_generate** — Generate one or more UUIDs: random v4 (default), time-ordered v7 (RFC 9562), time-based v1 (RFC 4122, with a random node id rather than a MAC address), or the nil UUID. The same four versions the web page offers.
- **vat_calculator** — Return the net amount, the VAT (or sales tax) amount, and the gross amount for a price. Mode add treats the amount as net and adds tax; modes remove and extract treat the amount as gross and take the tax out.
- **vcard_generate** — Generate a vCard (.vcf) contact card from name, organisation, emails, phones, address, URL, note and birthday. vCard 3.0 by default (imports into iOS Contacts, Google Contacts and Outlook), 4.0 on request. Values are escaped and long lines folded per RFC 6350.
- **vcf_to_csv** — Convert a vCard (.vcf) contacts export from an iPhone, an Android phone, Gmail or Outlook into CSV, one row per contact. vCard 2.1, 3.0 and 4.0 are read, including folded lines, quoted-printable values, group prefixes such as item1.TEL, and bare 2.1 parameters such as TEL;WORK;VOICE. The first email and phone fill their own columns while every value is also listed with its type in the emails and phones columns. A photo is never written into the spreadsheet: PHOTO, LOGO, SOUND and KEY values are dropped and counted. The browser page accepts a 10 MB file; the API and MCP surfaces cap a request at 1 MB, so a large address book belongs on the page.
- **vocabulary_worksheet** — Turn a word list into a printable vocabulary and spelling worksheet with an answer key. Activities: scramble (unscramble the letters), missing_letters (fill in the blanks; the first letter stays), match_definitions (words against shuffled definitions; every word needs one), word_search (letter grid up to 15×15, words across, down and diagonally), and trace (copy practice). Returns each section as data plus plain text, an answer key and Markdown. Pass a seed for a reproducible sheet.
- **water_intake_calculator** — Calculate a recommended daily water intake in liters, ounces, cups, and 250 ml glasses, plus a per-waking-hour amount. Starts at 33 ml per kg of body weight and adjusts for age, activity level, climate, caffeinated drinks, pregnancy, and breastfeeding.
- **webloc_to_url** — Convert Mac .webloc website shortcuts into Windows .url Internet Shortcuts. Pass each file as { name, content, encoding }: an XML .webloc as text, or a binary-plist .webloc as base64 with encoding "base64". The URL key of the property list becomes URL= under [InternetShortcut], with CRLF line endings, and the output file keeps the source name with .url instead of .webloc (repeated names get " (2)"). Files that are empty, not a property list, or have no URL key are listed in skipped with the reason, and the rest still convert. Also returns a name,url CSV of the converted set. The URLs are copied as written and never opened; non-web schemes are kept and reported in warnings.
- **whitespace_clean** — Clean whitespace in text: trim the ends, trim each line, collapse runs of spaces, remove blank lines, and normalize line endings.
- **whois_lookup** — Return WHOIS-style registration data for a domain from the public RDAP service: registrar, creation, update and expiry dates, EPP status codes, nameservers and DNSSEC state.
- **windows_update_settings_generator** — Generate a Windows Update configuration script (.reg, .ps1, or .bat) plus a matching restore script from a preset and/or individual settings, and return them with a risk level and a change summary. Presets: gamer_mode, full_control, safe_defer, metered, custom. Settings override the preset.
- **word_count** — Count words, characters, sentences, paragraphs, lines, and estimated reading time at 200 words per minute.
- **work_anniversary_calculator** — Calculate job tenure between a start date and a target date: years/months/days, totals in days, weeks, months, and hours, approximate working days (5 of 7) and working hours (8 per working day), the weekday the job started, the next work anniversary, and passed/upcoming milestones (1 month to 10 years).
- **worksheet_generator** — Generate a printable math worksheet of addition, subtraction, multiplication, division, or mixed problems at easy (1–10), medium (1–50), or hard (1–100) difficulty, and return the numbered problems with answers, a plain-text worksheet, and an answer-key text. Subtraction never goes negative and division always divides evenly. Pass a seed for a reproducible sheet.
- **wvw_apps_json_generator** — Build and validate an apps.json manifest for wvw.dev (World Vibe Web) from a store object and a list of apps. Returns the cleaned manifest with $schema and computed categories, plus validation errors (missing fields, bad kebab-case ids, duplicate ids, unknown categories, invalid GitHub URLs) and warnings (invalid optional URLs). Valid category ids: macos, web, cli, developer-tools, productivity, utilities, education, entertainment, games, music, photo-video, graphics-design, social-networking, finance, health-fitness, lifestyle, news, business, reference, travel, food-drink, navigation, sports, weather, shopping, books, medical.
- **x402_config_generator** — Return ready-to-paste x402 payment integration code plus the install command: a paywalled SERVER (Express, Hono, Next.js, Fastify, Gin, FastAPI, Flask) with priced routes, or a paying CLIENT (fetch, axios, Go, Python httpx/requests) for the chosen networks.
- **xml_formatter** — Beautify or minify an XML document and return the formatted text. The input is checked for well-formedness first (balanced tags, quoted attributes, one root element); a malformed document returns an error that names the problem and its line. Beautify re-indents one element per line; minify removes whitespace between tags.
- **xml_sitemap_generator** — Generate a valid XML sitemap from a list of URLs and return the XML, the number of URLs written, the invalid URLs that were skipped, and the byte size. Each URL can carry its own priority, changefreq, and lastmod; defaults apply otherwise. Above 50,000 valid URLs a sitemap index is returned instead.
- **xml_to_json** — Minimal XML → JSON converter. Attributes are prefixed with "@", mixed text goes to "#text".
- **yaml_to_json** — Minimal YAML → JSON converter (scalars, maps, lists, basic block scalars). Does NOT handle anchors/references or merge keys.
- **yaml_toml_converter** — Convert YAML to TOML 1.0 or TOML back to YAML. Mappings become tables, lists of mappings become arrays of tables, and scalar lists stay inline arrays. The YAML root must be a mapping because TOML has no top-level list. TOML has no null either: nulls is "drop" (default, the key is left out and reported) or "empty" (an empty string). Anchors, aliases and `<<` merge keys are resolved on load and written out in full. Comments are not preserved in either direction. Parse errors report the line and column.
- **yaml_validator** — Validate YAML and return either the re-formatted document or the parse error with its line and column. Valid input is re-emitted with the chosen indentation, optionally with keys sorted alphabetically at every level.
- **youtube_description_generator** — Assemble a structured YouTube video description from main content, timestamps, links, social links, a call to action and hashtags, with the section headings the page uses ("⏱️ Timestamps:", "🔗 Links & Resources:", "📱 Follow Me:"). Returns the description and its length against the 5,000-character limit. Template-based, no AI.
- **yoyo_component_generator** — Generate Yoyo PHP component boilerplate: the PHP class (properties, props, query string, listeners, lifecycle hooks, actions, computed properties) and the matching PHP, Blade, or Twig template. Anonymous components return only the template.
- **yoyo_config_generator** — Generate Yoyo PHP framework setup code: the composer install command, the bootstrap/service-provider code, the route handler, and a sample page. Supports PHP, Blade, and Twig template engines for vanilla PHP or Laravel.
- **yoyo_loading_state_builder** — Build Yoyo PHP "yoyo:spinning" loading-state attributes and a ready-to-paste HTML snippet. Choose show/hide, add class, remove class, set attribute, or a combination, with optional delay and target actions.
- **workflow_run** — Execute a linear chain of MCP tool calls in one round-trip. Each step's args can reference the previous step's output via the literal string "$prev" (whole-value replacement) or by embedding "$prev" in a template string (JSON-stringified substitution). Halts on the first failing step and returns results up to that point. Max 8 steps per call. workflow_run cannot call itself.

## Claude Desktop Quick Installation
Remote MCP endpoint (confidence: medium). Install path inferred — verify against the README before running it. Add as a URL/SSE server in your client:

```json
"mcpServers": {
  "findutils-mcp": {
    "url": "https://mcp.findutils.com/"
  }
}
```

## Documentation

## What FindUtils MCP MCP server does

FindUtils MCP MCP server provides AI agents with a remote collection of utility operations through the Model Context Protocol. The catalog is described as containing 388 tools, spanning data formats, encoding, hashing, conversion, generation, and other developer-oriented tasks.

The tools return structured results appropriate for agent workflows. For example, PDF extraction can return text and positional JSON, invoice generation returns a base64-encoded PDF, and bookmark converters return formats such as CSV, Markdown, or Netscape HTML. Several tools also expose validation details, counts, schedules, or generated source alongside the primary result.

## How it works

An MCP-compatible AI client calls a named FindUtils operation with its input parameters. The operation performs the conversion, calculation, generation, or analysis and returns the result to the client. Some operations are deterministic: avatar generation is seeded from the normalized input, while encoding tools follow formats such as RFC 4648 Base32 and Base64.

The catalog also includes a group of A2UI-specific tools. Agents can retrieve protocol documentation, obtain the basic catalog schema, request canonical examples, compare two JSONL payloads, generate a system prompt, and validate generated JSONL with line-specific diagnostics. These tools are relevant when an application produces A2UI content and needs reference material or pre-delivery checks.

Inputs vary by operation. PDF extraction accepts either a public HTTPS PDF URL or a base64-encoded PDF, while bookmark tools consume exported browser files or supported JSON structures. Calculator tools accept domain-specific values such as dates, loan rates, dimensions, or body measurements.

## Tools and capabilities

Representative capabilities include:

- Generate invoices as PDF files and avatars or barcodes as SVG.
- Extract PDF text and structured bounding-box data.
- Encode and decode Base32 or Base64 text.
- Convert subtitle files, browser bookmarks, and API endpoint lists.
- Calculate age, BMI, body composition, auto loans, and amortization schedules.
- Generate API documentation as Markdown or OpenAPI 3.0.3 JSON.
- Inspect robots.txt rules for 24 named crawlers.
- Produce CSS box-shadow declarations and aspect-ratio calculations.

The bookmark tools preserve or transform folder structures, dates, titles, and URLs according to each operation's documented format. They do not fetch bookmarked pages. The A2UI validator can check a payload against the basic catalog or a supplied custom catalog.

## Limitations and notes

Those details should be confirmed from the service's own documentation before deployment.

Some operations have explicit input limits or format constraints. PDF extraction is intended for documents under 10 MB, and the API and MCP surfaces for browser bookmark HTML accept up to 1 MB, although the browser page accepts 10 MB. A PDF URL may fail when the source blocks server requests; sending the file as base64 is the documented alternative.

The tools generally operate on supplied data rather than retrieving external content. Bookmark conversion does not test links, and the bookmarks diff tool does not fetch them. Format-specific restrictions also apply: barcode symbologies accept different character sets, and bookmark JSON conversion supports only the documented Chromium, Firefox, and plain-tree shapes.

_Full upstream README: https://allmcps.com/mcp/findutils-mcp/readme_

